收藏 分享(赏)

C语言第五章.ppt

上传人:hyngb9260 文档编号:8433692 上传时间:2019-06-26 格式:PPT 页数:46 大小:163.50KB
下载 相关 举报
C语言第五章.ppt_第1页
第1页 / 共46页
C语言第五章.ppt_第2页
第2页 / 共46页
C语言第五章.ppt_第3页
第3页 / 共46页
C语言第五章.ppt_第4页
第4页 / 共46页
C语言第五章.ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

1、第5章 选择结构程序设计 选择结构是三种基本结构之一,特点是: 根据给定条件 :成立时执行一组操作,不成立时执行另一组操作。 C中选择结构利用if语句实现。 5.1 关系运算符和关系表达式关系运算是比较运算,判断比较的结果是否符合给定的条件,结果为逻辑值“真”或“假”。(前已讨论算术、赋值、逗号。现讨论关系、逻辑为条件和循环表达式为条件和循环语句所用)。 5.1.1 关系运算符及其优先级关系运算符有6种:、 = :优先级为6级= = 、!= :优先级为7级 结合性为从左到右 算符优先级高,运算次序优先,关系运算符和其它运算符优先级的比较:高 算术运算符:* 、/、%(3) +、- (4)关系运

2、算符:、 =(6) = 、!=(7)逻辑运算符:! (2) & (11) | (12) 低 赋值运算符:=、 +=、 -=、 *=、 /=、 %=(14) 由于存在优先级,因此下面表达式是等价的:,5.1.2关系表达式 关系表达式:用关系运算符将两个表达式(算术、关系、逻辑、赋值、字符)连接起来的式子。如:a b 、 a+b b+ c 、 (a=3) (b=5)a b) (c b 真 a b = = c 真b + c b d的为1f = a b c f 值为0,5.2 逻辑运算符和逻辑表达式 逻辑表达式:用逻辑运算符将表达式连接起来的式子。 4.2.1 逻辑运算符及其优先次序 在 c 语言中,

3、逻辑运算符有:1.逻辑与:& 优先级11 2.逻辑或:| | 优先级12 3.逻辑非: ! 优先级2,有如下逻辑表达式:a & b: 当 a, b 都为真时,结果为真,否则结果为假a | | b :当 a, b 都为假时,结果为假,否则结果为真! a : 当 a 为真时 , 结果为假,当a为假时,结果为真。,在一个逻辑表达式中,若包含多个逻辑运算符时,则运算顺序按运算符优先级的高低进行。 如:下面表达式是逻辑还是关系表达式?,5.2.2 逻辑表达式在逻辑表达式中参加运算的数据可以是常量、变量、表达式。例:T5-0-1.c main( ) int a= -5,i,j,k,l,m; float b

4、=0.01;i= !a;j=a & b; k= a | | b;l=(5 3 & 2 | | 8 9 ;printf (“i=%d,j=%d,k=%d, l=%d, m=%dn”, i, j, k,l, m); ,运行结果: i=0,j=1,k=1,l=1,m=0,在逻辑表达式求解过程中,所有逻辑运算符并不一定都被执行。只有在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。 1.逻辑与运算符: & 如有逻辑表达式:a & b & c 执行过程是: 当a为0时,b和c不用再判断了, 逻辑与运算符将不 再执行,结果为0, 否则还要继续后边的运算。,2.逻辑或运算符:| | 如有逻辑表

5、达式:a | | b | | c 执行过程是: 当a为非0时,b和c不用再判断了,逻辑或运算符将不 再执行,其结果为1,否则继续执行后面的运算。,例:T5-0-2.c main( ) int a, b=0, c=0, d=0; scanf(“%d”, ,例T5-0-3.c main( ) int a,b=0,c=0,d=0; scanf(“ %d”,在C中,巧妙地使用逻辑表达式,可以表示一个复杂的问题 如:关于闰年问题:符合下列条件之一,均为闰年。 (1)能被4整除并且不能被100整除 (2)能被4整除并且能被400整除 其逻辑表达式为: (year % 4 = =0 & year % 100

6、 != 0) | | (year % 400 =0 & year % 4 = = 0) 由于能被400 整除的年份一定能被4 整除,所以可省去了后一部分,即: (year % 4 = =0 & year % 100 != 0) | | (year % 400 =0 ) 若判断非闰年,只在闰年表达式前加 ! 即: !(year % 4 = = 0 & year % 100 != 0) | | ( year % 400 = = 0),5.3 if 语句 选择结构中使用的一种语句。 根据给定的条件判别是否满足,以决定执行哪种操作。 5.3.1 if 语句的三种形式 1.第一种形式的条件语句 if (

7、表达式) 语句表达式可以是常量、变量、各种表达式。 其类型可以是整、实、字 符型。语句可以是一句或 复合语句。,例T5-0-4.c main( ) int x=0; float y=-5.6; if(x) printf (“x=%dn”,x); if(y) printf (“y=%fn”, y); if(0) printf(“ 0=%dn”, 0); if(xy) printf (“x-y=%fn”, x-y); if(y -100)x+;y+;printf(“x=%d, y=%fn”, x, y); ,运行结果: y= -5.600000 0=48 x- y=5.600000 x=1, y=

8、-4.600000,2. 第二种形式的条件语句 if(表达式) 语句1else 语句2 例T5-0-5.c main( ) int x,y; printf (“please input x, yn”); scanf (“%d %d”, 运行结果:please input x,y2 _ 5 输出:y=534 _ 28 x=34,3. 第三种形式的条件语句if(表达式1) 语句1else if(表达式2) 语句2else if(表达式3) 语句3else if(表达式m) 语句melse 语句 n 右图为: m=4 n=5,例: 商店售货按购物的款数分别给予不同的优惠折扣。设变量:n:购物金额,

9、c:优惠折扣百分比,a:优惠后的实际款数 T5-0-6.c main( ) float n, c, a; scanf (“%f”, ,输入: 输出: 800 680.000000 480 432.000000 200 185.000000 80 76.000000 30 30.000000,说明: 1.执行if语句时,先判断表达式的值,为真时(非0),执行其后语句,为假(0)时不执行其后的语句,表达式可以是常量、变量、各种表达式。 2.if的各内嵌语句用“ ; ”号结束。 3.if和else后面的内嵌语句若有多句,用 括起构成复合语句。 例T5-1.c 输入两个实数,按代数值由小到大输出。 m

10、ain( ) float a, b, t; scanf(“%f, %f”, ,输入: 输出: 3.6,-3.2 -3.20, 3.60 2.5,8.9 2.50, 8.90,例T5-2.c 输入三个数,按从小到大的顺序输出 main( ) float a, b, c, t; scanf(“%f, %f, %f”, ,t a b c7 5 35 7 33 7 5 7 3 5 7,输入: 输出: 7,5,3 3.00,5.00,7.00 1,8,6 1.00,6.00,8.00,5.3.2 if 语句的嵌套 嵌套:在if语句中,又包含1到多个if 语句 一般形式:if( ) if( ) 语句1el

11、se 语句2elseif( ) 语句3 else 语句4,总体上是哪种形式?,使用内嵌的if语句时,应区分表面形式与实际对应关系 如: if( ) if( ) 语句1elseif( ) 语句2else 语句3 编程者希望把中间的else与第一行的if匹配,虽然书写上是对齐的,但编译系统并非如此执行。,在C语言中,if与else 的配对原则是: 从最内层开始,else总是与它上面最近的,未曾配对的if配对。因此,上述问题在编译时的真正效果是: if( ) 等价于下述表示: 当条件成立时执行下面虚框中的内容,总体上是哪种形式?,为了使程序清晰,不至出错,采取的方法是: (1) 使内嵌的if也包含e

12、lse,如上面的问题可进行如下描述:if( )if( ) else elseif( ) else .,(2) 若if和else数目不等,为实现设计者的企图,可用 实现,如上述问题可进行如下描述:if( ) if( ) 语句1 elseif( ) 语句2else 语句3,如此一来,else不是和复合语句匹配而 是与其前面的if匹配,总体上是哪种形式?,有一符号函数 例T5-3.c main( ) int x, y; scanf(“%d”, ,输入: -12340 756 输出:x= -1234, y= -1 x=0, y=0x=756, y=1,例T5-3-1.c main( ) int x,

13、y; scanf(“%d”, ,输入:12 -24 0 输出:x=12, y=1x= -24, y= -1x= 0, y =0,例T5-3-2.c main( ) int x, y; scanf(%d”, ,输入: 输出: -5 x= -5, y=00 x=0, y= -18 x=8, y=1,例T5-3-3.c main( ) int x, y; scanf(%d”, ,输入: 输出: -5 x= -5, y=0 0 x=0, y=-1 8 x=8, y=1,5.3.3 条件运算符 条件表达式的一般形式: 表达式1 ? 表达式2 : 表达式3 其中: ? : 是条件运算符号 在if语句中,给

14、同一变量赋值时,可用语句:if(a b) max=a;else max=b; 上述问题用条件运算符和相应表达式实现如下:max= a b ? a : b,条件表达式的执行过程是:说明: 1.条件运算符的优先级为13级max=(a b) ? a : b max= a b ? a : b (=为14级)max=a b ? a : (b+1) max=ab ? a: b+1 (+为4级),2.条件运算符的结合方向:从右向左 如有表达式: a b ? a : c d ? c : d a,b,c,d的取值如下: 表达式值如下 : a b c d 1 2 3 4 4 5 8 6 2 6 3 2 20 30

15、 3,3. 若if语句内嵌的是赋值语句,且两分支给同一变量赋值时,才可用条件表达式代替条件表达式的结果究竞是给变量c还是x,是无法确定的,所以这种 if 语句不能用条件算符组成的表达式代替。,例T5-3-4.c main( ) int a,b; scanf(“%d%d”, 输入:3 5 输出:max=5,4.表达式1,2,3类型可以相同,也可不同,不同时,低类型向高类型转换 例T5-3-5.c main( ) int x=-1, y=5, z=6; printf (“%cn” , x ? a : b ); printf (“%f n”, yz ? 1 : 1. 5); ,输出:a1.00000

16、0,例T5-4.c 输入一字符,若是大写字母,则将其转换为小写字母 main( ) char ch; scanf (“%c”, A的ASCII码值是65 Z的ASCII码值是90,输入: A 输出:aa a1 1,输入其它字符输出的是什么?,5.4 switch 语句 一种多分支选择语句,可统计成绩、工资等。 一般形式: switch(表达式) case 常量表达式1:语句1;case 常量表达式2:语句2;case 常量表达式n:语句n;default : 语句n+1,说明: (1)switch(表达式) :表达式的值可以是字符、整(ANSI新标准规定允许使用实型数据,若是实型数据,则将其转

17、换为整型数据。) (2)常量表达式必须是整型的或字符型数据(包括表达式常量)。 (3)执行过程: 计算表达式的值,依次与case后的常量表达式比较:若有相等的值,从这点开始执行;,若无相等的值,则执行default后面的语句,若无default, 则无任何操作。 每个常量表达式的值不能相等; case出现的顺序无关; case中若有break语句,则使控制流程跳出switch;若无break,则顺序执行下一个case; case后可有多个语句,不必加 ,系统顺序执行; 多个case可用一组执行语句 如:case a:case b:case c: printf (“ok”);,例T5-4-1.c

18、 从键盘输入不同等级,打印相应的分数段 main( ) char n; scanf(“%c”, 问题的提出:(1)若无break语句,情况将如何;(2)case 顺序颠倒是否可以?(3)case 后有多句,不加 是否行?,输入:ac e 输出:851006069input error !,T5-4-2.c main( ) double a; scanf(“%lf”, ,输入: 输出: 1.23456 abc 2.56789 123 5 2+3 456.789 other,5.5 程序举例 例T5-5 判某年是否是闰年 main( ) int year, leap; scanf(“ %d”, ,

19、输入: 19992000 1972 输出: 1999 is not a leap year2000 is a leap year 1972 is a leap year,例T5-6.c 求ax2+bx+c=0 方程的解几种可能的情况: a=0:不是二次方程; b2 - 4ac=0 :有两个相等的实根 b2 - 4ac0 :有两个不等的实根 b2 - 4ac 0 :有两个共轭复根,X1, 2=,T5-6.c #inlude “math.h” main( ) float a, b, c, disc, x1, x2, re, im; scanf(“%f, %f, %f”,输入: 0, 2, 11,

20、2, 1 2, 6, 1 1, 2, 2 输出: The equation is not quadratic The equation has two equal roots: - 1.0000 The equation has distinct real roots: - 0.1771 and - 2 .8229 The equation has complex roots: - 1. 0000 + 1 . 0000 i - 1 . 0000 - 1 . 0000 i,例T5-7.c 运输费的计算设: s: 距离 w: 货物重量d: 折扣 p: 基本运费 f: 总运费 f=p*w*s*(1-d)s =3000 15%折扣,T5-7.c main( ) int c, s; float p, w, d, f; scanf(“%f,%f,%d”, ,C: 公里数/250,以确定表达式的值 s: 距离 p: 基本运费 w: 货物重量 d: 折扣 总运费f : p*w*s*(1-d),输入: 100, 20, 300 输出: freight=_ _ _588000.0000,s250km 没有折扣 250=s500 2%折扣500 =s1000 5%折扣1000 =s2000 8%折扣 2000 =s3000 10%折扣 3000 =s 15%折扣,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报