选择结构程序设计 (2)精品文稿.ppt
选择结构程序设计第1 页,本讲稿共41 页4.1 关系表达式和逻辑表达式 一、关系运算和关系表达式 关系运算即是比较运算,用于判断结果是否符合条件。1 关系运算符=!=高 低前四种优先级相同,后两种相同,前比后高。第2 页,本讲稿共41 页 关系运算符的优先级低于算术运算符;关系运算符的优先级高于赋值运算符。2 关系表达式 用关系运算符将两个表达式(算术表达式、关系表达式、逻辑表达式、逻辑表达式、赋值表达式、字符表达式)连接起来的式子,称为关系表达式。关系表达式的运算结果是逻辑值。第3 页,本讲稿共41 页 在C 语言中,给出运算结果时,用1 表示逻辑真,用0 表示假;在判断一个量是否为真时,用0 表示假,用非0 表示真。第4 页,本讲稿共41 页includevoid main()int a,b,c;a=b=c=10;a=b=c;printf(a=%d,b=%d,c=%dn,a,b,c);printf(a=():%dn,a=(b=c+*2);printf(a=%d,b=%d,c=%dn,a,b,c);a=b+=+bc+;printf(a=%d,b=%d,c=%dn,a,b,c);第5 页,本讲稿共41 页结果:a=1,b=10,c=10a=():0a=1,b=20,c=11a=0,b=22,c=12 第6 页,本讲稿共41 页 二、逻辑运算符和逻辑表达式1.逻辑运算符 C 语言提供了三个逻辑运算符,按由高到低的优先级次序,它们是:!:逻辑非&:逻辑与:逻辑或 其中,!为单目运算符,&、为双目运算符。第7 页,本讲稿共41 页运算规则:1)&:当 且 仅 当 两 个 运 算 量 的 值 都 为“真”时,运算结果为“真”,否则为“假”。2)|:当 且 仅 当 两 个 运 算 量 的 值 都 为“假”时,运算结果为“假”,否则为“真”。3)!:当 运 算 量 的 值 为“真”时,运 算 结果 为“假”;当 运 算 量 的 值 为“假”时,运算结果为“真”。例:若x=5,求:(1)(x=0)&(x10)(2)(x5)第8 页,本讲稿共41 页2.逻辑运算符的运算优先级(1)逻 辑 非 的 优 先 级 最 高,逻 辑 与 次 之,逻 辑或最低,即:!(非)&(与)|(或)(2)与其它种类运算符的优先关系!算术运算 关系运算&|赋值运算3.逻辑表达式 用逻辑运算符将1 个或多个表达式连接起来,进行逻辑运算的式子。第9 页,本讲稿共41 页 结果为0 或1。运算对象可以是0 或1,或者是0 和非0 的整数,也可以是任何类型的数据,可以是字符型、实型或指针型等。第10 页,本讲稿共41 页注意:在计算逻辑表达式时,只有在必须执 行下一个表达式才能求解时,才求解 该表达式(即并不是所有的表达式都 被求解)。(1)对于逻辑与运算,如果第一个操作数被判定为“假”,系统不再判定或求解第二操作数。(2)对于逻辑或运算,如果第一个操作数被判定为“真”,系统不再判定或求解第二操作数。第11 页,本讲稿共41 页4.2 if语句 一、if语句的格式1 格式1 if(表达式)语句 例:if(xy)x=x+y;2 格式2 if(表达式)语句1 else 语句2 例:if(xy)x=x+y;else x=x-y;第12 页,本讲稿共41 页第13 页,本讲稿共41 页二、语句说明1 表达式为关系式或逻辑式,若表达式为 0,为假,若值为非0,则为真。2 Else 前必须有“;”,整个语句结束必须有“;”,“;”是C 中语句的一部分。else必须 和if一同用,不能单独使用。例:输入三角形的三边,求三角形的面积。第14 页,本讲稿共41 页第15 页,本讲稿共41 页includeincludevoid main()float a,b,c,area,s;printf(Input 3 edges:n);scanf(%f%f%f,&a,&b,&c);if(a+bc&b+ca&a+cb)第16 页,本讲稿共41 页 s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);printf(The area=%.2f,area);else printf(Input errror!n);第17 页,本讲稿共41 页三、if语句的嵌套 在if语句中又包含if语句,称为if语句的嵌套,可以嵌套在if子句中,也可以嵌套在else子句中。1 嵌套格式(1)if(表达式1)if(表达式2)语句1 else 语句2 else 语句3第18 页,本讲稿共41 页(2)if(表达式1)if(表达式2)语句1 else 语句2(3)if(表达式1)if(表达式2)语句1 else 语句2第19 页,本讲稿共41 页(4)if(表达式1)语句1 else if(表达式2)语句2 else 语句3(5)if(表达式1)语句1 else if(表达式2)语句2 第20 页,本讲稿共41 页2.说明(1)if 和else 应配对出现,每一个else 和离它最 近且尚未匹配的if相匹配。(2)最好在条件为真时执行一个操作,而在条 件为假时再去测试下一个条件。不要在某 条件成功后再接着去测试下一个条件。第21 页,本讲稿共41 页ififif else else else 第22 页,本讲稿共41 页(3)在嵌套的多个条件中,应尽量把求值为真 概率最大的条件放在前面优先判断,这样 可以提高if语句的效率。3.if 语句中条件表达式的灵活设置(1)用一个数值表示条件 如:int m;scanf(%d,&m);if(!m)printf(Yes);第23 页,本讲稿共41 页(2)将赋值运算和条件判断结合起来 如:char ch;if(ch=getchar()!=n)putchar(ch);(3)用复合的逻辑表达式表示条件 如:if(score70&score80)printf(B);第24 页,本讲稿共41 页例:编写程序,根据输入的学生成绩,给出 相应的等级。90 分以上为A,60 分以下的 等级为E,其余每10 分为一个等级。第25 页,本讲稿共41 页#include void main()int g;printf(“Enter g:”);scanf(%d”,&g);printf(“g=%d:”,g);if(g=90)printf(“An”);else if(g=80)第26 页,本讲稿共41 页 printf(“Bn”);else if(g=70)printf(“Cn”);else if(g=60)printf(“Dn”);else printf(“En”);第27 页,本讲稿共41 页四、条件运算符 若if语句中,在表达式为真和假时,且都只执行一个赋值语句给同一个变量赋值时,可以用简单的条件运算符来处理。1 格式 表达式1?表达式2:表达式3 执行过程:先计算表达式1,若为真则求表达式2,其值即为整个条件表达式的值;若为假,则求表达式3,其值为整个表达式的值。第28 页,本讲稿共41 页如:if(ab)max=a;else max=b;可改为:max=(ab)?a:b;2 说明(1)条件运算符是唯一的一个三目运算符;(2)条件运算符优于赋值运算符,但低于关系 运算符和算术运算符;如:y=x10?100:200(3)条件运算符的结合性为右结合性;第29 页,本讲稿共41 页如:int w=4,x=3,y=2,z=1;printf(“%dn”,(wx?w:zy?z:x);(4)条件表达式中的“表达式1”是关系或逻辑表 达式,“表达式2”和“表达式3”可以是数值表 达式,赋值表达式或函数表达式。3.举例:猜数游戏。程序预置一个常数(称为幻数),让用户猜,猜对时给出正确信息,否则会给出是大了还是小了的提示。第30 页,本讲稿共41 页includevoid main()int magic=618,guess;printf(Input your guess:n);scanf(%d,&guess);if(guess!=magic)guessmagic?printf(High):printf(Low);else printf(*Right*n);printf(%d is the magic number.n,magic);第31 页,本讲稿共41 页4.3 switch 语句 一、语句格式和功能1 格式 switch(表达式)case 常量表达式1:语句1 case 常量表达式2:语句2 case 常量表达式n:语句n default:语句n+1第32 页,本讲稿共41 页2 说明(1)switch 表达式可以是整型、字符型和枚举 型;(2)当表达式的值与某一常量表达式的值相等 时,就从该case 后的语句开始往下执行,一直到switch 语句结束;若没有找到相等 的常量,则执行default 后的语句;(3)常量表达式的值必须不同;(4)多个case 和default 出现的次序不影响程序 执行结果。第33 页,本讲稿共41 页 例:用switch 语句改写前例。includevoid main()int g;printf(“Enter a mark:”);scanf(“%d”,&g);printf(“g=%d:”,g);switch(g/10)第34 页,本讲稿共41 页 case 10:case 9:printf(An);case 8:printf(Bn);case 7:printf(Cn);case 6:printf(Dn);default:printf(En);第35 页,本讲稿共41 页二、break 的作用 若要在执行一个case 语句后,跳出switch,则需在相应case 后面加break 语句。利用break 语句改写上例:includevoid main()int g;printf(“Enter a mark:”);scanf(“%d”,&g);printf(“g=%d:”,g);第36 页,本讲稿共41 页 switch(g/10)case 10:case 9:printf(An);break;case 8:printf(Bn);break;case 7:printf(Cn);break;case 6:printf(Dn);break;default:printf(En);第37 页,本讲稿共41 页练习:1.为表示关系xy z,应使用的C 表达式是:A.(x=y)&(y=z)B.(x=y)AND(y=x)C.(x=y=z)D.(x=y)&(y=z)2.写出输出结果:main()int a=2,b=-1,c=2;if(ab)if(b0)c=0;else c+=1;printf(“%dn”,c);第38 页,本讲稿共41 页3.写出输出结果:x=0;y=2;z=3;switch(x)case 0:switch(y=2)case 1:printf(“*”);break;case 2:printf(“%”);break;case 1:switch(z)case 1:printf(“$”);break;case 2:printf(“*”);break;default:printf(“#”);第39 页,本讲稿共41 页4.当a=1,b=2,c=3 时,以下if语句执行后,a、b、c的值是多少?if(ac)b=a;a=c;c=b;第40 页,本讲稿共41 页编程:1.编写程序,输入一位学生的生日(年,月,日),并输入当前的日期,输出该生的实足年龄。2.编写程序,输入一个整数,打印出它是奇数还是偶数。3.编写程序,输入a,b,c 三个数,打印出最大者。第41 页,本讲稿共41 页