《c5选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《c5选择结构程序设计.ppt(30页珍藏版)》请在优知文库上搜索。
1、1第第5章章选择结构程序设计选择结构程序设计C C语言程序设计语言程序设计Page2第第5章章 选择结构程序设计选择结构程序设计主要内容:主要内容:v5.1 关系运算符和关系表达式v5.2 逻辑运算符和逻辑表达式【重点】v5.3 if语句【重点】v5.4 switch语句v5.5 程序举例C C语言程序设计语言程序设计Page35.1 关系运算符和关系表达式关系运算符和关系表达式 所谓“关系运算符”实际上是“比较运算”。v5.1.1 5.1.1 关系运算符及其优先次序关系运算符及其优先次序 (小于) (大于)= (大于或等于)= (等于)!= (不等于)优先级相同(高)优先级相同(高)优先级相
2、同(低)优先级相同(低)附录附录C算术运算符算术运算符关系运算符关系运算符赋值运算符赋值运算符(高高)(低低)C C语言程序设计语言程序设计Page45.1 关系运算符和关系表达式关系运算符和关系表达式v5.1.2 关系表达式关系表达式 用关系运算符关系运算符将两个表达式表达式(算术表达式算术表达式或关关系表达式系表达式,逻辑表达式逻辑表达式,赋值表达式赋值表达式,字符表达式字符表达式)接起来的式子,称关系表达式关系表达式。 例例: ab, a+bb+c, (a=3)(b=5), ab)(bbab”的值为的值为“真真”,表达式的值为,表达式的值为1 1; “(ab)=c(ab)=c”的值为的值
3、为“真真”,表达式的值为,表达式的值为1 1; “b+cab+c3&83逻辑值为1!0逻辑值为14-1值为38y) printf(“%d”,x);(2) if(表达式) 语句1 else 语句2例:if (xy) printf(“%d”,x); else printf(“%d”,y);表达式表达式语句语句真真(非非0)假假(0)条件条件语句语句1语句语句2YNC C语言程序设计语言程序设计Page105.3 if语句语句(3) if(表达式1) 语句1 else if(表达式2) 语句2 else if(表达式3)语句3 else if(表达式m)语句m else 语句nif (number5
4、00) cost=0.15; else if(number300) cost=0.10; else if(number100) cost=0.075; else if(number50) cost=0.05; else cost=0;C C语言程序设计语言程序设计Page115.3 if语句语句v说明:说明:(1)3(1)3种形式的种形式的ifif语句中在语句中在ifif后面都有后面都有表达式表达式,一般为,一般为逻辑逻辑表达式表达式或或关系表达式关系表达式。(2)(2)第二,第三种形式的第二,第三种形式的ifif语句中,在每个语句中,在每个elseelse前面有一个前面有一个分号,整个语句结
5、束处有一个分号。分号,整个语句结束处有一个分号。elseelse子句不能作为子句不能作为语句单独使用语句单独使用,它必须是,它必须是ifif语句的一部分,与语句的一部分,与ifif语句配语句配对使用。对使用。(3)(3)在在ifif和和elseelse后面可以只含有一个内嵌的操作语句,也可后面可以只含有一个内嵌的操作语句,也可以由多个操作语句,此时用花括号将几个语句括起来成以由多个操作语句,此时用花括号将几个语句括起来成为一个为一个复合语句复合语句。C C语言程序设计语言程序设计Page125.3 if语句语句例例5.15.1 输入两个实数按代数值由小到大的顺序输出这两个数。#includev
6、oid main() float a,b,t; scanf(“%f,%f”,&a,&b); if(ab) t=a; a=b; b=t; printf(“%5.2f,%5.2fn”,a,b);v运行结果运行结果:ynabt=aa=bb=tC C语言程序设计语言程序设计Page135.3 if语句语句例例5.25.2 输入三个数a,b,c,要求按由小到大的顺序输出。if ab 将a和b对换if ac 将a和c对换if bc 将b和c对换v运行结果运行结果:abacbca和b交换a和c交换c和b交换ynyyn#include void main ( ) float a,b,c,t; scanf(“%
7、f,%f,%f”,&a,&b,&c); if(ab) t=a; a=b; b=t; if(ac) t=a; a=c; c=t; if(bc) t=b; b=c; c=t; printf(%5.2f,%5.2f,%5.2fn,a,b,c);C C语言程序设计语言程序设计Page145.3 if语句语句v5.3.2 if语句的嵌套语句的嵌套u在if语句中又包含一个或多个if语句称为if语句的嵌套。u形式形式:if() if() 语句语句1 else 语句语句2else if() 语句语句3 else 语句语句4匹配规则匹配规则:else总是总是与它上面的最近的统与它上面的最近的统一复合语句中的未配
8、一复合语句中的未配对的对的if语句配对语句配对。内嵌内嵌ifif内嵌内嵌ififif() if() 语句语句1else if() 语句语句2else 语句语句3注注:当当if和和else数目数目不同时,可以加花括不同时,可以加花括号来确定配对关系。号来确定配对关系。if() if() 语句语句1else if() 语句语句2else 语句语句3须须C C语言程序设计语言程序设计Page155.3 if语句语句例例5.3 有一个函数:y=-1 (x0)编一程序,输入一个x值,输出y值。算法:算法:输入输入x若若x0,则则y=1输出输出y输入xx0开始x0Y=1Y=0Y=1输出y结束YesNoYe
9、sNoC C语言程序设计语言程序设计Page165.3 if语句语句#includevoid main() int x,y; scanf(“%d”,&x); if(x=0) if(x0) y=1; else y=0; else y=-1; printf(“x=%d,y=%dn”,x,y); #includevoid main() int x,y; scanf(“%d”,&x); y=-1; if(x!=0) if(x0) y=1; else y=0; printf(“x=%d,y=%dn”,x,y); #includevoid main() int x,y; scanf(“%d”,&x); y
10、=0; if(x=0) if(x0) y=1; else y=-1; printf(“x=%d,y=%dn”,x,y); #includevoid main() int x,y; scanf(“%d”,&x); if(x0) y=-1; else if(x=0) y=0; else y=1; printf(“x=%d,y=%dn”,x,y); y=-1 (x0)C C语言程序设计语言程序设计Page175.3 if语句语句题题5.15.1 下面程序的输出是:#include void main() int x=1; if(x=2) printf(“OK”); else if(x2) print
11、f(“%dn”,x); else printf(“Quit”);OK#include void main() int a=5,b=8,c=3,max; max=a; if(cb) if(ca) max=c; else if(ba) max=b; printf(“%dn”,max);5else与与if语句的匹配语句的匹配表达式的值表达式的值C C语言程序设计语言程序设计Page185.3 if语句语句v5.3.3 条件运算符条件运算符格式格式:表达式表达式1?表达式表达式2:表达式表达式3 功能功能:判断表达式1的值,如果成立就执行表达式2,否则就执行表达式3使用场合使用场合:若在if语句中,当
12、被判别的表达式的值为“真”或“假” 时,都执行一个赋值语句且向同一个变量赋值时,可以用一个条件运算符来处理。 表达式表达式1条件表达式条件表达式取表达式取表达式2的值的值条件表达式条件表达式取表达式取表达式3的值的值真真(非非0)假假(0)if(ab) max=a;else max=b;max=(ab)?a:b;C C语言程序设计语言程序设计Page195.3 if语句语句v说明:说明:(1)条件运算符的条件运算符的执行顺序执行顺序:先求解表达式,若为非:先求解表达式,若为非(真真)则求解表达式,此时表达式的值就作为整个条件表则求解表达式,此时表达式的值就作为整个条件表达式的值。若表达式的值为
13、达式的值。若表达式的值为0(假假),则求解表达式,则求解表达式,表达式的值就是整个条件表达式的值表达式的值就是整个条件表达式的值。 (2)条件运算符条件运算符优先级优先级高于赋值运算符,低于关系运算符和高于赋值运算符,低于关系运算符和算术运算符。算术运算符。 (3)条件运算符的结合方向为条件运算符的结合方向为“自右至左自右至左”。 (4)“表达式表达式2”和和“表达式表达式3”不仅可以是不仅可以是数值表达式数值表达式,还可以,还可以是是赋值表达式赋值表达式或或函数表达式函数表达式。(5)条件表达式中,表达式的类型可以与表达式和表达条件表达式中,表达式的类型可以与表达式和表达式的式的类型不同类型
14、不同。 表达式表达式1?表达式表达式2:表达式表达式3C C语言程序设计语言程序设计Page205.3 if语句语句例例5.45.4 输入一个字符,判别它是否大写字母,如果是将它转换成小写字母;如果不是不转换。然后输出最后得到的字符。 如果字符变量如果字符变量chch的值为大写字母,则条件表达式的值的值为大写字母,则条件表达式的值为为(ch+32)(ch+32),即相应的小写字母。如果,即相应的小写字母。如果chch的值不是大的值不是大写字母,则条件表达式的值为写字母,则条件表达式的值为chch,即不进行转换。,即不进行转换。 #include void main ( ) char ch; s
15、canf(%c,& ch); ch=(ch=A&ch=Z)?(ch+32):ch; printf(%cn,ch);v运行结果运行结果:C C语言程序设计语言程序设计Page215.3 if语句语句题题5.25.2 下面程序运行的结果是:#include void main() int k=4,a=3,b=2,c=1; printf(“%dn”,ka?k:cb?c:a);#include void main() int x=12,y; y=x12?x+10:x-12; printf(“%dn”,y);0自右向左运算:自右向左运算:先求表达式先求表达式cb?c:a的值的值为为1;再求;再求ka?1
16、的值的值1C C语言程序设计语言程序设计Page225.4 switch语句语句vswitch语句的格式:switch (switch (表达式表达式) ) case case 常量表达式常量表达式1: 1: 语句语句1 1 case case 常量表达式常量表达式2: 2: 语句语句2 2 case case 常量表达式常量表达式n: n: 语句语句n n default: default: 语句语句n+1n+1 千万不能千万不能接接(;)号号!ANSI标准允许为任何类型标准允许为任何类型常量表达式的值必须互不相同,否常量表达式的值必须互不相同,否则执行时将出现矛盾,即同一个开则执行时将出现矛盾,即同一个开关值,将对应多种执行方案。关值,将对应多种执行方案。注注: (1) default语句可以省略不用语句可以省略不用; (2) case和和default与其后面的常量表达式间与其后面的常量表达式间至少有一个空格至少有一个空格; (3) switch语句可以嵌套,语句可以嵌套,break语句只跳出它所在的语句只跳出它所在的switch语句。语句。C C语言程序设计语言程序设计Page