《C语言-条件判断、选择结构程序设计》由会员分享,可在线阅读,更多相关《C语言-条件判断、选择结构程序设计(68页珍藏版)》请在金锄头文库上搜索。
1、C C语言语言- -条件判断、选择结条件判断、选择结构程序设计构程序设计本次课程所讲内容本次课程所讲内容l条件判断条件判断l关系运算符与关系表达式关系运算符与关系表达式l逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式l选择结构程序设计选择结构程序设计lif语句语句l条件运算符与条件表达式条件运算符与条件表达式lswitch-case语句语句2本次课程所讲内容本次课程所讲内容l条件判断条件判断l关系运算符与关系表达式关系运算符与关系表达式l逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式l选择结构程序设计选择结构程序设计lif语句语句l条件运算符与条件表达式条件运算符与条件表达式lswitch-cas
2、e语句语句3条件判断条件判断l如果明天天气好,我们就去踏青如果明天天气好,我们就去踏青l票卖完了的话,我们就看不成球赛了票卖完了的话,我们就看不成球赛了l如果能早点下课,我们就可以抢到饭了如果能早点下课,我们就可以抢到饭了l如果如果ab,输出,输出a;如果;如果ablaclav6关系运算符及其优先次序关系运算符及其优先次序关系运算符关系运算符名名 称称示示 例例优先次序优先次序小于小于ab=小于或等于小于或等于 a大于大于ab=大于或等于大于或等于 a=b=等于等于a=b!=不等于不等于a!=b优先级优先级相同相同(高高)优先级优先级相同相同(低低)7关系、算术和赋值运算符的优先级关系关系、算
3、术和赋值运算符的优先级关系l例如例如lca+blab=cla=bclx!=a* *bb+cl(a=3)(b=5)lab)bcl2* *a+bc-d9关系表达式的结果关系表达式的结果l在在C语言中,关系表达式的结果为语言中,关系表达式的结果为1或或0l关系表达式成立时,结果为关系表达式成立时,结果为1,表示,表示“真真”l关关系系表表达达式式不不成成立立时时,结结果果为为0,表表示示“假假”l例如例如l3bc (ab)=c b+cble=abclf=ab+cb)+(cb和和xy需要同时满足需要同时满足lab和和xy至少有一个条件要满足至少有一个条件要满足l70岁岁以以上上的的老老人人和和10人人
4、岁岁以以下下的的儿儿童童,入园免票入园免票13逻辑运算符逻辑运算符逻辑运算符逻辑运算符名名 称称示示 例例&逻辑与逻辑与a&b|逻辑或逻辑或a|b!逻辑非逻辑非!a逻辑运算符优先级次逻辑运算符优先级次序序: : !&|14逻辑、算术、关系和赋值运算符的逻辑、算术、关系和赋值运算符的优先级优先级运算符运算符优先级优先级!(逻辑非)!(逻辑非)算术运算符算术运算符关系运算符关系运算符&和和|(逻辑与和逻辑或)(逻辑与和逻辑或)赋值运算符赋值运算符(低)(低)(高)(高)15运算符优先级举例运算符优先级举例l(ab)&(xy)l(a=b)|(x=y)l(!a)|(ab)ab&xya=b|x=y!a|
5、ab16逻辑表达式及其结果逻辑表达式及其结果l用用逻逻辑辑运运算算符符将将关关系系表表达达式式或或逻逻辑辑量量连连接接起来的式子,称为逻辑表达式起来的式子,称为逻辑表达式l例如,例如,a&b, (a0)&(b0)l在在C语言中,逻辑表达式的结果为语言中,逻辑表达式的结果为1或或0l逻辑表达式成立时,结果为逻辑表达式成立时,结果为1,表示,表示“真真”l逻辑表达式不成立时,结果为逻辑表达式不成立时,结果为0,表示,表示“假假”逻辑表达式的运算对象逻辑表达式的运算对象l在在C语语言言中中,对对于于逻逻辑辑表表达达式式中中的的每每个个运运算对象算对象l某个量的值为某个量的值为0时,表示时,表示“假假
6、”l某个量的值为非某个量的值为非0时,表示时,表示“真真”l例如例如l4 & 0lint a=4; !a逻辑表达式的结果为逻辑表达式的结果为0真真假假逻辑表达式的结果为逻辑表达式的结果为0真真逻辑表达式举例(逻辑表达式举例(1)la=4,b=5l!ala&bla|bl!a&bl!a|b值为值为0 0值为值为1 1值为值为1 1值为值为0 0值为值为1 119逻辑表达式举例(逻辑表达式举例(2)la=4,b=5,x=6.6,y=3.6lab & xyla=b | x=yl!a | (ab)lx | (x3 & 84-!0 1 & 84-1 1 & 8bl逻辑表达式的逻辑表达式的结果只能是结果只能
7、是0或或1l4 & 0 | 2的值为的值为1,表示,表示“真真”la=4,b=5 !a | ab的值为的值为0,表示,表示“假假”23逻辑表达式总结(逻辑表达式总结(2)l逻逻辑辑表表达达式式中中的的运运算算对对象象可可以以是是单单个个的量,也可以是表达式的量,也可以是表达式la & b, a=b | x=y, !(ab) & xyl逻逻辑辑表表达达式式中中的的运运算算对对象象可可以以是是0和和非非0,也可以是字符型、实型或指针型,也可以是字符型、实型或指针型l4 & 0 | 3.6,A & Bla | !(ab)逻辑表达式总结(逻辑表达式总结(3)l在逻辑表达式的求解中,并不是所有在逻辑表达
8、式的求解中,并不是所有的逻辑运算符都被执行,有时只需执的逻辑运算符都被执行,有时只需执行一部分运算就可以得出结果行一部分运算就可以得出结果la & b & cla | b | cl设设m=1,n=1,a=1,b=2,c=3,d=4l(m=ab) & (n=cd)l(m=ab) | (n=cd)表达式值为表达式值为0,m=0,n=0表达式值为表达式值为0,m=0,n=0本次课程所讲内容本次课程所讲内容l条件判断条件判断l关系运算符与关系表达式关系运算符与关系表达式l逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式l选择结构程序设计选择结构程序设计lif语句语句l条件运算符与条件表达式条件运算符与条件
9、表达式lswitch-case语句语句26if语句有三种结构语句有三种结构lif 结构结构lif-else 结构结构lif else-if结构结构27if 结构结构l格式:格式:if (表达式表达式) 语句语句l例如例如 if(xy) printf(%d,x);表达式表达式语句0 0(假)(假)非非0 0(真)(真)关系表达式关系表达式一个语句一个语句可以有多个可以有多个语句语句28if 结构举例结构举例l输入两个实数,按代数值由小到大输入两个实数,按代数值由小到大的顺序输出这两个数的顺序输出这两个数l分析问题分析问题l假设两个数是假设两个数是a,bl比较两个数的大小比较两个数的大小l如果如果
10、ab,a和和b的值互换的值互换,之后输出,之后输出a和和b的值的值l如果如果ab,直接输出,直接输出a和和b的值的值29#include void main()double a,b,t;printf(“Please enter a and b:);scanf(%lf,%lf,&a,&b);if(ab)t=a;a=b;b=t;printf(%-7.2f,%7.2fn,a,b);if 结构结构程序举例程序举例c6_1.c将两个实将两个实数按照由数按照由小到大的小到大的顺序输出顺序输出程序运行结果:程序运行结果:Please enter a and b: 3.6,-3.2-3.20 , 3.60多多
11、 个个 语语句句 , 需需要要 由由 花花括括 号号 括起来括起来30if-else 结构结构l格式:格式:if (表达式表达式) 语句语句1; else 语句语句2;l例如例如 if(xy) printf(%d,x); else printf(%d,y);表达式表达式语句语句1 1语句语句2 2非非0 0(真)(真)0 0(假)(假)else不能单独使用,如果不能单独使用,如果使用,必须与使用,必须与 if 配对配对31if-else结构举例结构举例l输输入入矩矩形形的的两两个个边边长长,求求矩矩形形的的面面积积,为为了了防防止止误误输输入入,如如果果输输入入的的边边长长小小于于或者等于或者
12、等于0,要输出告错信息,要输出告错信息l分析问题分析问题l要定义三个变量,边长要定义三个变量,边长1,边长,边长2,面积,面积l如如果果边边长长1和和边边长长2大大于于0,计计算算矩矩形形的的面面积积并且输出面积的值并且输出面积的值l否则,给出告错信息否则,给出告错信息#include void main()double a,b,area;printf(“请输入矩形边长请输入矩形边长a和和b:);scanf(%lf,%lf,&a,&b);if (a0&b0)area=a* *b;printf(面积面积=%fn,area);elseprintf(边长必须大于边长必须大于0n);if-else结构
13、结构程序举例程序举例c6_2.c求矩形的求矩形的面积面积逻辑表达逻辑表达式式33#include void main()double a,b,area;printf(“请输入矩形边长请输入矩形边长a和和b:);scanf(%lf,%lf,&a,&b);if (a0&b0)area=a*b;printf(面积面积=%fn,area);if(a=0|b=0)printf(边长必须大于边长必须大于0n);if-else结构结构程序举例程序举例c6_3.c求矩形的求矩形的面积面积用用两两个个if语语句句代代替替if-else语语句句,不好!不好!34if-else结构举例结构举例l编编写写一一段段程程
14、序序,完成以下任务:完成以下任务:l如如右右图图所所示示,输输入入一一个个实实数数x,如如果果2.0=x=6.0,则则整整数数y=1;否否则则,y=0x12.06.0y35#include void main()float x;int y;printf(Please input x:);scanf(%f,&x);if(2.0=x=6.0)y=1;printf(y=%dn,y);elsey=0;printf(y=%dn,y);完成上页完成上页ppt中的任务中的任务错误!错误!无论无论x取什么取什么样的值,样的值,y的的值总是值总是1if- else结构结构程序举例程序举例c6_4.c36#inc
15、lude void main()float x;int y;printf(Please input x:);scanf(%f,&x);if(x=2.0&x=6.0)y=1;printf(y=%dn,y);elsey=0;printf(y=%dn,y);正确!正确!if- else结构结构程序举例程序举例c6_5.c37if-else if 结构结构l格式格式 if (表达式表达式1) 语句语句1; else if (表达式表达式2) 语句语句2; else if (表达式表达式n-1) 语句语句n-1; else 语句语句n;38if-else if 结构结构表达式表达式1 1真(非真(非0
16、0)语句语句1 1假(假(0 0)表达式表达式2 2真(非真(非0 0)语句语句2 2假(假(0 0)表达式表达式3 3真(非真(非0 0)语句语句3 3假(假(0 0)表达式表达式4 4真(非真(非0 0)语句语句4 4假(假(0 0)语句语句5 539if-else if 结构举例结构举例l编写一段程序,完成以下任务:编写一段程序,完成以下任务:l如下图所示如下图所示, 输入一个实数输入一个实数xl如果如果x- -2.0, 则实数则实数y=- -1.0l如果如果- -2.0=x=2.0,则,则y=0.5xl否则,否则,y=1.0xy1.01.0-1.0-1.02.02.0-2.0-2.04
17、0#include void main()double x,y;printf(Please input x:);scanf(%lf,&x);if(x-2.0)y=-1.0;else if(x=2.0)y=0.5* *x;elsey=1.0;printf(y=%.1fn,y);if- else if 结结构程序举例构程序举例c6_6.c41if-else if 结构举例结构举例l编写一段程序,完成以下任务:编写一段程序,完成以下任务:cost =0 number=500.05 50number=1000.075 100number=3000.10 300number50042#include v
18、oid main()double number,cost;printf(Please input number:);scanf(%lf,&number);if(number500) cost=0.15;else if(number300) cost=0.10;else if(number100) cost=0.075;else if(number50) cost=0.05;else cost=0;printf(cost=%.3fn,cost);if- else if 结结构程序举例构程序举例c6_7.c43l在在if语语句句中中,若若括括号号内内的的表表达达式式的的值值为为0,按按“假假”处处
19、理理,若若表表达达式式的的值值为为非非0,按按“真真”处处理理。所所以以,括括号号内内可可以以是是关关系系表表达达式式,逻逻辑辑表表达达式式或者单个的量或者算数表达式或者单个的量或者算数表达式lif (ab)lif (ab&xy)lif (3) printf(“O.K.”);lif (a) printf(“%d”,a);if语句的嵌套(语句的嵌套(1 1)if( (表达式)表达式) else 语句语句3; if( (表达式)表达式) 语句语句1;elseif( (表达式)表达式)else语句语句1 1;语句语句2 2;语句语句1 1;语句语句2 2;if( (表达式表达式2) 语句语句1;el
20、se 语句语句2;if( (表达式表达式2) 语句语句2;else 语句语句3;if( (表达式表达式1) 语句语句1;else 语句语句2;if( (表达式表达式2) 语句语句3;else 语句语句4;45if语句的嵌套(语句的嵌套(2)lelse总总是是与与它它上上面面最最近近的的未未配配对对的的 if 配对配对if ( ) if ( ) 语句语句1 1;else if ( ) 语句语句2 2;else 语句语句3 3;if ( ) if ( ) 语句语句1 1; else if ( ) 语句语句2 2; else 语句语句3 3;46if语句的嵌套语句的嵌套(3)l最最好好使使外外层层i
21、f和和内内嵌嵌if都都包包含含else部部分分,这这样样if和和else的的数数量量相相同同,一一一一对对应应,不易出错不易出错l如如果果if与与else的的数数目目不不同同,可可以以加加花花括括号来确定配对关系号来确定配对关系if ( ) if ( ) 语句语句1 1; else 语句语句2 2;else if ( ) 语句语句2 2; else 语句语句3 3;if ( ) if ( ) 语句语句1 1; else 语句语句2 247if语句的嵌套举例语句的嵌套举例l编写一段程序,输入一个实数编写一段程序,输入一个实数x x,按照如下的公式输出整数按照如下的公式输出整数y y的值的值y=
22、-1 x01-1048#include void main()double x;int y;printf(enter x:);scanf(%lf,&x);if(x0)y=-1;elseif(x=0) y=0;else y=1;printf(x=%f,y=%dn,x,y);if语句的嵌套语句的嵌套程序举例程序举例c6_8.cy= -1 x0正确正确49#include void main()double x;int y;printf(enter x:);scanf(%lf,&x);if(x=0)if(x0) y=1;else y=0;else y=-1; printf(x=%f,y=%dn,x,
23、y);if语句的嵌套语句的嵌套程序举例程序举例c6_9.cy= -1 x0正确正确50#include void main()double x;int y;printf(enter x:);scanf(%lf,&x);y=-1;if(x!=0)if(x0) y=1;else y=0; printf(x=%f,y=%dn,x,y);if语句的嵌套语句的嵌套程序举例程序举例c6_10.cy= -1 x0不正确不正确51#include void main()double x;int y;printf(enter x:);scanf(%lf,&x);y=0;if(x=0)if(x0) y=1;els
24、e y=-1; printf(x=%f,y=%dn,x,y);if语句的嵌套语句的嵌套程序举例程序举例c6_11.cy= -1 x0不正确不正确52本次课程所讲内容本次课程所讲内容l条件判断条件判断l关系运算符与关系表达式关系运算符与关系表达式l逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式l选择结构程序设计选择结构程序设计lif语句语句l条件运算符与条件表达式条件运算符与条件表达式lswitch-case语句语句53条件运算符和条件表达式(条件运算符和条件表达式(1)l条件运算符条件运算符“? :”l条件表达式条件表达式 表达式表达式1 ? 表达式表达式2 : 表达式表达式3表达式表达式1 1
25、表达式表达式2 2的值的值表达式表达式3 3的值的值54条件运算符和条件表达式(条件运算符和条件表达式(2)max=ab ? a : b;if(ab) max=a;else max=b;55条件运算符和条件表达式(条件运算符和条件表达式(3)l条条件件运运算算符符优优先先级级高高于于赋赋值值运运算算符符,但但低低于于算算术术运运算算符符、关关系系运运算算符符、逻辑运算符逻辑运算符ab ? a : bab ? a : b+1b=!a ? 0 : aa&b ? a+b : a-b(ab) ? a : b(ab) ? a : (b+1)b=(!a) ? 0 : a)(a&b)?(a+b):(a-b)
26、56条件运算符和条件表达式(条件运算符和条件表达式(4)l条条件件运运算算符符的的结结合合方方向向为为“自自右右向向左左” ab ? a : cd ? c : d ab ? a : (cd ? c : d)l表表达达式式1、表表达达式式2、表表达达式式3的的类类型型可可以以不不同同,条条件件表表达达式式的的值值的的类类型型取取表表达式达式2 2和表达式和表达式3 3中较高的类型中较高的类型lx ? a : blxy ? 1 : 1.5表达式的值的类型为表达式的值的类型为浮点型浮点型57条件运算符和条件表达式(条件运算符和条件表达式(5)l条条件件表表达达式式中中的的表表达达式式2和和表表达达式
27、式3还还可可以是赋值表达式或者函数表达式以是赋值表达式或者函数表达式#include void main() int a,b; printf(enter a and b:); scanf(%d,%d,&a,&b); ab?(a=100):(b=100); printf(a=%d,b=%dn,a,b);temp8.c#include void main() int a,b; printf(enter a and b:); scanf(%d,%d,&a,&b); ab ? printf(max is a=%dn,a) : printf(max is b=%dn,b);if(ab) printf(“
28、max is a=%dn”,a);else printf(“max is b=%dn”,b);temp9.c59本次课程所讲内容本次课程所讲内容l条件判断条件判断l关系运算符与关系表达式关系运算符与关系表达式l逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式l选择结构程序设计选择结构程序设计lif语句语句l条件运算符与条件表达式条件运算符与条件表达式lswitch-case语句语句60switch-case语句语句l格式格式switch(表达式)(表达式)不能为实型不能为实型 不能为变量不能为变量 case 常量表达式常量表达式1:语句:语句1 ;break; case 常量表达式常量表达式2:语
29、句:语句2 ;break; case 常量表达式常量表达式n:语句:语句n ;break; default: 语句语句n+1; break;61switch语句语句lswitch后后面面括括号号内内的的“表表达达式式”可可以以是任何类型的表达式,值为离散型是任何类型的表达式,值为离散型l当当表表达达式式的的值值与与某某一一个个case后后面面的的常常量量表表达达式式的的值值相相等等时时,就就执执行行此此case后后面面的的语语句句,如如果果都都不不匹匹配配,就就执执行行default后面的语句后面的语句l各各个个case后后面面的的常常量量表表达达式式的的值值必必须须互不相同互不相同l各各个个
30、case和和default的的出出现现次次序序不不影影响响执行结果执行结果#include void main() char grade; printf(enter grade:); scanf(%c,&grade); switch(grade) case A: printf(85100n); case B: printf(7084n); case C: printf(6069n); case D: printf(60n); default: printf(errorn); 如如果果grade的的值值为为B,则则输输出结果为:出结果为:7084606960error各语句后面没有各语句后面没有
31、break语句语句c6_12.c63#include void main() char grade; printf(enter grade:); scanf(%c,&grade); switch(grade) case A: printf(85100n);break; case B: printf(7084n);break; case C: printf(6069n);break; case D: printf(60n);break; default: printf(errorn); 如如果果grade的的值值为为B,则则输输出结果为:出结果为:7084各语句后面有各语句后面有break语句语
32、句c6_13.c64#include void main()int a=3,b=6;switch(ab?1:2)case 1:b=a+b;case 2:a=a+b;default: b-;printf(a=%d,b=%dn,a,b); 输出结果为:输出结果为:a=9,b=5各语句后面没有各语句后面没有break语句语句c6_14.c65#include void main()int a=3,b=6;switch(ab?1:2)case 1:b=a+b;break;case 2:a=a+b;break;default: b-;printf(a=%d,b=%dn,a,b); 输出结果为:输出结果为:a=9,b=6各语句后面有各语句后面有break语句语句c6_15.c66Thanks!67结束结束