版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章 选择结构程序设计,5. 1 关系运算符和关系表达式 5. 2 逻辑运算符和逻辑表达式 5. 3 if 语句 5. 4 switch多分支选择 语句 5. 5 程序举例,引例 计算函数值,需要考虑: 输入x 判断x的值 根据x的值,计算y的值 输出y 显然 顺序结构不能实现,#include “stdio.h” #include ”math.h” void main( ) float x,y, ; printf(”Enter x:”); scanf(”%f”, ,关系运算,Enter x: 2 X=2.00 ,y=0.4546,5. 1 关系运算符和关系表达式,关系运算:将两个值进行比较
2、 关系运算符: = = = ! = 高 低 优先级别 算术运算符 关系运算符 赋值运算符 高 低,注意: “=” “=”,如: ca+b c(a+b) a= =bc a= =(bc) a=bc a=(bc),关系运算符的结合规则:左结合,4 .关系表达式:用关系运算符将两个表达式连接起来的式子 一般形式: 算术表达式或关系达式、逻辑表达式、赋值表达式、字符表达式,即任何C合法的表达式。 例如:a+bc-b (ab)= = c a= =“A” 注意:数值量比较:数字量的大小 字符量比较:ASCII的大小 5 .关系表达式的值:逻辑值真(1)、假(0) 如: ca+b c(a+b) a=bc a=
3、(bc) a=bc a=(bc ) 问:a=1, b=-5, c=a 上述表达式的值?,1 ,1 ,1,举例:写出下列表达式的值 若有定义:int a=3, b=2, c=1; char ch1=a; 1) b+c!=a 2) ch1b)(bbbb= =c 7) f=abc, 0, 1, 0, 1, 1, 1, 0,5. 2 逻辑运算符和逻辑表达式,1 逻辑运算符(真值表见书) !(非) ,4 逻辑表达式 用逻辑运算符将关系表达式或逻辑量连接起来的式子 (单个逻辑量或关系表达式是逻辑表达式的特例。) 5 逻辑表达式的值:逻辑值真、假 真条件成立,1代表; 假条件不成立,0代表;,若a=4,则!
4、a的值为0。 若a=4,b=5,则a 内嵌语句 一条语句、复 合语句、空语句。描述了条件 成立时要执行的操作。 可是任何形式的表达式;通常是关系或 逻辑表达式。描述了分支控制条件。 注意: if(x)相当于if(x!= 0) if(x= = 0)与if(x= 0)是不同的。,例:输入一个整数,为正则输出 #include stdio.h void main( ) int x; scanf(”%d”, ,思考:若a,b,c三个数排序,如何处理?,使用 if 语句时,要特别注意表达式的含义及写法 例如:a=3,b=2,c=1; if(a=!b) printf(” 1:”); if(ab 3:,若改
5、为:if(a!=b)printf(“1:”);,1:2:3:,注意: a=!b不要误解为 a!=b 也不要误解为 a=!b a=!b有赋值作用,a被改变,第二种形式分支选择 if (e) A else B 执行过程: e为真值(非0)执行A,否则执行B 或都可以是单一语句,或复合语句。 else部分不能独立存在, Else前有“;”,是if 的一部分。 注意 在C语言中,表达式的值为非0时,系统按“真”值处理,如: a=-5 if (a) printf(”ok”) if (a) printf(”ok”),例:根据x求y值 y= #include stdio.h void main( ) flo
6、at x, y; scanf(”%f”, ,x x0 x2 + 1 x0,例:输入两个数并按由小到大顺序输出 #include stdio.h void main( ) float a,b,t; scanf(”%f,%f”, ,例:求任意三角形面积,若三边值不能构成三角形时输出表示错误的信息。 #include stdio.h void main( ) float a, b, c, s, area; printf(”Enter a, b, c:”); scanf(”%f,%f,%f”, ,第三种形式嵌套分支、阶梯if if ( e1 ) s1 else if ( e2 ) s2 else if
7、 ( e3 ) s3 else if ( em ) sm else sn 其中:ei各层的分支条件;si各层的内嵌语句; 执行过程:系统自上而下逐个判断条件ei,一旦发现某条件ei满足时,执行其后续的语句si,并跳过其他剩余的阶梯。若所有条件不满足,执行最后一个else语句或后续语句。 注意: else与最近的if 匹配,e1,e2,T F T F T F s1 s2 s3 s4,e3,例:对学生成绩分档; void main( ) int g; printf(”Enter score:”); scanf(”%d”, ,80100分 A档 7079分 B档 6069分 C档 059分 D档,上
8、例:用单路分支实现 #include stdio.h void main( ) int g; printf(”Enter score:”); scanf(”%d”, 执行效率和条件与阶梯 if有什么差别?,80100分 A档 7079分 B档 6069分 C档 059分 D档,2. if的嵌套: 在一个分支结构中,又完整地包含一个或多个分支结构,则构成了分支结构的嵌套。,e1 e2 e3,T F T F T F s1 s2 s3 s4,if (e1) if (e2) s1 else s2 else if (e3) s3 else s4,实现多路分支,Else 与最近的if 匹配,比较: if(
9、x) if(y) printf(“1”); else printf(“2”);,if(x) if(y) printf(“1”); else printf(“2”);,由此看出:通过加“ ”,改变else的层次,从而改变程序的流程。,例:编程,判定某年是否闰年 闰年条件:整百的年份能被400整除; 或非整百的年份能被4整除。 算法表示:,输入year year%100= =0,year%400= =0,year%4= =0,T F T F leap=1 leap=0 leap=1 leap=0,leap= =1,T F,T F,输出“is” 输出“not”,程序清单: #include stdi
10、o.h void main( ) int year, leap; scanf(”%d”, ,3. 条件运算符和条件表达式 条件运算符 ? : 唯一三目 条件表达式 e1 ?e2: e3 其中:各个表达式可以是任何形式的表达式。 求解过程: 先求解e1, e1值非0,计算并返回e2的值,否则计算并返回e3的值 运算顺序:高于赋值运算,低于算、关系、逻辑运算,例: xy? (y=-x ): (y=+x); 或:y=xy?-x :+x ; 等价于 if (xy) y= -x; else y= +x;,结合方向:“自右至左” ab?acd?cd 相当于 ab?a(cd?cd),例:ch=(ch=A,-
11、1 x0,使用说明: 表达式2、3值的类型可不同,此时整个条件式值的类型与两者中较高者一致。 例: float x, y; int a=2; scanf(”%f”, y=x40 ? a : a*0.9 分支条件成立条件表达式值为2.0, 条件不成立条件表达式值为1.8。,5. 4 switch多分支选择 语句,1. switch的一般形式 switch (e) case c1 :s1 case c2 :s2 case cn :sn default : sn+1 ,其中: 表达式可是任何形式,但其值应为整型、字符型;ci可是整、字符、符号常量、常量表达式。,相对嵌套的if语句实现多路分支问题,程
12、序结构清晰、易读,2. switch的执行流程 求表达式e的值 若与ci的值一致,则从语句si开始执行,到其后的所有内嵌语句执行完毕,直到遇break语句或switch的“” 若与任何常量表达式的值均不相等,则执行default后的语句或后续语句。,switch执行流程图: switch (表达式) case c1: s1 case c2: s2 case cn: sn default : sn+1 ,注意: 常量表达式ci只起标号作用,不作求值判断 常量表达式必须唯一,没有先后顺序 多个case语句可公用一组执行语句,在switch中可以使用break语句跳出switch结构;,例:对成绩分
13、档 #include “stdio.h” void main( ) char c1; int g; scanf(”%d”, ,80100分 A档 7079分 B档 6069分 C档 059分 D档,break; break; break;,#include stdio.h void main( ) int g; printf(”Enter score:”); scanf(”%d”, ,关键: 如何表示表达式和常量 常量的取值与表达式有关,5. 5 选择结构程序举例,例:找出三个整数中的最大、最小数。 #include stdio.h void main( ) int a, b, c, max,
14、 min; printf(”Enter a,b,c:”); scanf(”%d,%d,%d”, ,思考:从键盘输入四个整数,输出其中的最大数。,例:要求输入三个数并按由小到大顺序输出 #include stdio.h void main( ) float a,b,c,t; scanf(%f,%f,%f, ,练习:输入四个整数,升序排序并输出。,输入a、b、c、d T ab F ab T ac F ac T ad F ad ,T bc F bc T bd F bd T cd F cd 输出a、b、c、d,例:编写一个能进行二个操作数的加、减、乘、除运算的计算器模拟程序。 #include stdio.h void main() char op; float x,y; printf(t Input a arithmetiic expressionnt); scanf(%f%c%f, ,分析 输入两个数级、运算符 switch表达式:运算符 常量: + - * /,练习:将上例题目改为 设计的菜单选择程序,根据一个简单选择可实现a与b的四则运算。 提示:程序分三部分 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026上半年四川事业单位统考涪城区考试招聘中小学教师32人备考题库含答案详解(达标题)
- 2026广州南沙人力资源发展有限公司一线社工招聘备考题库(能力提升)附答案详解
- 2026上半年四川成都市双流区卫健系统考核招聘专业技术人员14人备考题库(历年真题)附答案详解
- 公路限高架安装施工技术方案
- 2026天津铁路建设投资控股(集团)有限公司招聘1人备考题库带答案详解(培优b卷)
- 2026河北新质科技有限公司校园招聘4人备考题库(易错题)附答案详解
- 追求客户满意并持续改进的承诺函8篇
- 2026中国电信福建公司春季校园招聘备考题库附参考答案详解(黄金题型)
- 2026浙江省荣军医院特殊专业技术岗位招聘3人备考题库附答案详解【预热题】
- 2026贵州峰鑫建设投资(集团)有限公司招聘演艺人员2人备考题库带答案详解(新)
- 高速公路服务区物业服务方案
- 宜化烧碱工艺介绍
- 2025纸箱厂劳动合同模板
- 《陆上风力发电机组钢混塔架施工与质量验收规范》
- 2025年及未来5年中国对外劳务合作市场运行态势及行业发展前景预测报告
- 2025年招标采购从业人员专业技术能力考试(招标采购合同管理中级)测试题库及答案(山西阳泉)
- 水利工程项目质量管理体系建设方案
- 电器设备使用安全培训课件
- 老年痴呆合并激越行为护理查房
- 2025年河北高职单招政治考试真题及答案
- 2025下半年新疆生产建设兵团事业单位招聘(2398人)考试参考试题及答案解析
评论
0/150
提交评论