收藏 分享(赏)

《C语言程序设计与数据结构》课件第04章.ppt

上传人:scg750829 文档编号:9127044 上传时间:2019-07-24 格式:PPT 页数:19 大小:1.42MB
下载 相关 举报
《C语言程序设计与数据结构》课件第04章.ppt_第1页
第1页 / 共19页
《C语言程序设计与数据结构》课件第04章.ppt_第2页
第2页 / 共19页
《C语言程序设计与数据结构》课件第04章.ppt_第3页
第3页 / 共19页
《C语言程序设计与数据结构》课件第04章.ppt_第4页
第4页 / 共19页
《C语言程序设计与数据结构》课件第04章.ppt_第5页
第5页 / 共19页
点击查看更多>>
资源描述

1、C语言程序设计与数据结构,第四章 选择结构,学习重点l if语句及switch语句的执行流程;l if语句及switch语句的灵活运用。,C语言程序设计与数据结构,4.1 关系运算和逻辑运算,C语言编译系统在给出逻辑运算结果时,会得出两个逻辑值(“真”和“假”)中的一个。以数值1代表“真”,以数值0代表“假”。但在判决一个量是否为真时,以非代表“真”,以0代表“假”。如已知x值为5,则x8不成立,表达式x8的值为“假”. 4.1.1 关系运算符和关系表达式 4.1.1.1 关系运算符及其结合性 关系运算是逻辑运算中比较简单的一种。所谓关系运算实际上是“比较运算”,将两个数进行比较,判断比较的结

2、果是否符合指定的条件。比较两个量的运算符称为关系运算符。 语言提供了以下6种关系运算符: 1) 大于 4) = 大于或等于 5) = 等于 6) != 不等于 注意:由两个字符组成的运算符之间不能有空格,如:=不能写成 = 。 关系运算符都是双目运算符,其结合性均为自左至右。在六个关系运算符中,前4个( ,= )的优先级相同,并高于后两个(=和!=,=和!=的优先级相同)。关系运算符、算术运算符和赋值运算符的优先级次序从高到低分别是:算术运算符、关系运算符、赋值运算符。,C语言程序设计与数据结构,4.1.1.2 关系表达式用关系运算符将两个表达式连接起来的式子称为关系表达式。关系表达式的一般形

3、式为: 表达式 关系运算符 表达式 说明:关系运算符两边的两个表达式自身可以是C语言中的任意合法表达式(如算术表达式,赋值表达式,也可以是关系表达式和马上就要学到的逻辑表达式)。 例如:a+bc-d、x3/2、a+1(bc)、a!=(c=d) 等。 关系表达式的值是逻辑值“真”和“假”,用整数值1和0表示。如:50的值为“真”,即为1。 (a=3)(b=5)由于35不成立,故其值为假,即为0。,C语言程序设计与数据结构,【例4.1】 main()char c=k;int i=1,j=2,k=3;float x=3e+5,y=0.85;printf(“%d,%dn“,a+5=k+1);print

4、f(“%d,%dn“,1j5,x-5.25=x+y);printf(“%d,%dn“,i+j+k=-2*j,k=j=i+5);解析:在本例中求出了各种关系运算符的值。字符变量是以它对应的ASCII码参与运算的。对于含多个关系运算符的表达式,如k=j=i+5,根据运算符的左结合性,先计算k=j,该式不成立,其值为0,再计算0=i+5,也不成立,故表达式值为0。,C语言程序设计与数据结构,4.1.2 逻辑运算符和逻辑表达式 4.1.2.1 逻辑运算符及其结合性 语言中提供了三种逻辑运算符:(1) & 逻辑与 (2) | 逻辑或 (3) ! 逻辑非 其中,“&”和“|”为双目运算符,即作用在前、后两

5、个运算对象上,如a&b,a|b。具有“左”结合性。“!”是单目运算符,作用在单个运算对象上,如,!a,具有“右”结合性。 三种运算符的优先级由高到低为: !(非)&(与)|(或) 逻辑表达式的值是逻辑“真”或逻辑“假”,用“1”或“0”来表示。 例如: a&b:当a和b都为“真”时,a&b的运算结果为“真”。 a|b:只要a,b中一个为“真”,a|b的结果就为“真”。 !a:如果a为“真”,则!a为“假”,如果a为“假”,则!a为“真”。 a和b的逻辑运算真值表如表4-1所示。,C语言程序设计与数据结构,4.1.2.2 逻辑表达式 逻辑表达式的一般形式为: 表达式 逻辑运算符 表达式 其中的表

6、达式可以又是逻辑表达式,从而组成了嵌套的情形。 例如: (a 本例中!x和!y分别为0,!x*!y也为0,故其输出值为0。由于x为非0,故!x的逻辑值为0。对x| i & j-3式,先计算j-3的值为非0,再求i & j-3的逻辑值为1,故x|i&j-3的逻辑值为 1。对ij&xy式,由于ij的值为1,而xy为0故表达式的值为1,0相与,最后为0,对i=5&c&(j=8)式,由于i=5为假,即值为0,该表达式由两个与运算组成,所以整个表达式的值为0。对于式x+ y|i+j+k由于x+y的值为非0,故整个或表达式的值为1。,C语言程序设计与数据结构,4.2 if语句,用if语句可以构成分支结构。

7、它根据给定的条件进行判断,以决定执行某个分支程序段。语言的if语句有三种基本形式。 4.2.1 if语句的三种形式 1. 第一种形式为基本形式:if格式:if (表达式) 语句 其语义是:如果表达式的值为真,则执行其后的语句, 否则不执行该语句。 【例4.3】输入两个整数,输出其中的大数。 main()int a,b,max;printf(“n input two numbers: “);scanf(“%d%d“, 解析:本例程序中,输入两个数a,b。把a先赋予变量max,再用if语句判别max和b的大小,如max小于b,则把b赋予max。因此max中总是大数,最后输出max的值。,C语言程序

8、设计与数据结构,2. 第二种形式为: if-else 格式:if (表达式) 语句1; else 语句2;其语义是:如果表达式的值为真,则执行语句1,否则执行语句2 。【例4.4】输入两个整数,输出其中的大数(改用if-else语句实现)。 main()int a, b;printf(“input two numbers: “);scanf(“%d%d“, 解析:用if-else语句判别a,b的大小,若a大,则输出a,否则输出b。,C语言程序设计与数据结构,3. 第三种形式为:if-else-if形式 前二种形式的if语句一般都用于两个分支的情况。 当有多个分支选择时,可采用if-else-i

9、f语句,其一般形式为: if(表达式1)语句1;else if(表达式2) 语句2;else if(表达式3) 语句3; else if(表达式m) 语句m;else 语句n; 其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。,C语言程序设计与数据结构,【例4.5】 #include“stdio.h“ main()char c;printf(“input a character: “);c=getchar();if(c=0 解析:本例要求判别键盘输入字符的类别。可以根据输入

10、字符的ASCII码来判别类型。由ASCII码表可知ASCII值小于32的为控制字符。在“0“和“9“之间的为数字,在“A“和“Z“之间为大写字母,在“a“和“z“之间为小写字母,其余则为其它字符。这是一个多分支选择的问题,用if-else-if语句编程,判断输入字符ASCII码所在的范围,分别给出不同的输出。例如输入为“g“,输出显示它为小写字符。,C语言程序设计与数据结构,在使用if语句中还应注意以下问题: 1) 在三种形式的if语句中,在if关键字之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。 例如:if(a=5) 语句;

11、 if(b) 语句; 都是允许的。只要表达式的值为非0,即为“真“。 如在: if(a=5); 中表达式的值永远为非0,所以其后的语句总是要执行的,当然这种情况在程序中不一定会出现,但在语法上是合法的。 又如有程序段:if(a=b)printf(“%d“,a);elseprintf(“a=0“); 本语句的语义是:把b值赋予a,如为非0则输出该值,否则输出“a=0“字符串。这种用法在程序中是经常出现的。 2) 在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。 3) 在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用

12、括起来组成一个复合语句。但要注意的是在之后不能再加分号。,C语言程序设计与数据结构,4.2.2 if语句的嵌套 当if语句中的执行语句又是if语句时,则构成了if 语句嵌套的情形。其一般形式可表示如下:if (表达式) if语句; 或者为if (表达式) if语句; else if语句; 在嵌套内的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。 例如:if(表达式1)if(表达式2)语句1;else 语句2; 其中的else究竟是与哪一个if配对呢? 。,C语言程序设计与数据结构,应该理解为:if(表达式1)if(表达式

13、2)语句1;else语句2; 还是应理解为:if(表达式1)if(表达式2)语句1;else语句2; 为了避免这种二义性,语言规定,else 总是与它前面最近的if配对,因此对上述例子应按前一种情况理解.,C语言程序设计与数据结构,【例4.6】比较两个数的大小关系。 main()int a,b;printf(“please input A,B: “);scanf(“%d%d“, 本例中用了if语句的嵌套结构。采用嵌套结构实质上是为了进行多分支选择,实际上有三种选择即AB、AB或A=B。这种问题用if-else-if语句也可以完成。而且程序更加清晰。因此,在一般情况下较少使用if语句的嵌套结构。

14、以使程序更便于阅读理解。,C语言程序设计与数据结构,4.2.3 条件运算符和条件表达式如果在条件语句中,只执行单个的赋值语句时, 常可使用条件表达式来实现。不但使程序简洁,也提高了运行效率。条件运算符为?和:,它是一个三目运算符,即有三个参与运算的量。 由条件运算符组成条件表达式的一般形式为:表达式1? 表达式2: 表达式3 其求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。条件表达式通常用于赋值语句之中。例如条件语句:if(ab) max=a;else max=b; 可用条件表达式写为: max=(ab)?a:b; 执行该语句

15、的语义是:如ab为真,则把a赋予max,否则把b 赋予max。 使用条件表达式时,还应注意以下几点: 1) 条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。 因此 max=(ab)?a:b 可以去掉括号而写为 max=ab?a:b 2) 条件运算符 ?和:是一对运算符,不能分开单独使用。 3) 条件运算符的结合方向是自右至左。 例如:ab?a:cd?c:d 应理解为 ab?a:(cd?c:d) 这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。,C语言程序设计与数据结构,【例4.8】用条件表达式对上例重新编程,输出两个数中的大数。 main()int a,b,m

16、ax;printf(“n input two numbers: “);scanf(“%d%d“, ,C语言程序设计与数据结构,4.3 switch语句,4.3.1 switch语句及执行过程 语言还提供了另一种用于多分支选择的switch语句, 其一般形式为:switch (表达式) case常量表达式1: 语句1;case常量表达式2: 语句2; case常量表达式n: 语句n;default : 语句n+1;其语义是:计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与

17、所有case后的常量表达式均不相同时,则执行default后的语句。,C语言程序设计与数据结构,【例4.9】 main()int a;printf(“input integer number: “);scanf(“%d“, 本程序是要求输入一个数字,输出一个英文单词。但是当输入3之后,却执行了case 3以及以后的所有语句,输出了Wednesday 及以后的所有单词。这当然是不希望的。为什么会出现这种情况呢?这恰恰反应了switch语句的一个特点。在switch语句中,“case 常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个

18、switch 语句,所以出现了继续执行所有后面case语句的情况。 这是与前面介绍的if语句完全不同的,应特别注意。为了避免上述情况,语言还提供了一种break语句 。,C语言程序设计与数据结构,4.3.2 break语句在switch中的使用 语言提供了一种break语句,来跳出switch语句,break 语句只有关键字break,没有参数。修改上述例题的程序,在每一case语句之后增加break 语句, 使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。 【例4.10】 main()int a;printf(“input integer number: “);scanf(“%d“, 在使用switch语句时还应注意以下几点: 1) 在case后的各常量表达式的值不能相同,否则会出现错误。 2) 在case后,允许有多个语句,可以不用括起来。 3) 各case和default子句的先后顺序可以变动,而不会影响程序执行结果。 4) default子句可以省略不用。,

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

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

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


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

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

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