收藏 分享(赏)

VCCH05.ppt

上传人:kuailexingkong 文档编号:1704309 上传时间:2018-08-19 格式:PPT 页数:56 大小:2.11MB
下载 相关 举报
VCCH05.ppt_第1页
第1页 / 共56页
VCCH05.ppt_第2页
第2页 / 共56页
VCCH05.ppt_第3页
第3页 / 共56页
VCCH05.ppt_第4页
第4页 / 共56页
VCCH05.ppt_第5页
第5页 / 共56页
点击查看更多>>
资源描述

1、封面,版权声明,版权声明,本电子教案版权所有人为姜学锋 20012005,西北工业大学计算机学院 未经授权,不得复制、修改、商业发行,本章目录,选择结构程序设计,5.1 关系运算符和关系表达式 5.2 逻辑运算符和逻辑表达式,5.3 if语句 5.4 switch语句 5.5 条件判断程序设计, 教学要求 本章小节 专题目录,5.1 关系运算符和关系表达式,5.1.1 关系运算符1. C语言提供6种关系运算符: 大于 = 大于或等于 = = 等于(相等) != 不等于(相等)2. 优先级:(1) 优先级相同, 优先级相同。(2) 优先级比 优先级高。(3)关系运算符的优先级比算术运算符的优先级

2、低,比逻辑运算符的优先级高。,5.1.1 关系运算符,圆括号运算符 () 算术运算符 、(类型)、 关系运算符 、=、! 逻辑运算符 !、&、| 赋值运算符 、&、| 逗号运算符 ,,高,低,5.1.2 关系表达式,3. 关系运算符是双目运算符,结合性是“自左向右”5.1. 关系表达式1. 由关系运算符连接两个表达式的式子称为关系表达式。 例如: ab,a+b = c+d 相当于 (a+b) = (c+d)(a=3) (b=5),a != b2. 关系表达式的值:关系表达式的值是逻辑型的结果,只有两个值,即“真”与“假”,或者“1”与“0。其内存类型为 unsigned int3. 关系运算符

3、两边的表达式可以为C语言的任意表达式,C语言根据两边的数学关系比较情况来确定关系表达式的值。,5.1.2 关系表达式,关系表达式的值是在内存中的存储如下:关系表达式的值 内存形式unsigned int“1” 任何非零数据“0” 零 例如: int a,b=2,c=1 ;a = (bc) ; a = (cb) ;a的内存值为非零数据值 a的内存值为0 如果在Turbo C中,a的非零值为1。需要记住,“真”永远大于“假”, 例如: int a=1,b=2,c=3,d=4,e ;e = (a (cd)e非零值为1,5.1.2 关系表达式,4. 关系运算表达式的值输出使用整型类型输出,其结果不是整

4、型数据的1就是0。 例如: int a=1,b=2;printf(“%dn”,ab) 输出值为0例如: float a=3.14,b=9.8;printf(“%dn”,ab) 输出值为1,参考资料,要得到一个关系表达式的值,可以这样做:1. 首先将C程序转换成汇编程序(Borland C+ 3.1提供的功能) 2. 分析汇编程序就知道了,对于本例a的非零值为1。,; int a, b=2, c=1 ;mov dx,2mov bx,1; a = (bc) ;cmp dx,bxjle short 186mov ax,1jmp short 1114 186:xor ax,ax 1114:mov wo

5、rd ptr bp-2,ax,FAQ答疑,1. abc在数学上是集合的表达,而在C语言中是一个关系表达式,它是一个数值,不能象数学那样表达集合的概念。 2. 在C程序中,abc被解释为比较a的值与(bc)的关系表达式的值。 abc在数学上被解释为那些小于a值,且大于c值的值均是b的值;这对于C语言来说是一个即包含关系运算,又包含逻辑运算的表达。 3. abc对初学者常常是一个陷阱,圈套就是你平常的数学习惯,而猎物就是你的生命值。,5.2 逻辑运算符和逻辑表达式,5.2.1 逻辑运算符1. C语言提供三种逻辑运算符: & 逻辑与(AND,数学上“且”的概念) | | 逻辑或(OR,数学上“或”的

6、概念) ! 逻辑非(NOT,数学上“非此”的概念)2. 优先级:(1)逻辑非的优先级高于逻辑与的优先级。(2)逻辑与的优先级高于逻辑或的优先级。(3)逻辑运算符的优先级比关系运算符的优先级低。3. 结合性:自左向右,5.2.1 逻辑运算符,4. “&”和“| |”是双目运算符,“!“是单目运算符。其运算方法按如下的逻辑真值表来计算。,a b !a !b a & b a | | b 真 真 假 假 真 真 真 假 假 真 假 真 假 真 真 假 假 真 假 假 真 真 假 假,5.2.2 逻辑表达式,5.2.2 逻辑表达式1. 用逻辑运算符将表达式连接起来的式子为逻辑表达式。 例如:a & b

7、,(ab) | (cb) & bc)2. 逻辑表达式的值:逻辑表达式的值是逻辑型的结果,只有两个值,即“真”与“假”,或者“1”与“0。其内存类型为 unsigned int3. 逻辑运算符两边的表达式可以为C语言的任意表达式,逻辑运算符总是将其两边(双目)或一边(单目)的表达式的值理解成逻辑值,理解时按下面的规则进行:(1)如果表达式值不为0,则其逻辑值为“真”。(2)如果表达式值为0,则其逻辑值为“假”。,5.2.2 逻辑表达式,例如:int a=4 ; a printf(“%dn”,(!(ab) 输出值为1,FAQ答疑,1. 逻辑值在C语言的内存按unsigned int处理,因而逻辑值

8、的输入可以用整型类型做到。 2. 通常,逻辑结果不是用数值来表示的,于是在C程序中要增加用别的形式(例如:字符T表示1,字符F表示0)来表示,下面就是其中一例:3. 逻辑输出结果也可以用别的形式来表示,在输出时根据其“1”和“0”选择输出结果。,int a,b,sum;a = getchar()a = (a=Y) | (a=y);,5.2.2 逻辑表达式,5. 逻辑表达式与别的表达式混合运算时,应根据优先级别和结合性来统一考虑。 例如: 53 & 2 | | 83) & 2 | | (8 3 为 1,1 & 2 | | 8 4 !0(2) 1 & 2 为 1, 1 | | 8 4 !0(3)

9、!0 为 1, 1 | | 8 4 1(4) 4 1 为 3, 1 | | 8 3(5) 8 3 为 0, 1 | | 0(6) 1 | | 0 为 1运算值为1。注意:当C语言程序在解析表达式时,如果某运算符的运算顺序并不影响整个表达式的最后结果,则编译器可以“暂时忘记”运算符的优先级别的要求。本例中的4 !0的处理即是如此。其正确的顺序以编译出的汇编程序为结果。,5.2.2 逻辑表达式,6. 逻辑表达式“a & b”实质的运算(机器指令)可以用下图表示:,a成立,设置1,设置0,Y,N,b成立,Y,N,计算a,计算b,5.2.2 逻辑表达式,7. 逻辑表达式“a | | b”实质的运算(机

10、器指令)可以用下图表示:,a成立,设置0,设置1,Y,N,b成立,Y,N,计算a,计算b,5.2.2 逻辑表达式,由于逻辑表达式(“&”,“| |”)的求解实际上是由机器指令的跳转等指令形成的,因而当在顺序求解表达式时,只要求解的结果已经符合跳转逻辑,则该表达式后续的步骤就不再执行: 例如: a & b & c如果执行时a的结果为“假”,则b、c不会被执行。 如果执行时a的结果为“真”和b的结果为“假”,则c不会被执行。 例如: a | | b | | c如果执行时a的结果为“真”,则b、c不会被执行。 如果执行时a的结果为“假”和b的结果为“真”,则c不会被执行。 在程序设计时应给予注意。,

11、5.3 if语句,5.3.1 if 语句1. 描述:判定给定条件,根据判定结果(逻辑值)来决定相应的操作。2. 语法: if (表达式) 语句1 ; if (表达式) 语句1 ;else 语句2 ;3. 注释:形式 的if 语句,判定表达式是否为“真”(即非零),如果为“真”,则执行语句1,然后再继续执行下一语句;否则继续执行下一语句。形式 的if 语句,判定表达式是否为“真”,如果为“真”,则执行语句1;否则执行语句2。两种操作执行后继续执行下一语句。,5.3.1 if语句,4. if 语句中的表达式、语句说明if 语句中的表达式的值应该是逻辑值,因而表达式通常应是关系表达式和(或)逻辑表达

12、式;如果是其它表达式或非unsigned int类型的数据将被自动进行类型转换。转换后的数据按非0和0当成逻辑值。 例如: if (“This is c program”) printf(“run if”); 指针类型if (1.678) printf(“run if”); 浮点类型if (A) printf(“run if”); 字符类型if 语句中的语句可以是: 任意一个C语句,后面有分号。 一个复合C语句,后面没有分号。,5.3.1 if语句,5. if 语句的流程图表示(1) 形式 的if 语句 形式 的if 语句,表达式为“1”,语句1,Y,N,表达式为“1”,语句2,语句1,Y,N

13、,5.3.2 if 语句的其它形式,5.3.2 if 语句的其它形式由于if 语句中的语句1(或语句2)可以是任何的C语句,因而也可以再是一个if 语句,从而有下面不同的if 语句形式。1. 连续条件判定:语法: if (表达式1) 语句1 ;else if (表达式2) 语句2 ;else if (表达式3) 语句3 ;else if (表达式4) 语句m ;else 语句n ;从外到里析出相应的if 语句。,5.3.2 if 语句的其它形式,2. 嵌套的if 语句:语法: if (表达式1) if (表达式11) 语句1 ;else 语句2 ;elseif (表达式12) 语句3;else

14、 语句4 ;从外到里析出相应的if 语句,else 部分总是与其上最接近的if 语句配对。如果对应的if 语句没有else部分,则应用将这个if 语句“复合”起来,形成复合语句。,5.3.3 if 语句的风格,5.3.2 if 语句的风格C语言if 语句的Hungarian风格:1. if (表达式1) 语句1 ;2. if (表达式1) (内嵌的语句)3. if (表达式1) 语句1 ;else 语句2 ;,5.3.3 if 语句的风格,4. if (表达式1) (内嵌的语句)else (内嵌的语句)5. if (表达式1) else if (表达式2) else ,5.3.4 if 语法示

15、例,5.3.2 if 语句的语法示例:1. if (xy) printf(“XYn”);2. if (xy)printf(“XYn”);else printf(“Xy)t = x ; x = y ; y = t ; ,两个数按大小比较的技巧,5.3.4 if 语法示例,4. if (b = = 0)printf(“Divided by 0n”);else printf(“a/b=%dn”.a/b);4. 已知:a=2,b=1,c=0,d=4if (a=b)&(b=c)&(c=d)printf(“a=%d,b=%d,c=%dn”,a,b,c);elseprintf(“a=%d,b=%d,d=%d

16、n”,a,b,d);,5.3.4 if 语法示例,例5-1 P93,两个实数排序输出 main() float a , b , t ;scanf(“%f,%f“ , ,5.3.4 if 语法示例,例5-2 P93,输入3个数,由小到大排序输出 main() float a , b , c , t ;scanf(“%f,%f,%f“ , ,5.3.4 if 语法示例,例5-3 P95,编写正确的判断逻辑 main() int x , y ;scanf(“%d“ , ,x0,y=0,y=-1,N,Y,N,Y,y=1,x=0,5.3.5 条件运算符,5.3.5 条件运算符1. 条件运算符:“ ? :

17、”构成条件运算符。2. 条件表达式语法: ? : 条件表达式的执行是:先求解表达式1的值,如果表达式1的值为“真”则求解表达式2,并以表达式2的值作为整个表达式的值;否则,求解表达式3,并以表达式3的值作为整个表达式的值。 例如:(ab)?a :b,当ab时,整个表达式值为a;否则为b。3. 条件运算符是唯一的三目运算符,其结合性是“自右向左”。 例如:ab ? a : cd ? c : d,相当于 ab ? a : (cd ? c : d),5.3.5 条件运算符,a=102 , b=721 , c = 111 , d= 444d = a c ? cb ? a=c :a=b : ad ? a

18、=d :a=a 4. 条件表达式在某种程度与下面的if 语句相似if (表达式1) 变量=表达式2 ;else 变量=表达式3 ; 但条件表达式是一个表达式,而if 语句是语句,相互替换时不一定能得到完全相同的结果。5. 条件表达式中的 和,由的条件决定得到执行。 例如:a=1,b=2,c=3 ab ? c *=a : c=*b ;,5.3.5 条件运算符,例5-4 P99,大小写字母转换算法的最简程序。 main() char ch ;scanf(“%c“ , ,5.4 switch语句,5.4.1 switch 语句1. 描述:根据给定表达式的值,依情况执行多分支选择操作。2. 语法:sw

19、itch (表达式) case (常量表达式1) :语句序列1 ;case (常量表达式2) :语句序列2 ;case (常量表达式n) :语句序列n ;default :语句m ;,5.4.1 switch语句,3. 注释:(1)switch语句中的(表达式)可以为任何语言表达式、类型。当(表达式)的值与其后某个case常量表达式的值相匹配(相等)时,则执行该case后面的语句;若(表达式)的值与所有的case常量表达式的值都不匹配,则执行default后面的语句。(2)每个case常量表达式的值必须互不相同,否则会出现编译错误: Duplcated case = 重复的case(3)cas

20、e常量表达式和default出现的顺序无关紧要。(4)case常量表达式和相当于一个C语句标号,所以,C语言并不在运行时执行case常量表达式的计算。当执行switch语句时,根据后面(表达式)的值找到匹配的C语句标号,程序从这个C语句标号后面的语句执行下去。这时,语句序列1n,m的整个序列相当于有了许多选择的标号。,5.4.1 switch语句,(5)break语句 可以终止switch语句的执行,即当程序执行switch语句序列时遇到break语句,则程序结束switch语句序列的执行,转到switch语句的下一语句执行。(6)多个case语句可以共用一个C语句序列 。,5.4.1 swi

21、tch语句,switch语句图示:语句序列1语句序列2语句序列3语句序列n语句序列m,case标号 含义为“从这里”执行下去,顺序执行,5.4.1 switch语句,4. Hungarian风格:switch (表达式) case 常量表达1 : 语句序列1Acase 常量表达2 : 语句2A ;case 常量表达n : 语句序列ndefault : 语句序列m,5.4.1 switch语句,5. 语法示例:switch (ch)case y :case Y : printf(“Your ACK is Yesn”);break;case n :case N : printf(“Your ACK

22、 is Non”);break;case 0 : printf(“Your CHOICE is Menu 0n”);break;case 1 : printf(“Your CHOICE is Menu 1n”);break;default : printf(“Your ACK is Errorn”);printf(“Please repeatn”);break;,5.4.1 switch语句,6. switch语句和if 语句的功能比较(1)两语句均是判定条件,然后执行相应的C语句。(2)一个switch语句可以判定多个条件,而if 语句只能判定一个条件。(3)switch语句只能判定“相等”

23、概念的条件,而if 语句可以判定“区间”概念的条件。(4)不同条件的执行在switch语句中有多种顺序、组合上的不一样,而if 语句是按“非此即彼”执行的。,5.5 条件判断程序设计,5.5.1 条件判断程序的设计方法条件判断是程序的控制指令,它影响程序的流程顺序。而一定的流程顺序可能又是程序算法是否正确的核心,所以条件判断是否正确是很重要的。条件判断通常是程序的一部分,因而其设计方法应是部分的设计方法。1. 分析出应用正确的条件判断逻辑关系。2. 找出条件判断的“拐点”,并以该点作为调试依据。3. 设计能够遍历所有条件的数学方法,调试程序。,5.5.2 条件判断程序举例,5.5.2 条件判断

24、程序的设计举例1. 判别某年是否是是闰年。先按顺序程序设计分析:1. 分析例1的输入量为某年、判别出闰年的信息为输出量。2. 根据实际经验,“年”应为整数(数学上的),由一般情况下的“年”的概念可以确定其在 0,9999范围内,所以,“年”定为int型。再按条件判断程序设计分析:3. 闰年的判断逻辑:(1)能被4整除,(并且)但不能被100整除是闰年:(year %4 = 0)& (year %100 !=0 ),5.5.2 条件判断程序举例,(2)能被4整除,(并且)又能被400整除是闰年:(year %4 = 0)& (year %400 =0 )(3)(1),(或者)(2)满足均是闰年:

25、(1)的逻辑值 | | (2)的逻辑值 根据布尔(Boolean)代数的原理:(A AND B) OR (A AND C)=A AND (B OR C) 可以得到上面逻辑关系的最简式:(year %4 = 0)& ( (year %400 =0 )| (year %100 !=0 ) 则程序中只要计算上式是否为“真”,即能够判断闰年。,5.5.2 条件判断程序举例,例5-5 P100,判别某年是否是是闰年。,例5-6 P101,求ax2+bx+c=0方程的根。,例5-7 P103,将一个范围的判断转换为“相等条件”判断的程序例子,正文结束,欢迎体验,开放资源电子教案,C语言,2005版,本章小

26、结关键字,一、本章所学的C语言关键字:,已学习 本章 未学习,auto const double float int short struct unsigned,break continue else for long signed switch void,case default enum goto register sizeof typedef volatile,char do extern if return static union while,本章小结语法,二、本章有关的C语言语法:1. C语句(1)if语句(2)switch语句2. 表达式(1)关系运算符和关系表达式(2)逻辑运算

27、符和逻辑表达式(3)条件运算符和条件表达式,本章小结学习技巧,学习技巧:进行选择结构程序设计的关键在于设计选择逻辑,选择逻辑通常表现为比较或若干个比较的条件判断。使用流程图来描述这部分程序,无论在程序设计,还是程序阅读、程序调试,都会大大提高正确性和效率。初学者应努力掌握逻辑运算规律和逻辑运算的简化方法,熟练各种选择逻辑下if语句和switch语句的应用。选择逻辑只有两种可能:真与假,或“0”和非“0”,但加上逻辑运算以及这些逻辑的排列组合,实际形成的选择逻辑会是多种多样的,了解布尔代数对设计选择逻辑有较大的帮助。switch语句是一种特殊的嵌套if语句,在某些应用中它优化了嵌套if语句层数多

28、的缺点;值得注意的是,switch语句的选择逻辑只有“相等判断“,而if语句的选择逻辑则要丰富得多。,教学要求学习要点,学习要点:掌握关系运算符、逻辑运算符的运算特点,熟练逻辑运算规律,学会正确的比较关系运算和逻辑运算,了解各种运算符的优先级和结合性;掌握关系表达式和逻辑表达式;掌握if语句、if-else语句、嵌套的if-else语句的语法和用途,掌握switch语句的语法和用途,学会区别if语句和switch语句的应用,从而设计正确的条件判断选择程序;掌握条件运算符和条件表达式。,教学要求知识点,知识点: 关系运算符和关系表达式,逻辑运算符和逻辑表达式,逻辑运算规律; if语句及if语句各

29、种形式;switch语句;条件运算符和条件表达式。 编写条件判断选择结构程序的能力,熟练使用if语句及其各种形式和switch语句。 熟练两个数交换、三个数排序的算法和思路。,版权信息,版权信息,计算机基础教育系列丛书之 大学计算机基础、C语言、 Visual C+语言、 Foxpro数据库、Vsiual Foxpro数据库 、Vsiual Basic语言 、汇编语言 、Java语言电子教案是由姜学锋编写。 20012005,西北工业大学计算机学院,版权所有。 未经许可,不能擅自对本教材进行复制、修改、商业分发等操作。版权为西北工业大学开放资源教学网络所有。 所有其它未声明产品及权益为其拥有者所有。,课间休息,专题目录,索引目录,补充材料,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报