第2章选择结构——2.ifelseif

上传人:大米 文档编号:586623875 上传时间:2024-09-05 格式:PPT 页数:37 大小:201.03KB
返回 下载 相关 举报
第2章选择结构——2.ifelseif_第1页
第1页 / 共37页
第2章选择结构——2.ifelseif_第2页
第2页 / 共37页
第2章选择结构——2.ifelseif_第3页
第3页 / 共37页
第2章选择结构——2.ifelseif_第4页
第4页 / 共37页
第2章选择结构——2.ifelseif_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《第2章选择结构——2.ifelseif》由会员分享,可在线阅读,更多相关《第2章选择结构——2.ifelseif(37页珍藏版)》请在金锄头文库上搜索。

1、 北京邮电大学世纪学院 C语言程序设计第二章第二章 北京邮电大学世纪学院 C语言程序设计2.3 if语句语句一一.If.If语句的三种基本形式语句的三种基本形式(1)if (1)if (表达式)(表达式) 语句语句 if(xy) printf(“%d”,x);表达式表达式语句语句真(非真(非0)假假(0) 北京邮电大学世纪学院 C语言程序设计2.3 if语句(续)语句(续)(2)if(2)if(表达式表达式) ) 语句语句1 1 else else 语句语句2 2例:例:if(xif(xy)y) printf(“%d”,xprintf(“%d”,x);); else else printf(“

2、%d”,yprintf(“%d”,y);); 条件条件 语句句1 语句句2非非00 北京邮电大学世纪学院 C语言程序设计2.3 if语句(续)语句(续)(3)if(3)if(表达式(表达式1 1)语句)语句1 1 else if( else if(表达式表达式2)2)语句语句2 2 else if( else if(表达式表达式3)3)语句语句3 3 else if( else if(表达式表达式m)m)语句语句m m else else 语句语句n n 北京邮电大学世纪学院 C语言程序设计2.3 if语句(续)语句(续)例:例: if (number500)cost=0.15;if (num

3、ber500)cost=0.15; else else if(numberif(number300)cost=0.10;300)cost=0.10; else else if(numberif(number100)cost=0.075;100)cost=0.075; else else if(numberif(number50)cost=0.05;50)cost=0.05; else cost=0; else cost=0; 北京邮电大学世纪学院 C语言程序设计2.3 if语句(续)语句(续)说明:说明:(1) 3(1) 3种形式的种形式的ifif语句中在语句中在ifif后面都有表达式,后面都

4、有表达式, 一般为逻辑表达式或关系表达式。一般为逻辑表达式或关系表达式。例如,例如,if(aif(a=b&xb&x=y) =y) printf(“aprintf(“a= =b,xb,x=y”);=y”);在执行在执行ifif语句时先对表达式求解,若表达式指为语句时先对表达式求解,若表达式指为0 0,按假处理,若值非,按假处理,若值非0 0,按真处理,执行指定语,按真处理,执行指定语句。句。例如,例如,if(3) if(3) printf(“okprintf(“ok”);”); if(aif(a) ) printf(“%d”,aprintf(“%d”,a););都是合法的都是合法的 北京邮电大学

5、世纪学院 C语言程序设计2.3 if语句(续)语句(续)说明:说明:(2)(2)第二,第三种形式的第二,第三种形式的ifif语句中,在每个语句中,在每个 elseelse前面有一个分号,整个语句结束处有一前面有一个分号,整个语句结束处有一 个分号。个分号。例如,例如,if(xif(x0) 0) printf(“%f”,xprintf(“%f”,x) ); ; else else printf(“%f”,-xprintf(“%f”,-x) ); ;但注意,上面不是两个语句,而是一个但注意,上面不是两个语句,而是一个ifif语句,语句,ElseElse子句不能作为语句单独使用。子句不能作为语句单独

6、使用。 北京邮电大学世纪学院 C语言程序设计2.3 if语句(续)语句(续)说明:说明:(3)(3)在在ifif和和elseelse后面可以只含有一个内嵌的操后面可以只含有一个内嵌的操 作语句,也可以有多个操作语句,此时用花作语句,也可以有多个操作语句,此时用花 括号括号 将几个语句括起来成为一个复合语句。将几个语句括起来成为一个复合语句。例如,例如,if(a+bif(a+b c&b+cc&b+c a&c+aa&c+ab)b) s=0.5*( s=0.5*(a+b+ca+b+c);); area= area=sqrt(ssqrt(s*(s-a)*(*(s-a)*(s-bs-b)*()*(s-c

7、s-c);); printf(“areaprintf(“area=%6.2f”,area);=%6.2f”,area); else else printf(“itprintf(“it is not a trilateral”); is not a trilateral”);注意第五行花括号注意第五行花括号 外面不需再加分号外面不需再加分号; ;。因为。因为 内是内是一个完整的复合语句,不需要附加分号。一个完整的复合语句,不需要附加分号。 北京邮电大学世纪学院 C语言程序设计2.3 if语句(续)语句(续)例例2.1 2.1 输入两个实数,按代数值由小到大的顺序输出这两输入两个实数,按代数值由小

8、到大的顺序输出这两个数。个数。#include#include void main()void main()float float a,b,ta,b,t; ;scanf(scanf(“%f,%f%f,%f”,&a,&b,&a,&b););if(aif(ab)b)t=a;t=a; a=b; a=b; b=t; b=t;printf(printf(“%5.2f,%5.2fn%5.2f,%5.2fn”,a,b);,a,b); ynabT=aA=bB=t 北京邮电大学世纪学院 C语言程序设计2.3 if语句(续)语句(续)例例2.2 2.2 输入三个数输入三个数a,b,ca,b,c, ,要求按由小到大

9、的顺序输出。要求按由小到大的顺序输出。If ab If ab 将将a a和和b b对换对换 (a a是是a a,b b中小者)中小者)If ac If ac 将将a a和和c c对换对换 (a a是是a a,c c中小者,因此中小者,因此a a是三是三 者中最小者)者中最小者)If bc If bc 将将b b和和c c对换对换 (b b是是b b,c c中小者,也是三者中中小者,也是三者中 次小者)次小者) 北京邮电大学世纪学院 C语言程序设计2.3 if语句(续)语句(续) #include #include void main ( ) void main ( ) float a,b,c,

10、t;float a,b,c,t; scanf(“%f,%f,%f”,&a,&b,&c); scanf(“%f,%f,%f”,&a,&b,&c); if(ab)if(ab) t=a;a=b;b=t; t=a;a=b;b=t; if(ac) if(ac) t=a;a=c;c=t; t=a;a=c;c=t;if(bif(bc)c) t=b;b=c;c=t; t=b;b=c;c=t; printf(%5.2f,%5.2f,%5.2fn,a,b,c); printf(%5.2f,%5.2f,%5.2fn,a,b,c); 北京邮电大学世纪学院 C语言程序设计2.3 if语句(续)语句(续)二二.If.If

11、语句的嵌套语句的嵌套在在ifif语句中又包含一个或多个语句中又包含一个或多个ifif语句称为语句称为ifif语句的嵌套。语句的嵌套。形式:形式:if()if()if() if() 语句语句1 1else else 语句语句2 2elseelseif() if() 语句语句3 3else else 语句语句4 4内嵌内嵌ifif 北京邮电大学世纪学院 C语言程序设计2.3 if语句(续)语句(续)匹配规则:匹配规则:elseelse总是与它总是与它上面上面的,最近的,同一复合语句中的,的,最近的,同一复合语句中的,未配未配对对的的ifif语句配对。语句配对。例:If()if() 语句1elsei

12、f() 语句2else 语句3例:If()if() 语句1elseif() 语句2else 语句3当当ifif和和elseelse数目不同时,可以加数目不同时,可以加花括号花括号来确定配对关系。来确定配对关系。 北京邮电大学世纪学院 C语言程序设计2.3 if语句(续)语句(续) -1 (x0)算法算法1 1: 算法算法1 1:输入输入x x 输入输入x x若若x0,x0,则则y=-1 y=-1 若若x0,x0,x0,则则y=1 y=1 若若x=0,x=0,则则y=0y=0输出输出y y 若若x0,x0,则则y=1y=1 输出输出y y 北京邮电大学世纪学院 C语言程序设计2.3 if语句(续

13、)语句(续) #includevoid main() int x,y; scanf(“%d”,&x); 程序段程序段 printf(“x=%d,y=%dn”,x,y); 北京邮电大学世纪学院 C语言程序设计2.3 if语句(续)语句(续)上例中的程序段有四个,请判断哪个是正确的?上例中的程序段有四个,请判断哪个是正确的?程序程序1: 程序程序2: if(x=0) Y=-1; if(x0) y=1; else else y=0; if(x=0) y=0; else y=-1; else y=1;程序程序3: 程序程序4: y=-1; y=0; if(x!=0) if(x=0) If(x0) y=

14、1; if(x0) y=1; else y=0; else y=-1;正确正确 -1 (x0) 北京邮电大学世纪学院 C语言程序设计程序程序1:main()int x,y; scanf(“%d”,&x); if(xbab时将时将a a的值赋给的值赋给maxmax,当,当abab时将时将b b的值赋给的值赋给maxmax,可以看到无论可以看到无论abab是否满足,都是向同一个变量赋值。是否满足,都是向同一个变量赋值。 可以用下面的条件运算符来处理:可以用下面的条件运算符来处理: ()?)?; 北京邮电大学世纪学院 C语言程序设计2.3 if语句(续)语句(续)说明:说明:(1) (1) 条件运算

15、符的执行顺序:先求解表达式,若为非(真)条件运算符的执行顺序:先求解表达式,若为非(真) 则求解表达式,此时表达式的值就作为整个条件表达式则求解表达式,此时表达式的值就作为整个条件表达式 的值。若表达式的值为(假),则求解表达式,表达的值。若表达式的值为(假),则求解表达式,表达 式的值就是整个条件表达式的值。式的值就是整个条件表达式的值。如,如,max(amax(a b)?a:bb)?a:b执行结果就是将条件表达式的值赋给执行结果就是将条件表达式的值赋给maxmax,也就是将,也就是将a a和和b b中大者中大者赋给赋给maxmax。 北京邮电大学世纪学院 C语言程序设计2.3 if语句(续

16、)语句(续)说明:说明:(2)(2)条件运算符优先级高于赋值运算符条件运算符优先级高于赋值运算符 ,低于关系运算符,低于关系运算符 和算术运算符。和算术运算符。 max=(amax=(ab)?a:bb)?a:b 括号可以不要,可写成括号可以不要,可写成max=amax=ab?a:bb?a:b如果有如果有ab?a:b+1 ab?a:b+1 相当于相当于ab?aab?a:(b+1) :(b+1) 而不相当于而不相当于( (ab?aab?a:b)+1 :b)+1 北京邮电大学世纪学院 C语言程序设计2.3 if语句(续)语句(续)说明:说明:(3).(3).条件运算符的结合方向为条件运算符的结合方向

17、为“自右至左自右至左”。 例如,例如,aab?a:cb?a:c d?c:dd?c:d 相当于相当于 aab?a:(cb?a:(c d?c:dd?c:d) )如果如果a=1,b=2,c=3,d=4a=1,b=2,c=3,d=4,则条件表达式的值等于,则条件表达式的值等于4 4 北京邮电大学世纪学院 C语言程序设计2.3 if语句(续)语句(续)说明:说明:(4).“(4).“表达式表达式2”2”和和“表达式表达式3”3”不仅可以是数值表达式,还可以不仅可以是数值表达式,还可以 是赋值表达式或函数表达式。是赋值表达式或函数表达式。如可以写成:如可以写成:aab?(ab?(a=100)=100):(

18、b=100);:(b=100);或或aab?printf(“%d”,a):printf(“%d”,bb?printf(“%d”,a):printf(“%d”,b););上例上例2 2相当于相当于if(aif(ab) b) printf(“%d”,aprintf(“%d”,a) )else else printf(“%d”,bprintf(“%d”,b);); 北京邮电大学世纪学院 C语言程序设计2.3 if语句(续)语句(续)说明:说明:(5).(5).条件表达式中,表达式的类型可以与表达式和表达条件表达式中,表达式的类型可以与表达式和表达 式的类型不同。式的类型不同。 如,如,x?a:bx是

19、整型变量,若是整型变量,若x等于等于0,则条件表达式的值为,则条件表达式的值为b表达式表达式2 2和表达式和表达式3 3的类型也可以不同,此时条件表达式的值的的类型也可以不同,此时条件表达式的值的类型为二者中较高的类型。类型为二者中较高的类型。如,如,xy?1:1.5xy?1:1.5如果如果x=yxy,xy,值应为值应为1 1,由于,由于1.51.5是实型,比整形高,因此将是实型,比整形高,因此将1 1转换成实行值转换成实行值1.01.0 北京邮电大学世纪学院 C语言程序设计2.3 if语句(续)语句(续)例例2.42.4输入一个字符,判别它是否大写字母,如果是,将输入一个字符,判别它是否大写

20、字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。得到的字符。 #include #include void main ( ) void main ( ) char char chch; ; scanf(%cscanf(%c,& ,& chch);); chch= =( (chch=A& =A& chch=Z)?(ch+32):ch;=Z)?(ch+32):ch; printf(%cn,chprintf(%cn,ch);); 如果字符变量ch的值为大写字母,则条件表达式的值为(),即相应的小写字母。如果ch的值不是大写字

21、母,则条件表达式的值为,即不进行转换。 北京邮电大学世纪学院 C语言程序设计2.4 switch语句语句switchswitch语句的格式:语句的格式:(表达式)(表达式) 常量表达式:语句常量表达式:语句 常量表达式:语句常量表达式:语句 常量表达式:语句常量表达式:语句 :语句:语句 北京邮电大学世纪学院 C语言程序设计2.4 switch语句(续)语句(续)例例: :要求按照考试成绩的等级输出百分制分数段,用要求按照考试成绩的等级输出百分制分数段,用switchswitch语句实现:语句实现:()()();); ();); ();); ();); ();); 北京邮电大学世纪学院 C语言

22、程序设计2.4 switch语句(续)语句(续)说明:说明:(1)(1)后面括弧内的后面括弧内的“表达式表达式”, 标准允许标准允许 它为任何类型。它为任何类型。(2) (2) 当表达式的值与某一个后面的常量表达式的值相当表达式的值与某一个后面的常量表达式的值相 等时,就执行此后面的语句,若所有的等时,就执行此后面的语句,若所有的 中的常量表达式的值都没有与表达式的值匹配的,就执行中的常量表达式的值都没有与表达式的值匹配的,就执行 后面的语句。后面的语句。(3) (3) 每一个的常量表达式的值必须互不相同,否则就每一个的常量表达式的值必须互不相同,否则就 会出现互相矛盾的现象(对表达式的同一个

23、值,有两种或会出现互相矛盾的现象(对表达式的同一个值,有两种或 多种执行方案)。多种执行方案)。 北京邮电大学世纪学院 C语言程序设计2.4 switch语句(续)语句(续)(4) (4) 各个和的出现次序不影响执行结各个和的出现次序不影响执行结 果。例如,可以先出现果。例如,可以先出现“:”,再出现,再出现 “ “ :”,然后是,然后是“ :”。(5) (5) 执行完一个后面的语句后,流程控制转移到下一执行完一个后面的语句后,流程控制转移到下一 个继续执行。个继续执行。“常量表达式常量表达式”只是起语句只是起语句 标号作用,并不是在该处进行条件判断。在执行标号作用,并不是在该处进行条件判断。

24、在执行 语句时,根据后面表达式的值语句时,根据后面表达式的值 找到匹配的入口标号,就从此标号开始执行下去,不再进找到匹配的入口标号,就从此标号开始执行下去,不再进 行判断。行判断。应该在执行一个分支后应该在执行一个分支后, ,可以用一个可以用一个 语句来终止语句来终止switchswitch语句的执行。语句的执行。请思考:在上面的例子中,如果请思考:在上面的例子中,如果gradegrade的值等于的值等于AA,输出结果是,输出结果是什么?什么? 北京邮电大学世纪学院 C语言程序设计如如grade值为值为A,则将连续输出:,则将连续输出:851007484606960n”);break;(“60

25、n”);break;gradegrade的值为的值为AA、BB或或CC时都执行同一组语句。时都执行同一组语句。 北京邮电大学世纪学院 C语言程序设计2.5 程序举例程序举例例例2.52.5 写程序,判断某一年是否闰年。 北京邮电大学世纪学院 C语言程序设计2.5 程序举例(续)程序举例(续)#include void main()int year, leap; scanf(%d,&year); if (year%4=0)if (year%100=0) if (year%400=0) leap=1; else leap=0; else leap=1; else leap=0; if (leap)

26、 printf(%d is ,year); else printf(%d is not ,year); printf(a leap year.n);(!) ; (!) ; (!); ; 运行情况: . . 北京邮电大学世纪学院 C语言程序设计l也可以用一个逻辑表达式包含所有的闰年条件,将上述两个例子的if语句用如下代替:if(year%4=0&year%100!=0)|(year%400=0)leap=1;elas leap=0; 北京邮电大学世纪学院 C语言程序设计2.5 程序举例(续)程序举例(续)例例2.7 2.7 运输公司对用户计算运费。运输公司对用户计算运费。路程()越远,每公里运费

27、越低。标准如下:路程()越远,每公里运费越低。标准如下: 没有折扣没有折扣 折扣折扣 折扣折扣 折扣折扣 折扣折扣 折扣折扣设每公里每吨货物的基本运费为,货物重为,距离为,设每公里每吨货物的基本运费为,货物重为,距离为,折扣为,则总运费的计算公式为:折扣为,则总运费的计算公式为:* * * *()() 北京邮电大学世纪学院 C语言程序设计2.5 程序举例(续)程序举例(续)分析折扣变化的规律性:分析折扣变化的规律性:折扣的折扣的“变化点变化点”都是的倍数都是的倍数 在横轴上加一种坐标,在横轴上加一种坐标,c c的值为的值为s/250s/250。c c代表的倍数。代表的倍数。 ,无折扣;,无折扣

28、;,折扣;,折扣;,;,;,;,;,;,; ,。,。 北京邮电大学世纪学院 C语言程序设计2.5 程序举例(续)程序举例(续)#include #include void main ( )void main ( ) int c,s; int c,s;float p,w,d,f;float p,w,d,f;scanf(%f,%f,%d,&p,&w,&s);scanf(%f,%f,%d,&p,&w,&s);if(s=3000) c=12;if(s=3000) c=12;else c=s/250;else c=s/250;switch(c)switch(c) case 0:d=0;break; ca

29、se 0:d=0;break; case 1:d=2;break; case 1:d=2;break; case 2:case 3:d=5;break case 2:case 3:d=5;break; case 4:case 5:case 6:case 7:d=8;break; case 4:case 5:case 6:case 7:d=8;break; case 8:case 9:case 10: case 8:case 9:case 10: case 11:d=10;break; case 11:d=10;break; case 12:d=15;break; case 12:d=15;break; f=p*w*s*(1-d/100.0);f=p*w*s*(1-d/100.0);printf(freight=%15.4fn,f);printf(freight=%15.4fn,f);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号