1、第四章 选择结构程序设计,4.1 条件判断,一.条件判断的含义,条件判断的结果是一个逻辑值:“是”或“否”,二.关系运算符和关系表达式,1.关系运算符及其优先次序,优先级相同(高), (小于) (小于或等于) (大于) (大于或等于) (等于)! (不等于),与其它运算符优先级的比较:,用关系运算符将两个表达式连接起来的式子。 如:(ab)(by 、s+fd,2.关系表达式,关系表达式的值,运算结果逻辑值 1“真” ,0“假”,例如: 设 a=3, b=2, c=1 求下面关系表达式 的值:cb(a-b) = = 1b+ca,值为,值为,值为,如果关系运算对象的类型不同,也要先进行类型转换。,
2、三. 逻辑运算符和逻辑表达式,1.逻辑运算符及其优先次序,优先级,(高),(低),例如:!a a为真,则!a为假。a|b a、b之一为真,则a|b为真。a&b a、b 同时为真,则 a&b 为真。, ! (逻辑非) & (逻辑与) | (逻辑或),数学中的100100 & x200,数学中的x100或x100 | x0,逻辑运算符与其它运算符优先级的比较,(高),(低),结果:c=1,二、逻辑表达式,用逻辑运算符将逻辑运算对象连结起来的式子。 如:(ab)&(bb,逻辑表达式的值,运算对象以数值非0为真、0为假 运算结果逻辑值(只有假为0、真为1两种取值) 如: 53 & 2 | 84 值为
3、1b&d 值为,4.2 用if语句实现选择结构,1. if (表达式) 语句,一、if 语句的三种形式,执行过程: 当表达式的值为“真”(非零)时,执行语句,否则,不执行语句。,例1:任意输入两个数,输出其中最大的。#include “stdio.h” main() float x,y; scanf(“%f%f”,例2:任意输入三个数,按从大到小的顺序输出。 #include “stdio.h” main() float x,y,z,t;scanf(“%f%f%f”,2. if (表达式) 语句1 else 语句2,执行过程:当表达式的值为“真”(非零)时,执行语句1,否则执行语句2。,例1:
4、任意输入一个整数,判断其是否能被3整除。#include “stdio.h” main() int x; scanf(“%d”,例2:铁路托运行李需收取一定的费用,行李重量在50公斤以下的(含50)每公斤收取0.20元,超出50公斤的,超出部分每公斤0.30元。#include “stdio.h” main() float w,y; printf(“input weight”); scanf(“%f”,3. if (表达式1) 语句1else if(表达式2) 语句2else if(表达式3) 语句3:else if(表达式m) 语句melse 语句n,例题: #include “stdio.
5、h” main() float grade; char level; scanf(“%f”,if 语句说明:,2、if 语句中的“语句”为一个简单语句或复合语句,二、使用嵌套的if 语句实现多层判断,在 if 语句中又包含一个或多个if 语句称为 if 语句的嵌套。,一般形式: if (条件1)if (条件2)语句1else 语句2 elseif (条件3)语句3else 语句4,if(x0)if(y0)printf(“x0,y0“);elseprintf(“x0,y0)printf(“x0“);elseprintf(“x=0, y=0”);,说明:,else与if的匹配原则是:一个else应
6、与其之前距离最近且没有与其它else配对的if 配对。,缩 排,三、用if 语句实现选择结构举例,main( ) int x,y;scanf(“%d“,四.利用switch 语句实现多分支选择结构,一般形式: switch(表达式) case 常量表达式1:语句序列1 break;case 常量表达式2:语句序列2 break;:case 常量表达式n:语句序列n break;default :语句序列n+1 ,执行过程:,例题:任意输入一学生成绩,对成绩进行判断。main()int grade;scanf(“%d”, ,若grede= 89,输出结果是什么? 8089 70 79 60 69
7、 error,若grede= 89,输出结果是什么? 8089,第二种形式 :,main() char grade;printf(“Input grade(A,B,C,D):”);scanf(“%c”, ,基本运费、货重,路程(s)和折扣的关系标准如下:编程序,计算运费。s250km 没有折扣250s500 2 %折扣500s1000 5%折扣1000s2000 8%折扣2000s3000 10%折扣3000s 15%折扣,若用if 语句实现上述功能:main( ) int s;float p, w, d , f ;scanf(“%f , %f , %d”, ,例5.6 求 ax2+bx+c=
8、0 方程的解1、a=0 ,方程不是二次方程2、b2-4ac=0, 有两个相等的实根3、b2-4ac0, 有两个不相等的实根4、b2-4ac0, 有两个共轭复根5、如何判断实数为零(或大于零,或小于零),特殊条件的处理,#include main() else if( disc1e-6) float a,b,c,d,disc,x1,x2,realpart,imapart; x1=(-b+sqrt(disc)/(2*a);scanf(“%f,%f,%f”,有问题吗?,习题5.7 给一个不多于5位的正整数,要求:求出它是几位数;分别打印出每一位数字;按逆序打印出各位数字,例如原数为321,应输出12
9、3。,#include main() long int num;int n1,n2,n3,n4,n5,bits;scanf(“%ld”,n5=num/10000;n4= (int)(num-n5*10000)/1000;n3=(int)(num- n5*10000- n4*1000)/100;n2=(int)(num- n5*10000- n4*1000- n3*100)/10;n1=(int)(num-n5*10000-n4*1000-n3*100- n2*10);,switch(bits)case 5:printf(“Every bit is:%d,%d,%d,%d,%dn”,n5,n4,
10、n3,n2,n1);printf(“Reverse is: %d,%d,%d,%d,%dn”,n1,n2,n3,n4, n5);break;case 4: printf(“Every bit is: %d,%d,%d,%dn”,n4,n3,n2,n1);printf(“Reverse is: %d,%d,%d,%dn”,n1,n2,n3,n4);break;,case 3: printf(“Every bit is: %d,%d,%dn”, n3,n2,n1);printf(“Reverse is: %d,%d,%dn”, n1,n2,n3);break;case 2: printf(“Eve
11、ry bit is: %d,%dn”, n2,n1);printf(“Reverse is:%d,%dn”, n1,n2);break;case1: printf(“Bit is: %dn”, n1);printf(“Reverse is: %dn”, n1); ,4.5 条件运算符和条件表达式,例题1: main() int a=3,b=2,max; max= (ab) ? a : b ; printf(“%d”,max);,表达式1 ? 表达式2表达式3 如: (ab) ? a : b,条件运算符的结合方向: 自右至左 如:ab ? a : cd ? c : d 等效于:ab ? a : (cd ? c : d),例题2 :把输入字符中的小写字符转换成大写并输出 。,#include main() char ch;scanf(“%c“, ,main() int a,b,c,t,max;scanf(“%d%d%d“,例题2 :找出任意输入的三个数中最大的数。,