计算机二级C语言辅导-选择结构

上传人:重生1****23 文档编号:356139782 上传时间:2023-07-05 格式:PPT 页数:39 大小:346.51KB
返回 下载 相关 举报
计算机二级C语言辅导-选择结构_第1页
第1页 / 共39页
计算机二级C语言辅导-选择结构_第2页
第2页 / 共39页
计算机二级C语言辅导-选择结构_第3页
第3页 / 共39页
计算机二级C语言辅导-选择结构_第4页
第4页 / 共39页
计算机二级C语言辅导-选择结构_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《计算机二级C语言辅导-选择结构》由会员分享,可在线阅读,更多相关《计算机二级C语言辅导-选择结构(39页珍藏版)》请在金锄头文库上搜索。

1、第四章第四章选择结构4.1.1 关系运算符C语言有语言有6种关系运算符:种关系运算符:、=、=、!=u关系成立:关系运算的值为关系成立:关系运算的值为1(表示逻辑真);(表示逻辑真);u关系不成立:关系运算的值为关系不成立:关系运算的值为0(表示逻辑假)。(表示逻辑假)。例如:例如:53 值为值为1 5b+c比较两个算术表达式的值 a=2*b比较变量的值和算术表达式的值 ab比较两个字符ASCII码值关系表达式2、关系运算符的优先级(1)、和=为同一级,=和!=为同一级。前者优先级高于后者。(2)关系运算符优先级低于算术运算符。例如:a+bb+c等效于(a+b)(b+c)。(2+a)=(b-a

2、)等效于2+a=b-a。3、关系运算符的结合律 C语言规定关系表达式采取左结合律。表达式中出现优先级别为同一级别的运算符时,按从左到右结合方向处理。例如:int a=2,b=3,c=1u ab32先计算63,结果是1,再计算12,关系表达式的值为:1关系表达式4.1.3逻辑运算符C语言没有逻辑类型数据,进行逻辑判断时:数据的值为非0,则认作逻辑真,数据的值为0,则认作逻辑假;u而逻辑表达式的值为真,则用整形数1表示。u逻辑表达式的值为假,则用整形数0表示。逻辑运算符有3个:!、&、|表示逻辑非、逻辑与、逻辑或运算。注:由于C语言依据判断数据是否为非0或0来判断逻辑真和逻辑假,所以逻辑运算的操作

3、数类型可以是字符型、整型或浮点型。1、逻辑非!逻辑非是单目运算符(也就是说参加运算的操作数只有一个)。u若操作数本身的值为0,逻辑非运算后的结果为1(逻辑真)u当操作数值为非0时,逻辑非运算的结果为0。u例如:int a=5,b=3;!a 结果为0,即a为非0。!(ab)结果为1。因为ab的值为0,即取ab的非。2、逻辑与&逻辑与是双目运算(也就是说参加运算的操作数有两个),当参加逻辑与运算的两个操作数值均为非0(逻辑真)时,结果才为真;否则为0(逻辑假)。例如:int a=5,b=3;a&b 结果为l,即a与b均不为0。(a0)结果为0,因为ab的值为0。3、逻辑或|逻辑或也是双目运算,参加

4、或运算的两个操作数中,只要有一个操作数值为非0(逻辑真),结果就为l(逻辑真);否则为0(逻辑假)。例如:int a=5,b=3;a|b结果为l。(a0)结果为l,因为a0的值为l。在谈到逻辑运算时,我们常用一个真值表来表示,如下:ab!a!ba&ba|b真真假假真真真假假真假真假真真假假真假假真真假假为理解与、或、非的含义,引入三个电路,如图所示。在上图中,我们给出三个指示灯的控制电路,根据串、并联电路的工作原理,我们可以得出:在图(a)中,只有当两个常开按钮同时按下时,指示灯才会亮;与在图(b)中,只要两个常开按钮中任何一个按下,指示灯都会亮;或在图(c)中,没有按按钮时,电路是接通的,所

5、以指示灯亮,按下按钮时,指示灯反而不亮。非逻辑表达式1、逻辑运算表达式的构成用逻辑运算符将表达式连接起来就构成了逻辑表达式。例如,!(ab)对关系表达式的值取非(ab)&(bc)对两个关系表达式进行逻辑与运算(ab)&(bc)|(b=0)2、逻辑运算符优先级C语言逻辑运算符的优先级规定如下:优先级顺序为!&|。!高于算术运算符,&,|低于关系运算符。3、逻辑运算符的结合律 C语言逻辑运算符采用左结合律。表达式中出现优先级别为同一级别的运算符时,按从左到右的结合方向处理。例如:a&b&c计算顺序为从左自右,即:(a&b)&c。4、C语言逻辑表达式的特性 在多个&运算符相连的表达式中,计算从左至右

6、进行时,若遇到运算符左边的操作数为0(逻辑假),则停止运算。因为此时已经可以断定逻辑表达式结果为假。在多个|运算符相连的表达式中,计算从左至右进行时,若遇到运算符左边的操作数为l(逻辑真),则停止运算,因为已经可以断定逻辑表达式结果为真。4.2 if条件语句择条件语句择条件语句 ifif语句的说明语句的说明条件运算符条件运算符4.2选择型程序设计if语句的三种形式形式一:格式:if(表达式)语句1 语句2执行过程:例:if(xy)printf(“%d”,x);x=y;形式二:u格式:if(表达式)语句1 else 语句2 语句3u执行过程:例:if(xy)max=x;else max=y;x=

7、y;表达式语句1非0=0语句2表达式语句1语句2非0=0语句3形式三:格式:if(表达式1)语句1else if(表达式2)语句2else if(表达式3)语句3.else 语句表达式1语句1非0=0表达式2表达式3语句n语句3语句2非0非0=0=0u执行过程:例:if(x1000)y=0.4;else if(x800)y=0.3;else if(x600)y=0.2;else if(x400)y=0.1;else y=0;如:if(a=b&x=y)printf(“a=b,x=y”);if(3)printf(“OK”);if(a)printf(“%d”,a);说明1:uif后面的表达式类型任意

8、u if(x)if(x!=0)if(!x)if(x=0)u语句可以是复合语句例 考虑下面程序的输出结果:#include main()int x,y;scanf(“%d,%d”,&x,&y);if(xy)x=y;y=x;else x+;y+;printf(“%d,%dn”,x,y);错误!u在if 语句和else语句中若有多个操作语句,则应用花括号 将它们括起成为一个复合语句。补足程序段-1 输入两个整数,按从小到大的顺序输入两个整数,按从小到大的顺序输出它们。输出它们。t=a;a=b;b=t;#include main()int a,b,t;scanf(%d,%d,&a,&b);if (ab

9、)printf(%d,%d,a,b);条件语句举例-2 输入三个整数,按从小到大的顺序输入三个整数,按从小到大的顺序输出它们。输出它们。#include main()int a,b,c,t;scanf(%d,%d,%d,&a,&b,&c);if (ab)if (ac)if (bc)printf(%d,%d,%d,a,b,c);t=a;a=b;b=t;t=a;a=c;c=t;t=b;b=c;c=t;4.3 条件运算符和条件表达式 C语言提供了一个可以代替某些if-else语句的简便易用的操作符“?”和“:”,该操作符是三目运算符,其一般形式是:表达式1?表达式2:表达式3 操作符?的作用:在计算

10、表达式1之后,u如果数值为true(真),则计算表达式2,并将结果作为整个表达式的数值;u如果表达式1的值为false(假),则计算表达式3的 值,并以它的结果作为整个表达式的值。u例:x=10;if(x9)y=100;else y=200;可以用下面的条件运算符来处理:x=10;y=(x9)?100:200;注意:条件运算符要求有3个操作对象。条件运算符的优先级别比关系运算符和算术运算符都低。因此 y=(x9)?100:200 括号可以不要,可写成 y=x9?100:200 如果有 ab?a:b+1 相当于ab?a:(b+1),而不相当于(ab?a:b)+1条件运算符的结合方向为“自右向左”

11、。如:ab?a:cd?c:d 相当于:ab?a:(cd?c:d)如果a=1,b=2,c=3,d=4,则条件表达式的值等于4。Switch语句 switch语句是一种分支控制语句。特点:是可以根据一个表达式的多种值,选择多个分支,因而也称为分情况语句和开关语句。实际问题中常常需要用到多分支结构,例如,学生成绩分档次(85分以上为“A”等,7084分为“B”等,6069分为“C”等)。Switch语句v执行过程:switch(表达式表达式)case 常量常量1:语句:语句1;case 常量常量2:语句:语句2;case 常量常量n:语句语句n;default:语句语句n+1;当当“表表达达式式”=

12、“常常量量表表达达式式1”时,时,从从“语句语句1”开始执行;开始执行;当当“表表达达式式”=“常常量量表表达达式式2”时,时,从从“语句语句2”开始执行;开始执行;当当“表表达达式式”=其其它它值值时时,从从“语语句句n+1”开始执行;开始执行;Switch语句中使用break语句:switch (switch (表达式表达式表达式表达式)case case 常量常量常量常量1:1:语句系列语句系列语句系列语句系列1;break;1;break;case case 常量常量常量常量2:2:语句系列语句系列语句系列语句系列2;break;2;break;case case 常量常量常量常量m:

13、m:语句系列语句系列语句系列语句系列m;break;m;break;default:default:语句系列语句系列语句系列语句系列m+1;m+1;v执行过程:switch表达式语句组1语句组2语句组n语句组.常量1defaultcase 常量2常量nmain()char s;scanf(“%c”,&s);switch(s)case A:printf(“85100n”);case B:printf(“7084n”);case C:printf(“6069n”);case D:printf(“60n”);default:printf(“错误输入n”);输入“C”,求输出结果。结果:6069 60

14、 错误输入?!main()char s;scanf(“%c”,&s);switch(s)case A:printf(“85100n”);case B:printf(“7084n”);case C:printf(“6069n”);case D:printf(“60n”);default:printf(“错误输入n”);我的成绩应该是6069!什么!“60”?“错误输入”?怎么会这样?!不好意思,我属于C级!运行结果:6069 60 错误输入 解决方法break语句:main()char s;scanf(“%c”,&s);switch(s)case A:printf(“85100n”);break

15、;case B:printf(“7084n”);break;case C:printf(“6069n”);break;case D:printf(“60n”);break;default:printf(“错误输入n”);这才差不多!break!运行结果:6069main()int x=1,y=0,a=0,b=0;switch(x)case 1:switch(y)case 0:a+;break;case 1:b+;break;case 2:a+;b+;break;case 3:a+;b+;printf(“a=%d,b=%dn”,a,b);说明说明说明说明1、每个case常量表达式的值必须互不相同

16、,否则会出现互相矛盾的结果。2、允许多个case共用一个执行语句。求程序运行结果。结果:a=2,b=1。如果x=2?结果:a=1,b=1 如果x=3?结果:a=1,b=1 Switch语句u常量1,常量2,常量n是常量表达式,且值必须互不相同ucase后可包含多个可执行语句,且不必加 uswitch可嵌套u多个case可共用一组执行语句u当每一个case语句后均有break语句时,case出现的次序不影响执行结果。(default总是放在最后,这时,deafult后不需要break语句)。说明:X 0X10 2X+1 10X20Y=41 20X30 71-X 30X40 0 X0或或X40#include#include main()main()intint x x scanf(%dscanf(%d,&x);,&x);switch (switch ()case 0:case 0:printf(yprintf(y=%dn,x);break;=%dn,x);break;case 1:case 1:printf(yprintf(y=%dn,2*x+1);break;=%dn,2*x+1);b

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

当前位置:首页 > 高等教育 > 理学

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