资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第四章,选择结构,4.1.1,关系运算符,C,语言有,6,种关系运算符:,、,、,=,、,=,、,!=,关系成立:关系运算的值为,1,(表示逻辑真);,关系不成立:关系运算的值为,0,(表示逻辑假)。,例如:,53,值为,1,5b+c,比较两个算术表达式的值,a=2*b,比较变量的值和算术表达式的值,ab,比较两个字符,ASCII,码值,关系表达式,2,、,关系运算符的优先级,(,1,),、,和,=,为同一级,,=,和,!=,为同一级。前者优先级高于后者。,(,2,)关系运算符优先级,低于,算术运算符。,例如:,a+b,b+c,等效于,(,a+b,)(,b+c,),。,(2+a)=(b-a),等效于,2+a=b-a,。,3,、关系运算符的结合律,C,语言规定关系表达式采取,左结合律,。表达式中出现优先级别为同一级别的运算符时,按从,左到右结合,方向处理。例如:,int,a=2,b=3,c=1,ab32,先计算,6,3,,结果是,1,,再计算,1,2,,关系表达式的值为:,1,关系表达式,4.1.3,逻辑运算符,C,语言没有逻辑类型数据,进行逻辑判断时:,数据的值为,非,0,,则认作逻辑真,,,数据的值为,0,,则认作逻辑假,;,而逻辑表达式的值为,真,,则用整形数,1,表示。,逻辑表达式的值为,假,,则用整形,数,0,表示,。,逻辑运算符有,3,个:,!,、,&,、,|,表示,逻辑,非,、逻辑,与,、,逻辑,或,运算,。,注:,由于,C,语言依据判断数据是否为非,0,或,0,来判断逻辑真和逻辑假,所以逻辑运算的操作数类型可以是,字符型,、,整型,或,浮点型,。,1,、逻辑非,!,逻辑非是单目运算符,(,也就是说参加运算的操作数只有一个,),。,若操作数本身的值为,0,,逻辑非运算后的结果为,1,(逻辑真),当操作数值为,非,0,时,逻辑非运算的结果为,0,。,例如:,int,a=5,b=3;,!a,结果为,0,,即,a,为非,0,。,!(ab),结果为,1,。因为,ab,的值为,0,,即,取,ab,的非,。,2,、逻辑与,&,逻辑与是双目运算,(,也就是说参加运算的操作数有两个,),,当参加逻辑与运算的两个操作数值均为,非,0,(逻辑真)时,结果才为,真,;否则为,0,(逻辑假)。,例如:,int,a=5,b=3,;,a&b,结果为,l,,即,a,与,b,均不为,0,。,(a0),结果为,0,,因为,a0,的值为,l,。,在谈到逻辑运算时,我们常用一个真值表来表示,如下:,a,b,!a,!b,a&b,a|b,真,真,假,假,真,真,真,假,假,真,假,真,假,真,真,假,假,真,假,假,真,真,假,假,为理解,与、或、非,的含义,引入三个电路,如图所示。,在上图中,我们给出三个指示灯的控制电路,根据,串、并联电路,的工作原理,我们可以得出:,在图,(a),中,只有当两个常开按钮同时按下时,指示灯才会亮;,与,在图,(b),中,只要两个常开按钮中任何一个按下,指示灯都会亮;,或,在图,(c),中,没有按按钮时,电路是接通的,所以指示灯亮,按下按钮时,指示灯反而不亮。,非,逻辑表达式,1,、逻辑运算表达式的构成,用逻辑运算符将表达式连接起来就构成了逻辑表达式。例如,,!(ab),对关系表达式的值取非,(ab)&(bc),对两个关系表达式进行逻辑与运算,(ab)&(bc)|(b=0),2,、逻辑运算符优先级,C,语言逻辑运算符的优先级规定如下:,优先级顺序为,!&|,。,!,高于,算术运算符,,,&,,,|,低于关系运算符。,3,、逻辑运算符的结合律,C,语言逻辑运算符采用,左结合律,。表达式中出现优先级别为同一级别的运算符时,按从左到右的结合方向处理。例如:,a&b&c,计算顺序为从左自右,即:,(a&b)&c,。,4,、,C,语言逻辑表达式的特性,在多个,&,运算符相连的表达式中,计算从左至右进行时,若遇到运算符,左边,的操作数为,0,(,逻辑假,),,则停止运算。因为此时已经可以断定逻辑表达式结果为,假,。,在多个,|,运算符相连的表达式中,计算从左至右进行时,若遇到运算符,左边,的操作数为,l,(,逻辑真,),,则停止运算,因为已经可以断定逻辑表达式结果为,真,。,4.2 if,条件语句,择条件语句,if,if,语句的说明,条件运算符,4.2,选择型程序设计,if,语句的三种形式,形式一:,格式:,if(,表达式,),语句,1,语句,2,执行过程:,例:,if(xy),printf(“%d”,x,);,x=y;,形式二,:,格式,:,if(,表达式,),语句,1,else,语句,2,语句,3,执行过程:,例:,if(xy)max=x;,else max=y;,x=y;,表达式,语句,1,非,0,=0,语句,2,表达式,语句,1,语句,2,非0,=0,语句,3,形式三:,格式:,if(,表达式,1),语句,1,else if(,表达式,2),语句,2,else if(,表达式,3),语句,3,.,else,语句,表达式,1,语句,1,非,0,=0,表达式,2,表达式,3,语句,n,语句,3,语句,2,非,0,非,0,=0,=0,执行过程:,例:,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;,如:,if(a=b&x=y),printf(“a,=b,x=y”);,if(3),printf(“OK,”);,if(a),printf(“%d”,a,);,说明,1,:,if,后面的表达式类型任意,if(x,),if(x,!=0),if(!x,),if(x,=0),语句可以是复合语句,例 考虑下面程序的输出结果,:,#include,main(),int,x,y;,scanf(“%d,%d”,&x,&y,);,if(xy),x=y;y=x;,else,x+;y+;,printf(“%d,%dn”,x,y,);,错误,!,在,if,语句和,else,语句中若,有多个操作语句,则应,用花括号,将它们括起,成为一个复合语句。,补足程序段,-1,输入两个整数,按从小到大的顺序,输出它们。,t=a;a=b;b=t;,#include ,main(),int,a,b,t,;,scanf(%d,%d,if (ab),printf(%d,%d,a,b);,条件语句举例,-2,输入三个整数,按从小到大的顺序,输出它们。,#include ,main(),int,a,b,c,t;,scanf(%d,%d,%d,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;,4.3,条件运算符和条件表达式,C,语言提供了一个可以代替某些,if-else,语句的简便易用的操作符,“,?”,和“,:”,,该操作符是,三目运算符,,其一般形式是:,表达式,1,?,表达式,2,:,表达式,3,操作符,?,的作用:在计算表达式,1,之后,,如果数值,为,true(,真,),,则计算表达式,2,,并将结果作为整个表达式的数值;,如果表达式,1,的值为,false(,假,),,则计算表达式,3,的,值,并以它的结果作为整个表达式的值,。,例:,x=10;,if(x9)y=100;,else y=200;,可以用下面的条件运算符来处理:,x=10;,y=(x9)?100:200;,注意:,条件运算符要求有,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,。,Switch,语句,switch,语句是一种分支控制语句。,特点:,是可以根据一个表达式的多种值,选择多个分支,,因而也称为分情况语句和开关语句。实际问题中常常需要用到多分支结构,例如,学生成绩分档次,(85,分以上为“,A”,等,,7084,分为“,B”,等,,6069,分为“,C”,等,),。,Switch,语句,执行过程:,switch(,表达式,),case,常量,1,:语句,1;,case,常量,2,:语句,2;,case,常量,n,:,语句,n;,default,:,语句,n+1;,当“表达式”,=“,常量表达式,1”,时,,从“语句,1”,开始执行;,当“表达式”,=“,常量表达式,2”,时,,从“语句,2”,开始执行;,当“表达式”,=,其它值时,从“语句,n+1”,开始执行;,Switch,语句中使用,break,语句:,switch (,表达式,),case,常量,1:,语句系列,1;break;,case,常量,2:,语句系列,2;break;,case,常量,m:,语句系列,m;break;,default:,语句系列,m+1;,执行过程,:,switch,表达式,语句组,1,语句组,2,语句组,n,语句组,.,常量,1,default,case,常量,2,常量,n,main(),char s;,scanf(“%c”,&s,);,switch(s),case A,:,printf(“85,100n”);,case B,:,printf(“70,84n”);,case C,:,printf(“60,69n”);,case D,:,printf,(“60n”);,default,:,printf,(“,错误输入,n”);,输入“,C”,,,求输出结果。,结果:,60,69,60,错误输入,?!,main(),char s;,scanf(“%c”,&s,);,switch(s),case A,:,printf(“85,100n”);,case B,:,printf(“70,84n”);,case C,:,printf(“60,69n”);,case D,:,printf,(“60n”);,default,:,printf,(“,错误输入,n”);,我的成绩应该是,60,69!,什么,!“,60,”?,“,错误输入,”,?,怎么会这样,?!,不好意思,我属于,C,级,!,运行结果:,60,69,60,错误输入,解决方法,break,语句:,main(),char s;,scanf(“%c”,&s,);,switch(s),case A,:,printf(“85,100n”);,break;,case B,:,printf(“70,84n”);,break;,case C,:,printf(“60,69n”);,break;,case D,:,printf,(“60n”);,break;,default,:,printf,(“,错误输入,n”);,这才差不多,!,break!,运行结果:,60,69,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,Switch,语句,常量,1,常量,2,
展开阅读全文