




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章 选择结构程序设计,本章内容: 1.关系运算符和关系表达式 2.逻辑运算符和逻辑表达式 3.if语句的使用 4.条件运算符和条件表达式 5.switch语句的使用 6.程序举例,选择结构-根据某些条件决定执行或不执行某组操作,关系运算符和表达式,1.关系运算符及优先次序 比较两个量的运算符称为关系运算符。 在语言中有以下关系运算符: 大于 = 大于或等于 = = 等于 != 不等于 关系运算符的优先级别: (1) 、=、=优先级相等,= =、!=优先级相等, 前者高于后者。 (2) 关系运算符的优先级低于算术运算符。 (3) 关系运算符的优先级高于赋值运算符。,关系表达式的一般形式为: 表达式1 关系运算符 表达式2 例如:a+bc-d x3/2 a+10的值为“真”,即为1。 (a=3)(b=5)由于35不成立,其值为0。 关系表达式是表达式,因此也允许出现嵌套的情况。 如:a(bc), a!=(c=d)等。,2.关系表达式,1.逻辑运算符 语言中提供了三种逻辑运算符 ! 非运算 & 与运算 | 或运算 运算符& 、运算符| 均为双目运算符,具有左结合性。 非运算符!为单目运算符,具有右结合性。 1)逻辑运算符优先级如下: (1) ! 高于 & 高于 | (2) &, | 低于关系运算符,!高于算术运算符(*, / ),逻辑运算符和表达式,按照运算符的优先顺序可以得出: ab & cd 等价于 (ab) & (cd) !b=c|dc & x+yc) & (x+y)b),逻辑运算符,2)逻辑运算的值: 逻辑运算的值也为“真”和“假”两种,用“1”和“0 ”来表示。 反过来在判断一个量是为“真”还是为“假”时,以“0”的数值代表“假”,以非“0”的数值代表“真”。,(1)与运算& 参与运算的两个量都为真时(非0),结果才为真(值为1),否则为假(值为0)。 例如:50 & 42,由于50为真,42也为真,其结果也为“真”,表达式的值为1。,3)逻辑运算的规则:,(2)或运算| 参与运算的两个量只要有一个为真(非0),结果就为真(值为1)。 两个量都为假(值为0)时,结果为假(值为0)。 例如:50 | 58, 结果也就为真(值为1)。,(3)非运算! 参与运算量为真(非0)时,结果为假(值为0);参与运算量为假(值为0)时,结果为真(值为1)。 例如:!(50)的结果为假,即为0。,2.逻辑表达式 逻辑表达式的一般形式为: 表达式 & 表达式 表达式 | 表达式 !表达式 逻辑表达式的值:各种逻辑运算的最后值,以“1”和“0”分别代表“真”和“假”。,3)逻辑运算的规则:,main() char c=k; int i=1,j=2,k=3; float x=3e+5,y=0.85; printf(“%d,%dn“, !x*!y, !x); printf(“%d,%dn“, x|i ,分析下段程序的输出结果,0,0 1,0 0,1,在逻辑表达式的求解中,并不是所有的逻辑运算符都执行,只有在必须执行下一个逻辑运算符才能求出表达式的值时,才执行下一个运算符。 (1) 表达式1 & 表达式2 & a+b0 & b+ (a=1,b=-2) 如果:表达式1的值是0,无论表达式2的值是什么,整个表达式的值都为0,因此表达式2就不计算了。 (2)表达式1 | 表达式2 | a+b0 | b+ ( a=1,b=2 ) 如果:表达式1的值是1,无论表达式2的值是什么,整个表达式的值都为1,因此表达式2就不计算了。,说 明:,(3)若a1,b2,c3,d=4,m和n原值为1 (m=ab) & (n=cd) 则m0,而n仍保持原值 (4) c & d 逻辑运算符两侧,可以是任意类型的数据类型,说 明:,1.if语句有三种基本形式 1)第一种形式,基本形式: if (表达式) 语句; 如果表达式的值为真,则执行其后语句,否则不执行该语句。,if 语句,void main() int a,b,max; scanf(“%d,%d“, ,if(表达式) 语句1; else 语句2; 如果表达式的值为真,则执行语句1,否则执行语句2 。,void main() int a, b; scanf(“%d,%d“, ,例:,2)第二种形式,if-else形式,前二种形式的if语句一般都用于两个分支的情况。 当有多个分支选择时,可采用if-else-if语句,其一般形式为: if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式m) 语句m; else 语句n;,3)第三种形式,if-else-if形式,void main() int result; printf(“input your result: “); scanf(“%d”, ,例 如:,在三种形式的if语句中,在if关键字之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。,注 意 :,例如: if(a=5) 语句; if(b) 语句; 只要表达式的值为非0,即为“真”。 但是在 if(a=5) ;中表达式的值永远为非0,所以其后的语句总是要执行的,但在语法上是合法的。,又如,问下面程序段的输出结果? : int b,a=10; scanf(“%d“,注 意 :,(2) 在if 语句中,条件判断表达式必须用括号括起来,即使是一个变量的最简单表达式,也要用括号括起来;在语句之后必须加分号。,(3) 在if 语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用 括起来组成一个复合语句。,注意:,例如:交换两个变量 if (ab) t= a; a=b; b=t; ,当if语句中包含if语句时,则构成了if 语句嵌套的情形。 其一般形式可表示如下:,if (表达式1) if (表达式2) 语句1; else 语句2;,2. if 语句的嵌套,if(表达式1) if (表达式2) 语句;,在嵌套内的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。,if (x=1) if(x5) x+; else x-; 其中的else究竟是与哪一个if配对呢?,语言规定,else 总是与它前面最近的if配对,例 如:,例:,如果要使else与第一个if配对,则可加括号 来实现。,例5.3 Pg.95,main() int x,y; scanf(“%d“, ,条件运算符为 ? : 三目运算符,即有三个参与运算的量。 由条件运算符组成条件表达式的一般形式为: 表达式1 ? 表达式2 : 表达式3 其求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。,条件运算符和条件表达式,条件表达式通常用于赋值语句之中。 例如条件语句: if(ab) max=a; else max=b; 可用条件表达式写为 max=(ab)?a:b; 执行该语句的语义是:如ab为真,则把a 赋予max,否则把b 赋予max。,条件运算符和条件表达式,条件运算符的运算优先级 低于关系运算符和算术运算符,高于赋值符。 因此 max=(ab)?a:b可以去掉括号而写为 max=ab?a:b 条件运算符? :是一对运算符,不能分开单独使用。 条件运算符的结合方向是自右至左。 例如:ab?a:cd?c:d 应理解为 ab?a:(cd?c:d) 条件表达式常常用在只执行单个的赋值语句时,不但使程序简洁,也提高了运行效率。,注意以下几点:,例. 输入一个字符,若为大写字母,是则转换成小写,否则不转换,main() char ch; scanf(“%c“, ,1.switch语句使用的一般形式为:,switch(表达式) case 常量表达式1: 语句1; case 常量表达式2: 语句2; case 常量表达式n: 语句n; default : 语句n+1; ,switch语句,先计算表达式的值,并逐个与其后的常量表达式值相比较; 当表达式的值与某个常量表达式的值相等时,即执行其后的语句; 然后不再进行判断,继续执行后面所有case后的语句; 如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。,语句的执行过程:,void main() char grade; printf(“input your mark: “); scanf(“%c“, ,程序运行时输入 A ,其输出结果是什么?,例 如,在switch语句中,“case 常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,将继续执行所有后面case语句的情况。 为了避免上述情况,语言还提供了一种break语句,专用于跳出switch语句。 break 语句使用形式为: break; 在每一case语句之后增加break 语句, 使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。,说 明,switch(表达式) case 常量表达式1: 语句1; break; case 常量表达式2: 语句2; break; case 常量表达式n: 语句n; break; default : 语句n+1; ,使用switch语句的通常形式为:,void main() char grade; printf(“input your mark: “); scanf(“%c“, ,例题修改如下:,1.在case后的各常量表达式的值不能相同,否则会出现错误。 2.在case后,允许有多个语句,可以不用 括起来。 3.各case和default子句的先后顺序可以变动,而不会影响程序执行结果。 4.default子句可以省略不用。 5.若判断的是一个区间,要将区间转换成单个值,见例5.7。,注意以下几点:,s250km 没有折扣 250=s500 2%折扣 500=s1000 5%折扣 1000=s2000 8%折扣 2000=s3000 10%折扣 3000=s 15%折扣,将区间转换成常量 if (s=3000) c=12 else c=s/250,switch (c) case 0: d=0;break; case 1: d=2;break; case 2: case 3: d=5;break; case 7: d=8;break; case 11: d=10;break; case 12: d=15;break; ,例5.7 计算运输公司的运费,s为路程,例 , 判断某一年是否闰年,void main() int year,leap; scanf(“%d”,闰 年: 能被4整除,但不能被100整除 能被4整除,又能被400整除,if (year%4!=0) leap=0; else if (year%100!=0) leap=1; else if (year%400!=0) leap=0; else leap=1;,if (year%4=0,if (year%4=0) if (year%100=0) if (year%400=0) leap=1; else leap=0; else leap=1; else leap=0;,判断闰年的不同实现方式,void main() float a,b,s; char c; printf(“input expressi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Module 10 Australia Unit 3 教学设计 2024-2025学年外研版九年级英语上册
- 《搭配问题》(教学设计)-2023-2024学年三年级下册数学人教版
- Unit 5 Here and now Section B project 教学设计 2024-2025学年人教版(2024)七年级英语下册
- Unit 3 My School (Section A 2a~2f)教学设计 2024-2025学年人教版(2024)七年级英语上册
- 20 谈创造性思维2024-2025学年九年级语文上册同步教学设计(河北专版)
- 21古诗三首《出塞》《凉州词》教学设计-2024-2025学年统编版语文四年级上册
- 2024-2025学年高中物理 4.6 用牛顿运动定律解决问题(一)教学设计 新人教版必修1
- 硝酸甘油护理查房
- 0 数学游戏-在教室里认一认(教学设计)-2024-2025学年一年级上册数学人教版
- 2024秋七年级历史上册 第二单元 夏商周时期 早期国家的产生与社会变革 第6课 动荡的春秋时期教学设计3 新人教版
- 公司事故隐患内部报告奖励制度
- 大学生创新创业基础(创新创业课程)完整全套教学课件
- 机械伤害应急措施(课件)
- ROHS企业标准(格力)
- 污水池防腐施工方案改
- 公务用车派车单、车辆维修保养申请单(修订版)
- 如家酒店连锁会员组织章程
- 花卉病虫害防治基本知识PPT精品文档
- 生产经营单位生产安全事故应急预案评审表
- 应急预案体系建设情况调查
- 汽车涂装车间专业保洁述评
评论
0/150
提交评论