第5章:选择结构程序设计

上传人:今*** 文档编号:107463674 上传时间:2019-10-19 格式:PPT 页数:64 大小:248KB
返回 下载 相关 举报
第5章:选择结构程序设计_第1页
第1页 / 共64页
第5章:选择结构程序设计_第2页
第2页 / 共64页
第5章:选择结构程序设计_第3页
第3页 / 共64页
第5章:选择结构程序设计_第4页
第4页 / 共64页
第5章:选择结构程序设计_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《第5章:选择结构程序设计》由会员分享,可在线阅读,更多相关《第5章:选择结构程序设计(64页珍藏版)》请在金锄头文库上搜索。

1、第5章:选择结构程序设计,5.1问题的引出 前面学习的知识已经可以编写简单的顺序程序,但是有些问题用顺序程序没办法达到要求,如:输入三角形的三边a,b,c判断是否能构成三角形,并求出三角形的周长和面积。 求分段函数的值 0 x=0 必须让计算机按给定的条件进行分析、比较和判断,并按判断后的不同情况进行不同的处理。,问题的引出,这种情况属于选择结构,分支语句正是为了解决这些问题而设定的。C语言提供了进行分支判断的语句if 语句、switch语句来完成这种功能。 为了进行条件判断,首先必须学会关系式、逻辑表达式的写法。因此本章先介绍关系运算符和关系表达式,逻辑运算符和逻辑表达式,再讲两个分支语句(

2、if 、 switch)的功能及应用。,5.2关系运算符和关系表达式,所谓“关系运算”实际上就是“比较运算”,即将两个数据进行比较,判定两个数据是否符合给定的关系。 例如,“a b”中的“”表示一个大于关系运算。如果a的值是5,b的值是3,则大于关系运算“”的结果为“真”,即条件成立;如果a的值是2,b的值是3,则大于关系运算“”的结果为“假”,即条件不成立。,5.2.1 关系运算符及其优先次序,1关系运算符 C语言提供6种关系运算符: (大于), =(大于或等于), =(等于), !=(不等于) 注意:在语言中,“等于”关系运算符是双等号“= =”,而不是单等号“= ”(赋值运算符)。 2优

3、先级 (1)在关系运算符中,前4个优先级相同,后2个也相同,且前4个高于后2个。,5.2.2 关系表达式,(2)与其它种类运算符的优先级关系是: 关系运算符的优先级,低于算术运算符,但高于赋值运算符。 例如:ca+b 等价于 c(a+b) 算术运算符 (高) a=bc 等价于 a=(bc) 赋值运算符 (低) 5.2.2 关系表达式 1关系表达式的概念 所谓关系表达式是指,用关系运算符将两个表达式连接起来,进行关系运算的式子。例如,下面的关系表达式都是合法的: ab, a+bc-d, (a=3)=b,关系表达式,2关系表达式的值逻辑值(非“真”即“假”)。 由于语言没有逻辑型数据,所以用整数“

4、”表示“逻辑真”,用整数“”表示“逻辑假”。 例如,假设n1=3,n2=4,n3=5,则: (1)n1n2的值=0。 (2)(n1n2)!=n3的值=1。 (3)n1=0”。如果需要描述“x=0”、同时“x10”,就要借助于逻辑表达式了。,5.3 逻辑运算及其表达式,5.3.1 逻辑运算及其优先次序 逻辑运算符及其运算规则 (1)C语言提供三种逻辑运算符: & 逻辑与(相当于“同时”) | 逻辑或(相当于“或者”) ! 逻辑非(相当于“否定”),逻辑运算规则,(2)运算规则 &:当且仅当两个运算量的值都为“真”时,运算结果为“真”,否则为“假”。(有0得0,全1得1) | :当且仅当两个运算量

5、的值都为“假”时,运算结果为“假”,否则为“真”。(有1得1,全0得0) ! :当运算量的值为“真”时,运算结果为“假”;当运算量的值为“假”时,运算结果为“真”。(0变1,1变0),逻辑运算优先级,例如,假定x=5,则(x=0) & (x5)的值为“假”。 2逻辑运算符的运算优先级 (1)逻辑非的优先级最高,逻辑与次之,逻辑或最低,即: !(非) &(与) |(或) (2)与其它种类运算符的优先关系 ! 算术运算 关系运算 & | 赋值运算,例题:,例如: (ab) 则执行 b=a=!a语句后,b的值是什么? 分析:应先!a=0 再计算a=!a的值是0 再计算b的值是0,5.3.2 逻辑表达

6、式,1逻辑表达式的概念 所谓逻辑表达式是指,用逻辑运算符将1个或多个表达式连接起来,进行逻辑运算的式子。在C语言中,用逻辑表达式表示多个条件的组合。 例如: (ab)&(xy)|(a=1 num31的值=1。,逻辑表达式,3说明 (1)逻辑运算符两侧的操作数,除可以是和非的整数外,也可以是其它任何类型的数据,如实型、字符型等。 (2)在计算逻辑表达式时,并不是所有的逻辑运算符都被执行,只有在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。(即并不是所有的表达式都被求解)。换句话说: 对于逻辑与运算,如果第一个操作数被判定为“假”,系统不再判定或求解第二操作数。 例如:(m=ab)

7、& (n=cd) 当a=1,b=2,c=3,d=4,m和n原值为1,由于”ab”的值为0,因此m=0,而“n=cd”不执行,所以n的值不是0而仍保持原值1。,逻辑表达式, 对于逻辑或运算,如果第一个操作数被判定为“真”,系统不再判定或求解第二操作数。 例如,假设n1=2、n2=1、n3=3、n4=4、x=0、y=1,则求解表达式“(x=n1n2) | (y=n3n4)”后,x的值变为1,而y的值不变,仍等于1。这点请读者注意!,5.4 if语句,5.4.1 if语句的三种格式 1、第一种格式 格式:if (表达式) 语句组 功能:首先计算机表达式的值,若值为“真”(非0),则执行语句组;表达式

8、的值为“假”(0),则直接转到此if语句的下一条语句去执行。其流程图如图5-1(a)所示. (1)if语句中的“表达式”必须用”( )”括起来。 (2)当if下面的语句组,仅由一条语句构成时,可不使用大括号,但是语句组由两条以上语句构成,就必须用大括号” ”括起来构成复合语句。,if (表达式) 语句组执行过程:,例题:,例题5.1 比较两个数,按由大到小输出. /*例题源代码文件名:LT5_1.C*/ main() int a,b,x; scanf(“a=%d,b=%d”, ,a: 10,b: 20,x:,x: 10,a:20,b:10,例题5.1的运行结果,第一次运行: a=10,b=20

9、 (此行是运行从键盘输入的) 20,10 (这是输出结果) 第二次运行: a=30,b=5 30,5,Ifelse 语句,2、第二种格式 if(表达式) 语句组1; else 语句组2; 功能:首先计算机表达式的值,若值为“真”(非0),则执行语句组1;表达式的值为“假”(0),则执行语句组2。其流程图如图5-1(b),Ifelse 语句执行过程,例题:,例题5.2 输入任意三个整数num1、num2、num3,求三个数中的最大值。 main() int num1,num2,num3,max; printf(“Please input three numbers:”); scanf(“%d,%

10、d,%d”,例题:,printf(“The three numbers are:%d,%d,%dn”,num1,num2,num3); printf(“max=%dn”,max); 运行Please input three numbers:6 ,9 ,13 结果 max=13 此程序首先num1与num2中的值比较大者进入max变量(用ifelse格式),再用较大者max 与num3进行比较,如num3大于max,则num3的值给max,否则保持原max的值。,If语句格式3,3、第三种格式: if (表达式1) (语句组1) else if (表达式2) (语句组2) else if (表达

11、式3) (语句组3) else if (表达式n) (语句组n) else (语句组 n+1),If语句格式3的执行过程图,例题:,if (score89) grade=5 else if(score 74) grade=4; else if(score 59) grade=3; else grade=2;,5.4.2 较复杂的条件表达式分支程序,例题5.3判别某一年是否为闰年。判断闰年的条件为下面二者之一: 能被4整除,但不能被100整除。 能被400整除。 main() int year; printf(“Please input the year:“); scanf(“%d“, ,例题5

12、.3运行结果,运行: 1989 1989 is not a leap year. 2000 2000 is a leap year. 此例题首先输入一个年份,用if判断条件(year%4=0 & year%100!=0)|(year%400=0)先算&运算,后计算|或运算。表示如果某年能被4整除,但不能被100整除,或者能被400整除,则此年为闰年,否则不是闰年。,5.4.3非关系或逻辑表达式构成的条件表达式分支程序,if后面圆括号中的表达式的类型不限于逻辑/关系表达式,可以是任意的C语言的有效的表达式(如赋值表达式,算术表达式等),因此也可以是作为表达式特例的常量或变量。,例题5.4if语句

13、后面圆括号中的表达式为赋值表达式的应用举例。 /*例题源代码文件名:LT5_4.C*/ main() int s; if (s=2) printf(“hello”); else printf(“error”); 运行结果: hello,例题解析,解析: 例题5.4中的条件表达式是一个赋值表达式,s=2则赋值表达式的值是2,if(2)其中的2表示为真,执行printf(“hello”);本程序中的printf(“error”);无论如何都不会被执行。,例题5.5 if语句后面圆括号中的表达式为一个变量(即是一个最简单的表达式)的应用。 main() int x,y; scanf(“%d”, ,运

14、行结果: 输入:3 y=1 输入:0 y= -1 本程序中if(x)如果x为非0数,表示真执行y=1; 如果x为0则表示假,执行y= -1; 现把程序中if(x)改成if(x!=0),这样虽然条件表达式写法不同,但是完成的功能是相同的。,5.4.4 if语句的嵌套,从前面的例子可以看出:一条if语句只能区分给定问题的两个方面,当供选择的情况较多时,可采用if语句的嵌套,所谓if语句的嵌套是指在if语句中又包含一个或多个if语句。,例题5.6 if 语句的嵌套应用,main() int a,b; scanf(“%d%d”, /*此else与距它最近的if(ab)配对*/ ,运行结果: 第一次运行

15、 52 ab 第二次运行 39 ab 在嵌套时内嵌的if语句既可以嵌套在if子句中,也可以嵌套在else子句中,此程序的内层的if语句嵌套在外层的if语句的else子句中。 if与else的匹配原则:与在它上面、距它最近、且尚未匹配的if配对。,5.4.5 条件运算符,1一般格式: 表达式1?表达式2:表达式3 条件表达式中的“表达式1”、“表达式2”、“表达式3”的类型,可以各不相同。 2运算规则 如果“表达式1”的值为非0(即逻辑真), 则运算结果等于“表达式2”的值;否则,运算结果等于“表达式3”的值。 如: x=ab ? a : b 当a=2 b=1 x=2,条件运算符,3运算符的优先级与结合性 条件运算符的优先级,高于赋值运算符,但低于关系运算符和算术运算符。其结合性为“从右到左”(即右结合性)。 如: x= ab? a : (cd ? c : d) 当a=1 b=2 c=3 d=4 x=4,例题,例题5.7从键盘上输入一个字符,如果它是大写字母,则把它转换成小写字母输出;否则,直接输出。 main() char ch; printf(“Input a character: “); scanf(“%c“, ,运行结果: F ch=f 由于大写字母的ASC

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

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