选择结构(2)

上传人:xy****7 文档编号:58005527 上传时间:2018-10-26 格式:PPT 页数:47 大小:312KB
返回 下载 相关 举报
选择结构(2)_第1页
第1页 / 共47页
选择结构(2)_第2页
第2页 / 共47页
选择结构(2)_第3页
第3页 / 共47页
选择结构(2)_第4页
第4页 / 共47页
选择结构(2)_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《选择结构(2)》由会员分享,可在线阅读,更多相关《选择结构(2)(47页珍藏版)》请在金锄头文库上搜索。

1、1,第四章 选择结构程序设计,2,在顺序结构中,各语句是按自上而下的顺序执行的,执行完上一个语句就自动执行下一个语句,是无条件的,不必作任何判断。实际上,在很多情况下,需要根据某个条件是否满足来决定是否执行指定的操作任务,或者从给定的两种或多种操作选择其一。这就是选择结构要解决的问题。,3,引例:计算函数值,4,主要内容:,关系表达式 逻辑表达式 选择结构控制语句(if语句、switch语句),5,4.1 关系运算符和关系表达式,关系运算:是对两个量进行“比较运算”。 4.1.1关系运算符及其优先次序: 关系运算符:, = , a+b c(a+b)a=bc a=(bc) a=bc a=(bc)

2、,注意区分“=”和“=”,6,用关系运算符把两个表达式(可以是算术表达式或关系表达式、逻辑表达式、赋值表达式、字符表达式)连接起来的式子。如:x!=0 a=A a*ab)=c 结果为1;b+ca,则结果是0,4.1.2 关系表达式,说明:(1)运算符两边的操作数可以是不同类型,但比较前要进行类型转换。(2)关系表达式的值:0表示false,1表示true。(3)判断两个实型数是否相等,应特别注意=,!=不能用于实型比较,如x/y*y=x不成立。,7,判定实数x,y是否相等,采用的方式如下:float x,y; 因为实数在内存中存储有误差,不能进行比较,若一定要比较,我们用fabs(x-y)c,

3、d=ab+c,1,d=ab+c?,9,4.2 逻辑运算符和逻辑表达式,4.2.1逻辑运算符及其优先次序: 逻辑运算符:!(逻辑非) &(逻辑与) |(逻辑或) 逻辑运算的真值表,真值表可归纳为:真与真为真,其余为假;假或假为假,其余为真。,逻辑运算符优先级:(高)!(非) &(与) |(或)(低)(高)!(非)算术运算符关系运算符&(与)|(或)赋值运算符(低),如:ab&bc (ab)&(bc) a!=b&c!=0 (a!=b)&(c!=0) !a|ab (!a)|(ab),10,4.2.2 逻辑表达式,用逻辑运算符将关系表达式或逻辑量(可以是基本类型的常量或变量)连接起来的式子就是逻辑表达

4、式。 逻辑表达式其值是一个逻辑值,即“真”或“假”,1代表“真”,0代表“假”。但在判断一个量是否为真时,将一个非0代表“真”。,如:若a=4,则 !a 0a&-5 14|0 1,11,&与|严格从左到右进行运算对&左分量为0,则整个表达式为假(值为0),不再计算右分量,对|左分量为非0,则整个表达式为真(值为1),不再计算右分量。 注意:&与&,|与|的不同。4&6结果为4,4&6结果为1(真),4|6结果为6,4|6结果为1(真) x=-1&xb)if((ab)!=0),4.2.2 逻辑表达式,12,举例,已知: (a=1 b=0),1,a | b & 0,! a & (53) | b,0

5、,13,举例,53 & 8 3) & (8 3 | 2,1,逻辑运算符两侧的运算对象不但可以是和,也可以是或非的整数,也可是任何类型的数据。系统判定标准:为假;非为真。,14,4.2.3 逻辑型变量,这是C99所增加的一种数据类型。可以将关系运算和逻辑运算的结果存到一个逻辑型变量中,以便于分析和运算。 定义逻辑变量用类型符_Bool,若在源文件中用#include指令包含了头文件stdbool.h,则_Bool可以用bool代替。,float score; scanf(“%f”,15,选择结构的三种分支单分支双分支多分支,4.3 实现选择结构的控制语句,16,选择结构,单分支,双分支,if (

6、表达式) 语句,多分支,if (表达式) 语句 else 语句,if (表达式1) 语句 else if (表达式) 语句 else 语句n,if 语句的嵌套,switch语句,选择结构的三种分支,17,4.3 if语句,4.3.1 if语句三种格式 (P89)(1)if(表达式)语句;例:if(xy)printf(“%d”,x);例:实现什么功能?int main() int num;scanf(“%d“,18,#include int main() float a,b,t=0;scanf(“%f,%f”, ,3,43.00, 4.00, if (ab)t=a; a=b; b=t; , if

7、 (ab)t=a; a=b; b=t; ,3,44.00, 0.00,当某些语句作为一个整体出现的时候,必须是复合语句的形式。,例:输入两个实数,按其值由小到大顺序输出这两个数。,19,(2)if(表达式)语句1;else 语句2;例:if(x=0)printf(“%f”,x);else printf(“%f”,-x);,注意: else不能独立存在(它是if语句中的一部分,与离它最近的if语句配对使用;else前一定有一个“;”号) 表达式的值为非0时,系统按真值处理,例:下面四个式子中,哪些能输出”OK“ 1)if(a) printf(“OK”); 1 2)x=-5if(x) printf

8、(“OK”); 1 3)y=0;if(y=0) printf(“OK”); 1 (这是一个关系表达式,返回一个逻辑量) 4)y=0if(y) printf(“OK”); 0 (直接将y作为一个逻辑量处理,0为假),20,#include #include int main() float a,b,c,p,s;scanf(“%f,%f,%f”, ,例:输入三角形的三边,求三角形的面积。,3,4,5 s= 6.00,3,4,8 非三角形!,21,(3)if(表达式1)语句1; else if(表达式2)语句2;else if(表达式3)语句3;else if(表达式n-1)语句n-1;else 语

9、句n;,阶梯式的语句,系统从上到下逐个判断表达式,一旦发现某表达式i满足时,则执行与它有关的语句i,并跳过其它剩余的阶梯。若所有条件均不满足,执行最后一个else语句或后续语句。,22,#include int main() int x,y;scanf(“%d”, ,例:判断函数(当x0,y=1;x=0,y=0;x0,y=1;x=0,y=0;xb) d=a; else if (cb) d=c;else d=b;,if (ab)if (cb) d=c; else d=b ;,if (ab)if (cb) d=c; else d=b ;,if (ab) if (cb) d=c;else d=b;

10、else d=a;,d=5,d=3,d=0,d=4,27,若在if语句中,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值时,可以用一个条件运算符来处理。,4.3.3 条件运算符,例: if (ab)max=a; else max=b;,用条件运算符来表示,max=(ab)?a:b;,“(ab)?a:b ”是一个条件表达式,当(ab)条件为真,则条件表达式的值取a;否则取值b。,28,条件表达式要求有3个操作对象,称三目(元)运算符(?和 :),它是C语言中惟一的一个三目运算符。 一般形式:表达式1?表达式2:表达式3其中表达式1为逻辑表达式,表达式2,表达式3为一

11、般表达式。 执行顺序: 先求解表达式1,如为非0(真),则求解表达式2,此时表达式2的值就是整个条件表达式的值,若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。,4.3.3 条件运算符,例:z=(ab)?+a:+b 若a=5,b=6,则z=7,29,说明:(1)若表达式2与表达式3的类型不一致,要进行类型转换,取二者中较高的类型。如:xy?1:1.5 若xy,则其值为1.5,反之为1.0.(2)条件表达式允许嵌套,条件运算符的结合方向为自右至左。如:ab?a:cd?c:d 相当于 ab?a:(cd?c:d)。(3)条件运算符优先于赋值运算符,但比算术运算符,关系运

12、算符,逻辑运算符都低。,30,4.4 switch语句(开关语句),格式:switch(表达式e) case 常量表达式1:语句1;case 常量表达式2:语句2;case 常量表达式n:语句n;default:语句n+1;,表达式e的值的类型应为整型(包括字符型)。,常量表达式必须与表达式e类型一致(整型与字符型通用),31,执行过程:1、计算表达式e的值2、若与常量表达式i值一致,则从语句i,开始执行;直到遇到break语句或switch语句的“”。3、若与任何常量表达式值均不一致时,则执行default语句,或执行后续语句。,32,说明:(1)当表达式的值与某个case后面的常量表达式的值相等时,就执行后面的语句,否则执行default后面的语句。(2)每个case的常量表达式的值必须互不相等。(3)各个case的出现次序不影响执行结果。(4)case常量表达式只是起语句标号作用,执行时根据switch表达式的值找到匹配的入口标号,并不是在该处进行条件判断。(5)多个case可以共用一组执行语句。,33,举例,#include int main() char grade; printf(“请输入考试等级AD:”);scanf(“%c”, ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号