资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,C,程序设计(第三版),*,第五章,选择结构程序设计,本章要点,关系表达式,逻辑表达式,选择结构程序设计,主要内容,5.1,关系运算符和关系表达式,5.2,逻辑运算符和逻辑表达式,5.3 if,语句,5.4 switch,语句,5.5,程序举例,5.1,关系运算符和关系表达式,1.,关系运算符及其优先次序, (,小于,), (,大于,),= (,大于或等于,),= (,等于,),!= (,不等于,),优先级相同(高),优先级相同(低),说明:,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符,5.1,关系运算符和关系表达式,2.,关系表达式,用关系运算符将两个表达式(可以是算术表达式或,关系表达式,逻辑表达式,赋值表达式,字符表达式),接起来的式子,称关系表达式,例:,ab,a+bb+c,(a=3)(b=5),ab)(bb”,的值为“真”,表达式的值为,1,。,C,语言中没有专用的逻辑值,,1,代表真,,0,代表假,5.2,逻辑运算符和逻辑表达式,1.,逻辑运算符及其优先次序,(1)& (,逻辑与,),相当于其他语言中的,AND,(2)| (,逻辑或,),相当于其他语言中的,OR,(3)! (,逻辑非,),相当于其他语言中的,NOT,例:,a&b,若,a,b,为真,则,a&b,为真。,a|b,若,a,b,之一为真,则,a|b,为真。,!,a,若,a,为真,则,!a,为假。,优先次序:,!,(,非,)-&()-|(),逻辑运算符中的“,&”,和“,|”,低于关系运算符,“,!”,高于算,术运算符,5.2,逻辑运算符和逻辑表达式,2.,逻辑表达式,用逻辑运算符将关系表达式或逻辑量连接起来的式子就,是逻辑表达式。,逻辑表达式的值应该是一个逻辑量“真”或“假”。,例:,设,a=4,,,b=5,:,!a,的值为,0 a&b,的值为,1,a|b,的值为,1 !a|b,的值为,1,4&0|2,的值为,1,任何非零的数值被认作“真”,5.2,逻辑运算符和逻辑表达式,例:,53&84-!0,自左向右运算,1&0,逻辑值为,0,83,逻辑值为,1,表达式值为,0,5.2,逻辑运算符和逻辑表达式,在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。,(1)a&b&c,只有,a,为真时,才需要判断,b,的值,只有,a,和,b,都为真时,,才需要判断,c,的值。,(2)a|b|c,只要,a,为真,就不必判断,b,和,c,的值,只有,a,为假,才,判断,b,。,a,和,b,都为假才判断,c,例,:,(m=ab)&(n=cd),当,a=1,b=2,c=3,d=4,m,和,n,的原值为,1,时,由于“,ab”,的值,为,0,,因此,m=0,,,而“,n=cd”,不被执行,因此,n,的值不是,0,而,仍保持原值,1,。,5.2,逻辑运算符和逻辑表达式,用逻辑表达式来表示闰年的条件,能被,4,整除,但不能被,100,整除。,能被,100,整除,又能被,400,整除。,答,(year%4=0&year%100!=0),|year%400=0,案,值为真,(1),是闰年,否则为非闰年。,5.3 if,语句,1.if,语句的三种基本形式,(1)if,(,表达式) 语句,例:,if(xy),printf(“%d”,x,);,表达式,语句,真(非,0,),假,(,0,),5.3 if,语句,(2)if(,表达式,),语句,1,else,语句,2,例:,if (xy),printf(“%d”,x,);,else,printf(“%d”,y,);,条件,语句,1,语句,2,Y,N,5.3 if,语句,(3)if,(,表达式,1,)语句,1,else if(,表达式,2),语句,2,else if(,表达式,3),语句,3,else if(,表达式,m),语句,m,else,语句,n,5.3 if,语句,例:,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;,5.3 if,语句,说明:,(1)3,种形式的,if,语句中在,if,后面都有表达式,,一般为逻辑表达式或关系表达式。,(2),第二,第三种形式的,if,语句中,在每个,else,前面有一个分号,整个语句结束处有一,个分号。,(3),在,if,和,else,后面可以只含有一个内嵌的操,作语句,也可以由多个操作语句,此时用花,括号将几个语句括起来成为一个复合语句。,5.3 if,语句,例,5.1,输入两个实数,按代数值由小到大的顺序输出这两个数。,#includevoid 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);,y,n,ab,T=a,A=b,B=t,5.3 if,语句,例,5.2,输入三个数,a,b,c,要求按由小到大的顺序输出。,If ab,将,a,和,b,对换,If ac,将,a,和,c,对换,If bc,将,b,和,c,对换,ab,ac,bc,a,和,b,交换,a,和,c,交换,c,和,b,交换,y,y,y,n,n,5.3 if,语句,#include void main ( ) ,float a,b,c,t; scanf(,%f,%f,%f,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); ,5.3 if,语句,2.if,语句的嵌套,在,if,语句中又包含一个或多个,if,语句称为,if,语句的嵌套。,形式:,if(),if(),语句,1,else,语句,2,else,if(),语句,3,else,语句,4,内嵌,if,5.3 if,语句,匹配规则:,else,总是与它上面的,最近的,统一复合语句中的,未配,对的,if,语句配对。,例:,if(),if(),语句,1,else,if(),语句,2,else,语句,3,例:,if(),if(),语句,1,else,if(),语句,2,else,语句,3,当,if,和,else,数目不同时,可以加,花括号,来确定配对关系。,5.3 if,语句,-1 (,x0),算法,1,: 算法,1,:,输入,x,输入,x,若,x0,则,y=-1,若,x0,则,y=1,若,x=0,则,y=0,输出,y,若,x0,则,y=1,输出,y,5.3 if,语句,#include,void main(),int,x,y;,scanf(“%d”,&x,);,程序段,printf(“x,=%d,y=%dn”,x,y);,5.3 if,语句,上例中的程序段有四个,请判断哪个是正确的?,程序,1,: 程序,2,:,if(x,=0),Y=-1; if(x0) y=1;,else else y=0;,if(x,=0) y=0; else y=-1;,else y=1;,程序,3:,程序,4:,Y=-1; y=0;,if(x,!=0) if(x=0),if(x,0) y=1;,if(x,0) y=1;,else y=0; Else y=-1;,正,确,正,确,5.3 if,语句,3.,条件运算符,格式: 表达式?表达式,表达式,功能: 判断,表达式,1,的值,如果成立就执行,表,达式,2,,否则就执行,表达式,3,使用场合:若在语句中,当被判别的表达式的,值为“真”或“假” 时,都执行一个赋值语,句且向,同一个变量,赋值时,可以用一个,条件运算符来处理。,5.3 if,语句,例:, () ,=,;, ;,当,ab,时将,a,的值赋给,max,,当,ab,时将,b,的值赋给,max,,,可以看到无论,ab,是否满足,都是向同一个变量赋值。,可以用下面的条件运算符来处理:,(,)?,;,5.3 if,语句,说明:,(1),条件运算符的执行顺序:先求解表达式,若为非(真),则求解表达式,此时表达式的值就作为整个条件表达式,的值。若表达式的值为(假),则求解表达式,表达,式的值就是整个条件表达式的值。,(2),条件运算符优先级高于赋值运算符 ,低于关系运算符,和算术运算符。,(3),条件运算符的结合方向为“自右至左”。,(,4)“,表达式,2”,和“表达式,3”,不仅可以是数值表达式,还可以,是赋值表达式或函数表达式。,(5),条件表达式中,表达式的类型可以与表达式和表达,式的类型不同。,5.3 if,语句,例,5.4,输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。,#include void main ( ) char,ch,;,scanf(%c,&,ch,);,ch,=,(,ch,=A&,ch,1e-6),x1=(-b+sqrt(disc)/(2*a);,x2=(-b-sqrt(disc)/(2*a);,printf(,has distinct real roots:%8.4f and %8.4fn,x1,x2); elserealpart=-b/(2*a);,imagpart=sqrt(-disc)/(2*a);,printf(,has complex rootsn,);,printf(,%8.4f+%8.4fin,realpart,imagpart);,printf(,%8.4f-%8.4fin,realpart,imagpart);,5.5,程序举例,例,5.7,运输公司对用户计算运费。,路程()越远,每公里运费越低。标准如下:, 没有折扣, 折扣, 折扣, 折扣, 折扣, 折扣,设每公里每吨货物的基本运费为,货物重为,,距离为,折扣为,则总运费的计算公式为:,*(),5.5,程序举例,分析折扣变化的规律性:,折扣的“变化点”都是的倍数,在横轴上加一种坐标,,c,的值为,s/250,。,c,代表,250,的倍数。,,无折扣;,,折扣;,,;,,;,,;,,。,5.5,程序举例(续),#include void main ( ) int c,s;float p,w,d,f;scanf(%f,%f,%d,
展开阅读全文