第5章选择分支结构--c语言程序设计(谭浩强第三版)

上传人:101****457 文档编号:90633616 上传时间:2019-06-14 格式:PPT 页数:50 大小:886KB
返回 下载 相关 举报
第5章选择分支结构--c语言程序设计(谭浩强第三版)_第1页
第1页 / 共50页
第5章选择分支结构--c语言程序设计(谭浩强第三版)_第2页
第2页 / 共50页
第5章选择分支结构--c语言程序设计(谭浩强第三版)_第3页
第3页 / 共50页
第5章选择分支结构--c语言程序设计(谭浩强第三版)_第4页
第4页 / 共50页
第5章选择分支结构--c语言程序设计(谭浩强第三版)_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《第5章选择分支结构--c语言程序设计(谭浩强第三版)》由会员分享,可在线阅读,更多相关《第5章选择分支结构--c语言程序设计(谭浩强第三版)(50页珍藏版)》请在金锄头文库上搜索。

1、第5章 选择结构程序设计,关系运算符和关系表达式 逻辑运算符和逻辑表达式 if语句 switch语句 程序举例,引例:,1/x 当x0时,10000 当x=0时,y=,选择结构是3种基本结构之一,经常牵涉到:根据所指定的条件是否相同,从两组(或多组)操作中选择其一。,要考虑两个方面的问题: 1、C语言中如何表示条件? 一般用关系表达式或逻辑表达式 2、C语言中实现选择结构用什么语句?用if语句或switch语句。,if(x!=0) y=1/x; else y=10000;,此处:用if语句来表示选择结构 用一个关系表达式x!=0来表示条件,5.1 关系运算符和表达式 1、关系运算: 实质是两个

2、量“比较运算”。 2、关系运算符 : 种类:6种 = != 结合方向:自左向右 优先级别:前4种优先级相同,高于后2种 由高到低:算术运算关系运算赋值运算,/表达式值1,/表达式值1,/表达式值0,/ab值为1,所以d=1,/ab为1, abc为0,所以f=0,例 int a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc,3、关系表达式:用关系运算符将两个表达式连接起来式子。 4、关系表达式的值:是逻辑值“真”或“假”,用1和0表示,1 结果为真 (关系成立) 0 结果为假 (关系不成立),注意:其中“= =”表示相等,而 “=”表示赋值,(1)关系运算符左右两边类型

3、不一致,自动进行类型转换, 转换成两边的类型相同,然后进行比较。 例如:若a=0,b=0.5,转换成a=0.0,则 a”,原因在于舍入误差可能造成两个逻辑上应该相等的数不相 等。 例如:如果x、y均为实数,要避免使用 x=y 应使用 fabs(x-y)1e-6 (3)关系运算符“ 、!” 在 书写时,不要 用空格将其分开,否则会产生语法错误。,5、关系运算注意的问题,52 逻辑运算符和逻辑表达式 有时,只用一个简单的关系表达式不能完整地表达一个条件,如: y= 其中的条件需要用逻辑表达式来表达: x!=0 &a!=0 &就是一种逻辑运算符。,1/x+1/a 当x0,a0时,10000 其它,1

4、、逻辑运算符 (1)种类:三种逻辑运算符 & 逻辑与(相当日常生活中:而且,并且,只在两 条件同时成立时为“真”) | 逻辑或(相当日常生活中:或,两个条件只要有 一个成立时即为“真”) ! 逻辑非(条件为真,运算后为假,条件为假,运 算后为真) “&”,“|”是双目运算符,“!”是单目运算符。 例:a&b 若a,b为真,则a&b为真。 a|b 若a,b之一为真,则a|b为真。 !a 若a为真,则!a为假。,52 逻辑运算符和逻辑表达式,C语言中,运算量: 0表示“假”, 非0表示“真”, 运算结果: 0表示“假”, 1表示“真”,(2)逻辑运算真值表,(3)优先级:,(4)结合方向:,2、逻

5、辑表达式和逻辑表达式的值 (1)逻辑表达式:用逻辑运算符将关系表达式、逻辑量连接 起来的式子。 例如: !a&bxy & c (2)逻辑表达式的值:1或0,表示逻辑值“真”或“假”,例 a=4;b=5; !a a&b a|b !a|b 4&0|2 53&84-!0 c&d,值为1,值为0,值为1,值为1,值为1,值为1,(53)&(8(4-(!0) 值为0,在逻辑运算中,非0值参加逻辑运算时被看成1处理.,(3)短路现象:一个逻辑表达式中的逻辑运算符并不一定全部执行.,例如: a=1,b=2,c=3,d=4,m=1,n=1 (m=ab)&(n=cd) 判断m,n的值 :结果m=0,n=1,表达

6、式为0,例如: a&b&c 当a=0(假)时, b,c不需判断。 当a=1,b=0, c不需判断。,例如: a b c 当a=1时, b, c均不必判别。,1&0逻辑值为0,83逻辑值为0,4-1值为3,!0逻辑值为1,53逻辑值为1,(53)&(8(4-(!0) 值为0,满足下列2个条件中之一的为闰年: 年号能被4整除,但不能被100整除。 年号能被400整除。,例 写出判断年号是否为闰年的逻辑表达式,用变量year表示年号,则逻辑表达式:,(year%4=0 & year%100!=0) | year%400=0 值为1,则year为闰年;否则为非闰年。,!(year%4=0&year%1

7、00!=0)|(year%400= =0),执行过程: 当表达式值非0时, 执行语句, 否则,不执行语句。,例如: if (xy) printf(“ %d“, x) ;,形式1: if(表达式) 语句,5.3 if语句(三种形式),1.if语句的三种基本形式,表达式的值: 1 结果为真 (条件成立) 0 结果为假 (条件不成立),例2 输入两个实数,按其值由小到大次序输出这两个数。,main( ) float a, b, t; scanf (“%f, %f“, ,形式1: if(表达式) 语句,1.if语句的三种基本形式,例3 输入三个数,按从小到大的顺序输出。,main ( ) float

8、a, b, c,t; scanf(“ %f,%f,%f”, ,形式1: if(表达式) 语句,1.if语句的三种基本形式,例如: if(xy) printf(“%d“, x); else printf(“ %d“, y);,执行过程: 当表达式值为非0, 执行语句1; 当表达式值为0, 执行语句2。,形式2: if(表达式) 语句1 else 语句2,1.if语句的三种基本形式,例4 输入一个数,判断它是否能被3整除。 若能,则打印“YES”, 否则,打印“NO”。,形式2: if(表达式) 语句1 else 语句2,main( ) int n; printf(“input n: ”); sc

9、anf(“%d”, ,1.if语句的三种基本形式,执行过程: 从上向下逐一对if后面的表达式进行检测。 当某一个表达式的值为非0时,就执行与此有关的子句中的语句,其余部分就被越过去。 如果所有表达式的值都是0,则执行最后的else子句; 如果没有最后的那个else子句,那么,将不进行任何操作。,形式3:if(表达式1) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3 else if(表达式n) 语句n else 语句n+1,1.if语句的三种基本形式,形式3:if(表达式1) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3

10、 else if(表达式n) 语句n else 语句n+1,例如: 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;,1.if语句的三种基本形式,形式3:if(表达式1) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3 else if(表达式n) 语句n else 语句n+1,例5: 输入一个学生成绩, 当成绩90时,输出 verygood, 当8

11、0成绩90时, 输出 good, 当60成绩80时, 输出pass, 当成绩60时,输出fail。,main( ) int score ; printf (“Input score:“); scanf(“%d“, ,1.if语句的三种基本形式,例6:输入一个字符,请判断是字母、数字还是特殊字符。,#include main( ) char ch; printf(“Please input a character:n“); ch=getchar( ); if(ch=a&ch=A&ch=0&ch=9) printf(“n %c is a number!n“,ch); else printf(“n

12、%c is a special character! n“,ch); ,形式3:if(表达式1) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3 else if(表达式n) 语句n else 语句n+1,例如: if (a if (ab) if (3) if (a+88) ,1. 表达式可以是逻辑表达式、关系表达式、算术表达式。,2. 语句必须以分号结束。,3. 若语句不止一条,则必须用 括起来。在 外不加分号。,注意的问题,5.3 if语句,2、if语句的嵌套: 在if语句中, 又包含一个或多个if语句。,5.3 if语句(三种形式),2、if语句的嵌套,

13、if else 配对原则:缺省 时,else总是和它上面离它最近的未配对的if 配对。,如果没有 时的配对,2、if语句的嵌套,if else 配对原则,修改: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);,实现if else 正确配对方法:必要时,加 ,例7 有一函数:,编一程序,输入一个x值,输出 y 值。,有以下几种写法,请判断哪些是正确的?,2、if语句的嵌套,程序2:将程序1的if语句改为: main ( ) int x, y; scanf(“d“, ,程序1: main ( ) int x, y; scanf(“d“,

14、 ,2、if语句的嵌套,程序4:将程序1的if语句改为 main( ) int x,y; scanf(“%d“, ,程序3:将程序1的if语句改为 main( ) int x,y; scanf(“%d“, ,2、if语句的嵌套,1. 程序1 和程序2 是正确的。 它们代表的函数为:,2. 程序3 和程序4 是错误的。 它们代表的函数为:,结论:,5.3 if语句,C语言提供了一个简单的条件赋值语句或条件表达式。,问题: 当判断条件不论是“真”是“ 假”, 均给同一变量赋值时,简化条件语句 运算符书写方式: ? :,属三目运算符。,3、条件运算符,5.3 if语句,执行过程: 先求解表达式1,

15、若非0(真),则值为表达式2的值, 否则,为表达式3的值。,一般形式:,表达式1 ? 表达式2 : 表达式3,例如:max=ab? a:b; 当ab, max a; 否则, maxb,3、条件运算符,5.3 if语句,注意:,条件运算符优先于赋值运算符。 例如: max=(ab? a:b) 可去掉( ) 条件运算符低于关系运算符和算术运算符。 例如: max=ab? a:b+1max= ab? a:(b+1) 而不是 max=(ab? a:b)+1 条件运算符结合性为从右至左。 例如: ab? a:cd ? c:d 相当于 ab? a:(cd? c:d) 条件表达式不能取代一般的if语句,只有当if 的两 个分支为给同一变量赋值时才可替代if. 例如:求 y=a+|b| printf(“y=%dn”,b0?a+b:a-b); 表达式1、表达式2、表达式3的类型可以不同。 例如: xy? 1 : 1.5,3、条件运算符,5.3 if语句,3、条件运算符,例8

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

当前位置:首页 > 中学教育 > 其它中学文档

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