《C语言程序设计教程(第二版)》-徐新华-电子教案 第04章 选择结构程序设计

上传人:E**** 文档编号:89400339 上传时间:2019-05-24 格式:PPT 页数:53 大小:518.50KB
返回 下载 相关 举报
《C语言程序设计教程(第二版)》-徐新华-电子教案 第04章 选择结构程序设计_第1页
第1页 / 共53页
《C语言程序设计教程(第二版)》-徐新华-电子教案 第04章 选择结构程序设计_第2页
第2页 / 共53页
《C语言程序设计教程(第二版)》-徐新华-电子教案 第04章 选择结构程序设计_第3页
第3页 / 共53页
《C语言程序设计教程(第二版)》-徐新华-电子教案 第04章 选择结构程序设计_第4页
第4页 / 共53页
《C语言程序设计教程(第二版)》-徐新华-电子教案 第04章 选择结构程序设计_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《《C语言程序设计教程(第二版)》-徐新华-电子教案 第04章 选择结构程序设计》由会员分享,可在线阅读,更多相关《《C语言程序设计教程(第二版)》-徐新华-电子教案 第04章 选择结构程序设计(53页珍藏版)》请在金锄头文库上搜索。

1、2019/5/24,1,第4章 选择结构程序设计,选择结构程序设计,要解决两个问题: (1)选择条件如何表示:关系/逻辑表达式 (2)实现选择结构语句: if、switch语句 教学目的: 掌握关系和逻辑运算,if语句、switch语句,选择结构程序设计。,2019/5/24,2,教学内容: 4.1 关系运算及其表达式 4.2 逻辑运算及其表达式 4.3* if语句 4.4* switch语句 4.5 选择结构程序设计 本章要点 本章作业与上机实践,2019/5/24,3,4.1 关系运算及其表达式,关系运算将两个数据进行比较,判定是否符合给定的关系。 例如,“a b”中的“”,表示一个大于关

2、系: 如果a=5、b=3,则大于关系成立; 如果a=2、b=3,则大于关系不成立。,2019/5/24,4,4.1.1 关系运算符及其优先次序 1关系运算符 (大于), =(大于等于) =(等于), !=(不等于) 2与其它种类运算符的优先关系 算术运算符 关系运算符 赋值运算符 思考:在混合运算时,如何增强程序可读性(明确运算的优先关系)?,不是 “= ”,2019/5/24,5,4.1.2 关系表达式 1概念用关系运算符,将两个表达式连接起来的式子。 例如:a b,a = b ,a + b c - d 2关系表达式的值逻辑真 / 逻辑假 如果关系成立,则表达式的值为逻辑真; 如果关系不成立

3、,则表达式的值为逻辑假。 语言没有逻辑型数据,用整数表示“逻辑真”,用整数表示“逻辑假”。,2019/5/24,6,假设num1=3,num2=4,num3=5,则: (1) num1 num2 := 0 (2) (num1 num2) != num3: = 1 (3) num1 num2 num3 := 1 思考:任意改变num1或num2的值,会影响整个表达式的值吗?为什么? x(1,100):1x100 ? 返回,2019/5/24,7,4.2 逻辑运算及其表达式,关系表达式只能描述单一条件。如果需要同时描述多个条件时,就要借助于逻辑表达式。 4.2.1 逻辑运算及其优先次序 逻辑运算符

4、 &:逻辑与(相当于“同时”) | :逻辑或(相当于“或者”) ! :逻辑非(相当于“否定”) 例如:(x=0) & (x5) ,! (x= =0), (year%4= =0) & (year%100!=0) | | (year%400= =0),2019/5/24,8,2. 运算规则 (1)&:当且仅当两个运算对象的值都为“逻辑真”时,结果为“逻辑真”,否则为“逻辑假”。 运算口诀:同时为真才为真,否则为假。 (2) | :当且仅当两个运算对象的值都为“逻辑假”时,结果为“逻辑假”,否则为“逻辑真”。 运算口诀:同时为假才为假,否则为真。,2019/5/24,9,(3) ! :当运算对象的值

5、为“逻辑真”时,结果为“逻辑假”;当运算对象的值为“逻辑假”时,结果为“逻辑真”。 运算口诀:取反。,2019/5/24,10,4.2.2 逻辑表达式 1. 概念用逻辑运算符,将若干表达式连接起来的式子。 例如,逻辑表达式(year%4= =0) & (year%100!=0) | (year%400= =0),判断year是否闰年。 2逻辑表达式的值逻辑真 /逻辑假,2019/5/24,11,3非逻辑值运算对象的真/假判定和非 逻辑运算的对象要求是逻辑值,而语言中没有逻辑型数据。 C语言约定: ,判定为“逻辑假” 非逻辑值运算对象= 非,判定为“逻辑真”,2019/5/24,12,假设num

6、=12,则: (1)!num: = (2) (num = 1) & (num 31) := 1。,2019/5/24,13,4说明 (1)运算对象的数据类型:除整型外,也可以是实型、字符型等其它任何类型数据。 (2)子表达式计算:只有在必须计算下一个子表达式才能求解时,才计算;否则,不再计算。 换句话说: 对于逻辑与运算,如果第1个对象被判定为“逻辑假”,系统不再计算第2个对象(因为无论真假,都不影响整个表达式的结果)。,2019/5/24,14,对于逻辑或运算,如果第1个对象被判定为“逻辑真”,系统不再计算第2个对象。 思考:假设n1、n2、n3、n4、x、y的值分别为1、2、3、4、1、1

7、,求解表达式“(x = n1 n2) & (y = n3 n4)”后,x、y的值=?,2019/5/24,15,答案: x=,y=1 分析: (1) n1 n2: = 0 (2) x = n1 n2 :x = 0 (3) (x = n1 n2) := 0 (4) &:(y = n3 n4) 不再计算,y保持原值,即y=1。 返回,2019/5/24,16,4.3* if语句,案例4.1 输入3个整数num1、num2、num3,求最大值。 算法设计要点: (1) 任取一个数预置为max(最大值); (2) 用其余的数num依次与max比较:如果num max,则max num 。 比较完所有的

8、数后,max中的数就是最大值。,2019/5/24,17,#include “stdio.h” #include “conio.h” void main() int num1, num2, num3, max; printf(“Please input three numbers:”); scanf(“%d,%d,%d”, ,2019/5/24,18,案例4.2编写一程序, 判断一个年份year(4位十进制数)是否闰年。 闰年的条件是:能被4整除、但不能被100整除,或者能被400整除。,2019/5/24,19,算法设计要点: (1)如果X能被整除,则余数为,即如果X % Y = ,则表示能

9、被整除。 (2)根据闰年的条件可知: “能被4整除、但不能被100整除” 表示为:(year % 4 = 0) & (year % 100 != 0); “能被400整除” 表示为:year % 400 = 0; 两个条件之间是逻辑或的关系:( (year % 4 = 0) & (year % 100 != 0) | (year % 400 = 0)。,2019/5/24,20,#include “stdio.h“ #include “conio.h“ void main() int year; printf(“Please input a year:“); scanf(“%d“, ,2019

10、/5/24,21,1if语句的一般格式 if ( 表达式 ) 语句组1; else 语句组2; ,必须用“(”和“)”括起来,if语句的一部分,必须与if配对使用。,语句组仅由一条语句构成时,也可不使用复合语句形式(即去掉花括号),2019/5/24,22,2if语句的执行流程 (1)缺省else子句( 图4.1 ) 当“表达式”的值:非0(逻辑真) ,执行语句组1;否则,直接转向执行下一条。 例如,案例4.1。,2019/5/24,23,(2)指定else子句(图4.2 ),当“表达式”的值:非0(逻辑真),执行语句组1,然后跳过语句组2,转向下一条语句;否则,执行语句组2。 例如,案例4.

11、2。,2019/5/24,24,3if语句的嵌套匹配原则 (1) if语句的嵌套在“语句组1”或(和)“语句组2”中,又包含有if语句的情况。 (2)else子句与if的匹配原则:与在它上面、距它最近、且尚未匹配的if配对。 建议:将内嵌的if语句,一律用花括号括起来。,2019/5/24,25,4说明 (1)if后面的“表达式”:除关系(逻辑)表达式外,也允许是整型、实型、字符型等其它类型的数据。 (2)在语句组1和语句组2中,每个语句后面的分号不可少! 例如: if (num1 num2) max = num1 ; else max = num2 ; 返回,2019/5/24,26,4.4

12、* switch语句,案例4.4 将1个百分制成绩score,按下列原则输出其等级:score=90,A;80=score90,B;70= score80,C;60score70,D;score60,E。 #include “stdio.h“ #include “conio.h“ void main() int score, grade; printf(“Input a score(0100): ”); scanf(“%d”, /*将成绩整除10,转化成case标号*/,2019/5/24,27,switch (grade) case 10: case 9: printf(“grade=An“

13、); break; case 8: printf(“grade=Bn“); break; case 7: printf(“grade=Cn“); break; case 6: printf(“grade=Dn“); break; case 5: case 4: case 3: case 2: case 1: case 0: printf(“grade=En”); break; default: printf(“The score is out of range!n”); getch(); ,2019/5/24,28,1一般形式 switch( 表达式 ) case 常量表达式1:语句组1;br

14、eak; case 常量表达式2:语句组2;break; case 常量表达式n:语句组n ;break; default:语句组n +1; ,2019/5/24,29,2执行流程指定break语句,2019/5/24,30,(1)当 “表达式”的值,与某个case后面的“常量表达式”的值相同时,就执行该case后面的语句(组); 当执行到break语句时,转向执行switch语句的下一条。 (2)如果没有任何一个case后面的“常量表达式”的值,与“表达式”的值匹配,则执行default 后面的语句(组)。 然后,再执行switch语句的下一条。,2019/5/24,31,3执行流程缺省br

15、eak语句 case后面的常量表达式仅起语句标号作用,并不进行条件判断。 缺省break语句时,系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,其执行流程如下图所示:,2019/5/24,32,2019/5/24,33,思考: 如果去掉案例4.4程序中所有break语句,输入成绩75,输出如何? 输出:grade=C grade=D grade=E The score is out of range!,2019/5/24,34,4说明 (1) “表达式”的类型:int、char和枚举型。 (2)每个case后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象。 (3)各case及default子句次序,不影响执行结果。 (4)多个case子句,可共用同一语句(组)。 在案例4.4中,case 10和case 9,case 5case 0。 返回,2019/5/24,35,4.5* 选择结构程序设计,案例4.7 已知某公司员工的保底薪水为500,某月所接工程的利润profit(整数)与利润提成的关系如下(单位:元): profit1000 没有提成; 1000profit2000 提成10%; 2000profit5000 提成15%; 5000profit10000 提成20%; 10000profit 提成25%。,2019/5/24,36,

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

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

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