计算机二级语言辅导第四章选择结构精选PPT.ppt
计算机二级语言辅导第四计算机二级语言辅导第四章选择结构章选择结构第1页,此课件共39页哦4.1.1 关系运算符C语言有语言有6种关系运算符:种关系运算符:、=、=、!=关系成立:关系运算的值为关系成立:关系运算的值为1(表示逻辑真);(表示逻辑真);关系不成立:关系运算的值为关系不成立:关系运算的值为0(表示逻辑假)。(表示逻辑假)。例如:例如:53 值为值为1 5b+c比较两个算术表达式的值 a=2*b比较变量的值和算术表达式的值 ab比较两个字符ASCII码值第4页,此课件共39页哦关系表达式2、关系运算符的优先级(1)、和=为同一级,=和!=为同一级。前者优先级高于后者。(2)关系运算符优先级低于算术运算符。例如:a+bb+c等效于(a+b)(b+c)。(2+a)=(b-a)等效于2+a=b-a。第5页,此课件共39页哦3、关系运算符的结合律 C语言规定关系表达式采取左结合律。表达式中出现优先级别为同一级别的运算符时,按从左到右结合方向处理。例如:int a=2,b=3,c=1 ab32先计算63,结果是1,再计算12,关系表达式的值为:1关系表达式第6页,此课件共39页哦4.1.3逻辑运算符C语言没有逻辑类型数据,进行逻辑判断时:数据的值为非0,则认作逻辑真,数据的值为0,则认作逻辑假;u而逻辑表达式的值为真,则用整形数1表示。u逻辑表达式的值为假,则用整形数0表示。第7页,此课件共39页哦逻辑运算符有3个:!、&、|表示逻辑非、逻辑与、逻辑或运算。注:由于C语言依据判断数据是否为非0或0来判断逻辑真和逻辑假,所以逻辑运算的操作数类型可以是字符型、整型或浮点型。第8页,此课件共39页哦1、逻辑非!逻辑非是单目运算符(也就是说参加运算的操作数只有一个)。u若操作数本身的值为0,逻辑非运算后的结果为1(逻辑真)u当操作数值为非0时,逻辑非运算的结果为0。u例如:int a=5,b=3;!a 结果为0,即a为非0。!(ab)结果为1。因为ab的值为0,即取ab的非。第9页,此课件共39页哦2、逻辑与&逻辑与是双目运算(也就是说参加运算的操作数有两个),当参加逻辑与运算的两个操作数值均为非0(逻辑真)时,结果才为真;否则为0(逻辑假)。例如:int a=5,b=3;a&b 结果为l,即a与b均不为0。(a0)结果为0,因为ab的值为0。第10页,此课件共39页哦3、逻辑或|逻辑或也是双目运算,参加或运算的两个操作数中,只要有一个操作数值为非0(逻辑真),结果就为l(逻辑真);否则为0(逻辑假)。例如:int a=5,b=3;a|b结果为l。(a0)结果为l,因为a0的值为l。第11页,此课件共39页哦在谈到逻辑运算时,我们常用一个真值表来表示,如下:ab!a!ba&ba|b真真假假真真真假假真假真假真真假假真假假真真假假第12页,此课件共39页哦为理解与、或、非的含义,引入三个电路,如图所示。在上图中,我们给出三个指示灯的控制电路,根据串、并联电路的工作原理,我们可以得出:在图(a)中,只有当两个常开按钮同时按下时,指示灯才会亮;与在图(b)中,只要两个常开按钮中任何一个按下,指示灯都会亮;或在图(c)中,没有按按钮时,电路是接通的,所以指示灯亮,按下按钮时,指示灯反而不亮。非第13页,此课件共39页哦逻辑表达式1、逻辑运算表达式的构成用逻辑运算符将表达式连接起来就构成了逻辑表达式。例如,!(ab)对关系表达式的值取非(ab)&(bc)对两个关系表达式进行逻辑与运算(ab)&(bc)|(b=0)第14页,此课件共39页哦2、逻辑运算符优先级C语言逻辑运算符的优先级规定如下:优先级顺序为!&|。!高于算术运算符,&,|低于关系运算符。第15页,此课件共39页哦3、逻辑运算符的结合律 C语言逻辑运算符采用左结合律。表达式中出现优先级别为同一级别的运算符时,按从左到右的结合方向处理。例如:a&b&c计算顺序为从左自右,即:(a&b)&c。第16页,此课件共39页哦4、C语言逻辑表达式的特性 在多个&运算符相连的表达式中,计算从左至右进行时,若遇到运算符左边的操作数为0(逻辑假),则停止运算。因为此时已经可以断定逻辑表达式结果为假。在多个|运算符相连的表达式中,计算从左至右进行时,若遇到运算符左边的操作数为l(逻辑真),则停止运算,因为已经可以断定逻辑表达式结果为真。第17页,此课件共39页哦4.2 if条件语句择条件语句择条件语句 ifif语句的说明语句的说明条件运算符条件运算符第18页,此课件共39页哦4.2选择型程序设计if语句的三种形式形式一:格式:if(表达式)语句1 语句2执行过程:例:if(xy)printf(“%d”,x);x=y;形式二:u格式:if(表达式)语句1 else 语句2 语句3u执行过程:例:if(xy)max=x;else max=y;x=y;表达式语句1非0=0语句2表达式语句1语句2非0=0语句3第19页,此课件共39页哦形式三:格式:if(表达式1)语句1else if(表达式2)语句2else if(表达式3)语句3.else 语句表达式1语句1非0=0表达式2表达式3语句n语句3语句2非0非0=0=0u执行过程:例:if(x1000)y=0.4;else if(x800)y=0.3;else if(x600)y=0.2;else if(x400)y=0.1;else y=0;第20页,此课件共39页哦如:if(a=b&x=y)printf(“a=b,x=y”);if(3)printf(“OK”);if(a)printf(“%d”,a);说明1:uif后面的表达式类型任意u if(x)if(x!=0)if(!x)if(x=0)u语句可以是复合语句例 考虑下面程序的输出结果:#include main()int x,y;scanf(“%d,%d”,&x,&y);if(xy)x=y;y=x;else x+;y+;printf(“%d,%dn”,x,y);错误!u在if 语句和else语句中若有多个操作语句,则应用花括号 将它们括起成为一个复合语句。第21页,此课件共39页哦补足程序段-1 输入两个整数,按从小到大的顺序输入两个整数,按从小到大的顺序输出它们。输出它们。t=a;a=b;b=t;#include main()int a,b,t;scanf(%d,%d,&a,&b);if (ab)printf(%d,%d,a,b);第22页,此课件共39页哦条件语句举例-2 输入三个整数,按从小到大的顺序输入三个整数,按从小到大的顺序输出它们。输出它们。#include main()int a,b,c,t;scanf(%d,%d,%d,&a,&b,&c);if (ab)if (ac)if (bc)printf(%d,%d,%d,a,b,c);t=a;a=b;b=t;t=a;a=c;c=t;t=b;b=c;c=t;第23页,此课件共39页哦4.3 条件运算符和条件表达式 C语言提供了一个可以代替某些if-else语句的简便易用的操作符“?”和“:”,该操作符是三目运算符,其一般形式是:表达式1?表达式2:表达式3 操作符?的作用:在计算表达式1之后,如果数值为true(真),则计算表达式2,并将结果作为整个表达式的数值;如果表达式1的值为false(假),则计算表达式3的 值,并以它的结果作为整个表达式的值。第24页,此课件共39页哦u例:x=10;if(x9)y=100;else y=200;可以用下面的条件运算符来处理:x=10;y=(x9)?100:200;第25页,此课件共39页哦注意:条件运算符要求有3个操作对象。条件运算符的优先级别比关系运算符和算术运算符都低。因此 y=(x9)?100:200 括号可以不要,可写成 y=x9?100:200 如果有 ab?a:b+1 相当于ab?a:(b+1),而不相当于(ab?a:b)+1条件运算符的结合方向为“自右向左”。如:ab?a:cd?c:d 相当于:ab?a:(cd?c:d)如果a=1,b=2,c=3,d=4,则条件表达式的值等于4。第26页,此课件共39页哦Switch语句 switch语句是一种分支控制语句。特点:是可以根据一个表达式的多种值,选择多个分支,因而也称为分情况语句和开关语句。实际问题中常常需要用到多分支结构,例如,学生成绩分档次(85分以上为“A”等,7084分为“B”等,6069分为“C”等)。第27页,此课件共39页哦Switch语句v执行过程:switch(表达式表达式)case 常量常量1:语句:语句1;case 常量常量2:语句:语句2;case 常量常量n:语句:语句n;default:语句语句n+1;当当“表达式表达式”=“常量表达式常量表达式1”时,时,从从“语句语句1”开始执行;开始执行;当当“表达式表达式”=“常量表达式常量表达式2”时,时,从从“语句语句2”开始执行;开始执行;当当“表表达达式式”=其其它它值值时时,从从“语语句句n+1”开始执行;开始执行;第28页,此课件共39页哦Switch语句中使用break语句:switch (表达式表达式表达式表达式)case case 常量常量1:1:语句系列语句系列1;break;case 常量常量2:语句系列语句系列2;break;case case 常量常量常量常量m:m:语句系列语句系列语句系列语句系列m;break;default:语句系列语句系列m+1;m+1;第29页,此课件共39页哦v执行过程:switch表达式语句组1语句组2语句组n语句组.常量1defaultcase 常量2常量n第30页,此课件共39页哦main()char s;scanf(“%c”,&s);switch(s)case A:printf(“85100n”);case B:printf(“7084n”);case C:printf(“6069n”);case D:printf(“60n”);default:printf(“错误输入n”);输入“C”,求输出结果。结果:6069 60 错误输入?!第31页,此课件共39页哦main()char s;scanf(“%c”,&s);switch(s)case A:printf(“85100n”);case B:printf(“7084n”);case C:printf(“6069n”);case D:printf(“60n”);default:printf(“错误输入n”);我的成绩应该是6069!什么!“60”?“错误输入”?怎么会这样?!不好意思,我属于C级!运行结果:6069 60 错误输入 第32页,此课件共39页哦解决方法break语句:main()char s;scanf(“%c”,&s);switch(s)case A:printf(“85100n”);break;case B:printf(“7084n”);break;case C:printf(“6069n”);break;case D:printf(“60n”);break;default:printf(“错误输入n”);这才差不多!break!运行结果:6069第33页,此课件共39页哦main()int x=1,y=0,a=0,b=0;switch(x)case 1:switch(y)case 0:a+;break;case 1:b+;break;case 2:a+;b+;break;case 3:a+;b+;printf(“a=%d,b=%dn”,a,b);说明说明说明说明1、每个case常量表达式的值必须互不相同,否则会出现互相矛盾的结果。2、允许多个case共用一个执行语句。求程序运行结果。结果:a=2,b=1。如果x=2?结果:a=1,b=1 如果x=3?结果:a=1,b=1 第34页,此课件共39页哦Switch语句u常量1,常量2,常量n是常量表达式,且值必须互不相同ucase后可包含多个可执行语句,且不必加 uswitch可嵌套u多个case可共用一组执行语句u当每一个case语句后均有break语句时,case出现的次序不影响执行结果。(default总是放在最后,这时,deafult后不需要break语句)。说明:第35页,此课件共39页哦 X 0X10 2X+1 10X20Y=41 20X30 71-X 30X40 0 X0或或X40#include main()int xint x scanf(%d,&x);switch (switch ()case 0:printf(y=%dn,x);break;case 0:printf(y=%dn,x);break;case 1:printf(y=%dn,2*x+1);break;case 2:printf(y=20n);break;case 2:printf(y=20n);break;case 3:printf(y=%dn,71-x);break;default:printf(y=0n);x/10例:第36页,此课件共39页哦设有语句设有语句:int a=1,b=0;则执行下面语句后输出为则执行下面语句后输出为则执行下面语句后输出为则执行下面语句后输出为()switch(a)case 1:case 1:switch(b):switch(b):case 0:printf(“*0*”);break;case 1:printf(“*1*”);break;case 2:printf(“*2*”);break;A.*0*B.*0*2*C.*0*1*2*D.A.*0*B.*0*2*C.*0*1*2*D.错误错误B.*0*2*B第37页,此课件共39页哦goto语句功能功能将控制执行权转移到指定的语句标号处。将控制执行权转移到指定的语句标号处。格式格式goto 语句标号;语句标号;语句标号语句标号用用标识符标识符表示转移语句的入口目的表示转移语句的入口目的地址。不能用整数作语句标号。地址。不能用整数作语句标号。举例举例goto max;max:x=loop:loop:if(x=0)n+;sum+=x;scanf(“%f”,&x);scanf(“%f”,&x);goto looploop;用用goto语句构成循环语句构成循环第38页,此课件共39页哦使用goto的原则u使用之后,程序仍然是单入口,单出口u不要使用一个以上的标号u不要用goto往回跳,要向下跳u不要让goto制造出永远不会被执行的代码重点提示:重点提示:滥用goto语句将使得程序的流程毫无规律,可读性差,对于初学者来说应尽量不采用。第39页,此课件共39页哦