1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,7,讲,关系运算与逻辑运算,if,语句,4.1,关系运算和逻辑运算,4.2,if,语句,第四章 选择结构程序设计,4.1.1,逻辑值及其在,C,语言中的表示,关系运算,和,逻辑运算,的运算结果都是一个,逻辑值,,逻辑值只有两个值,即:“,真,”和“,假,”。在,C,语言中,用,数值,1,来表示“,真,”,用,数值,0,来表示“,假,”。,因此,逻辑值,也可以作为一个整数,参与算术运算,。,反之,,对于参与关系运算或逻辑运算的任意一个表达式,如果该表达式的值为,零,,就代表一个逻辑“,假,”值;只要表达式
2、的值,不是零,,无论是正数还是负数,都代表一个逻辑“,真,”值。,4.1.2,关系运算符与关系表达式,所谓“,关系运算,”实际上就是“,比较运算,”,即将两个数据进行比较,判定两个数据,是否符合给定的关系,。,例如,“,a b,”,中的“,”,表示一个,大于,关系运算,。如果,a,的值是,8,,,b,的值是,5,,则这个关系运算的结果为“真”,即,数值,1,,表示,条件成立;如果,a,的值是,6,,,b,的值是,9,,则运算的结果为“假”,即,数值,0,,表示,条件不成立。,1,关系运算符及其优先级,C,语言提供了六种关系运算符,如表,4.1,所示。,注意:有些,运算符,是由,两个字符组合而成
3、的,如:,=,;其,两个字符之间不能有空格,。在关系运算符中,,前,4,个优先级,相同,,,后,2,个也相同,,且前,4,个关系运算符的优先级高于后,2,个。,所有关系运算符,的优先级都比,算术运算符,的优先级,低,、,但都比,赋值运算符,的优先级,高,。,表,4.1,关系运算符及其优先级,10,9,2,关系表达式,用,关系运算符,将,两个操作数,(,常量、变量或表达式,),连接,起来,进行关系运算的式子,称为,关系表达式,。,例如,假设,n1=5,,,n2=8,,,n3=10,,,则:,(,1,)关系表达式,n1,=,n2,的值为,0,。,(,2,)关系表达式,n1,n3,的值为,1,。,
4、4,)关系表达式,n1,=,n2n3,的值等为,0,。,注意,:由于存在,存储误差,和,转换误差,,,不,能直接用关系运算符“,=,”,来,判断,两个实型数是否相等,。,单精度实数:,fabs,(x-y)0.000001,双精度实数:,fabs,(a-b)y),为真,的,条件下,若,a,值为,10,,,b,值为,16,,表达式,(,ab)&(xy),的值为,“假”,,用,数值,0,来表示;若,a,值为,10,,,b,值为,6,,表达式,(,ab)&(xy),的值则为“,真,”,用,数值,1,来表示。,表,4.3,逻辑运算符的运算规则,数学表达式,0,x10,表示,x,的值应该在,0,到,1
5、0,的范围内。但,在,C,语言中,不,能用,0,x10,这样一个,关系表达式,来表述以上的,数学关系,。因为,无论,x,是什么值,按照,C,语言的运算规则,左边的表达式,0,x,的运算结果只能为,0,或,1,,因而表达式,0,x,10,的,运算结果,总是,1,。,只有用,逻辑表达式,0,x,&,xn2),max=n1;,else,max=n2;,if,(n3max),max=n3;,printf,(max=%dn,max);,程序运行情况如下:,Please input three numbers:,11,22,18,max=22,例,4.1,输入三个整数,求最大值,/*,简化形式*,/,ma
6、x=n1;,if,(n2max),max=n2;,例,4.2,输入三个整数,在变量,a,b,c,中排序,main(),int,a,b,c,t;,printf,(input a,b,c:);,scanf,(,%d%d%d,&a,&b,&c),;,printf,(a=%d,b=%d,c=%dn,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,(a=%d,b=%d,c=%dn,a,b,c);,程序运行情况如下:,input a,b,c:,62 34 24,a=62,b=34,c=24,a=24
7、b=34,c=62,if,语句中的,if,子句,和,else,子句,可以是,任意合法的,C,语句,,当然,也可以,是另外一个,if,语句,,通常称这种语句为,嵌套的,if,语句,。,内嵌的,if,语句,既可以嵌套在,if,子句,中,也可以嵌套在,else,子句,中。在运用嵌套的,if,语句时,应该,特别注意,else,子句,和,if,子句,的配套问题,。如果在嵌套的,if,语句中没有用,一对花括号,强制地,结束,某个,内嵌的,不带,else,子句的,if,语句,,则,else,子句,总是与,在它前面的,、,离它最近的,、,尚未与其它,else,子句匹配,的,if,子句,相匹配,。,以下介绍,
8、两种,值得关注的,嵌套,if,语句,。,2.,嵌套的,if,语句,在,if,语句的,else,子句中嵌套多个具有,else,子句的,if,语句,语句形式如下:,if,(,表达式,1,),语句,1,else,if,(,表达式,2,),语句,2,else,if,(,表达式,3,),语句,3,else,if(,表达式,4),语句,4,.,else,语句,n,执行过程,:,从上向下,逐一,对,if,后的,表达式,进行检测,当其中某一个,表达式的值,为,非零,时,就,执行,与之对应的,if,子句,,阶梯形子句中的其余部分就被,跳越过去,。如果所有表达式的值都为零,则执行最后的,else,子句,即语句,n
9、如果最内层的,if,语句没有,else,子句,那么将不进行任何操作。,(1),用嵌套的,if,语句形成多分支语句,例,4.3,编写程序,根据输入的学生成绩,给出相应的等级。,90,分以上的等级为,A,,,60,分以下的等级为,E,,,其余每,10,分为一个等级。,main(),int,g,;,printf,(Enter g:);,scanf,(%d ,printf,(g=%d:,g);,if,(g=90),printf,(An);,else,if,(g=80),printf,(Bn);,else,if,(g=70),printf,(Cn);,else,if(g=60),printf,(D
10、n);,else,printf,(En);,程序运行情况如下:,Enter g,:,78,g=78,:,C,(2),在,if,子句中嵌套不含,else,子句的,if,语句,用,花括号,把,内层,if,语句,括起来,后,使得此,内层,if,语句,在语法上成为一条,独立的语句,,从而使得,else,子句,只能,与,外层的,if,配对,。,注意:,if,子句,中的,花括号,if(,表达式,1),if,(,表达式,2),语句,1,else,语句,2,语句形式如下:,if(,表达式,1),if(,表达式,2),语句,1,else,语句,2,例,4.4,编写一程序实现符号函数的功能。,main(),int,x,y;,printf,(Enter x:);,scanf,(%d,y=-1;,if(x!=0),if(x0)y=1;,else,y=0;,printf,(x=%d,y=%dn,x,y);,程序运行情况如下:,Enter x,:,8,x=8,y=1,






