




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章 选择结构程序设计,本章内容包括: 关系运算符和关系表达式; 逻辑运算符和逻辑表达式; 单分支和双分支选择语句; 多分支选择语句; switch开关语句; 选择语句的嵌套及条件表达式。,如果让两个同学按照身高排队(矮的在前,高的在后),怎么办? 如果有两个同学参加学生会主席的竞选,现已统计出两个人的总得分,怎么确定谁当选?,提出问题,相关知识点,4.1 关系运算符和关系表达式 4.2 逻辑运算符和逻辑表达式 4.3单分支和双分支选择语句,4.1.1 关系运算符及其优先级,1. C语言提供6种关系运算符:,说明: (1) 、 = 和= =、 ! =之间优先级的区别,类似于数学中先乘除,后加
2、减; (2) 要区分开=(等于,关系运算符)和=(赋值,赋值运算符); (3) =不能写成数学中的、 , != 不能写成数学中的符号 。,4.1.2 关系表达式,1. 什么是关系表达式? 用关系运算符将两个表达式连接起来的式子,叫关系表达式。 例如:下面都是合法的关系表达式: x2 x=a a+b=6*2 year%4=0,2. 关系表达式的值: 关系表达式只有两个值,分别是 0 和 1; 关系表达式成立,结果为真,真为1; 关系表达式不成立,结果为假,假为0;,例4.1 关系运算符的使用 #include main() int x; /* 定义变量*/ char c; int a,b; in
3、t year; scanf(“%d%c”, ,4.2.1 逻辑运算符及其优先级,1. C语言提供3种逻辑运算符:,2. 逻辑运算符的运算规则: 逻辑非-真变假,假变真;,2. 逻辑运算符的运算规则: 逻辑与-两者都为真,结果才为真;,2. 逻辑运算符的运算规则: 逻辑或-只要一个为真,结果就为真;,例如: ! (s=110 ) h值分别为150和120时,表达式值是多少? 如果h值为150 ,则( h =110 ) 成立,为1 ; 二者再求逻辑与,结果为0。,例如: (y%4 = = 0 scanf(%d%d%d, ,4.3.1 单分支选择语句,1. 格式: if (条件) 语句序列 例如:
4、if(xy) printf(“Max is %d”,x);,流程图:,2. 执行过程: 如果条件为真(条件非0 ,即为真) ,执行花括号括起来的语句序列,然后继续执行选择结构下面的语句; 如果条件为假(条件为0 ,即为假) ,不执行花括号括起来的语句序列,直接执行选择结构下面的语句。,4.3.2 双分支选择语句,1. 格式: if (条件) 语句序列1 else 语句序列2 ,例如: if(xy) printf(“Max is %d”,x) ; else printf(“Max is %d”,y) ;,2. 执行过程: 如果条件为真(条件非0 ,即为真) ,执行花括号括起来的语句序列1,然后继
5、续执行选择结构下面的语句; 如果条件为假(条件为0 ,即为假) ,执行花括号括起来的语句序列2,然后继续执行选择结构下面的语句。,说明: 无论是单分支选择语句,还是双分支选择语句,如果语句序列只有一个语句,可以省略 ,否则花括号必须存在,因为,在没有花括号的情况下,C编译系统能够识别的语句序列只有一句。,解决问题,例4.3 如果让两个同学按照身高排队(矮的在前,高的在后),怎么办?,算法思想: (1) 假设 有两个盒子a 和 b ,一个放第一个同学的身高数据,一个放第二个同学的身高数据; (2) if ( ab) (不符合我们由小到大排列的要求) 交换a和b中放置的数据; (3) 最后输出a盒
6、子和b 盒子中的身高数据。,例4.4 如果3个同学按照身高由小到大排序,如何实现?,问题的深化,算法思想:总体来说是两个两个比。 (1)假设 有三个盒子a 和 b ,c,依次放3个同学的身高数据; (2) if (ab ) 将a和 b中存放的数值交换; /*保证a中放的是a , b中的小数;*/ if (ac ) 将a 和c 中存放的数值交换; /* 保证 a 中放的是a , c中的小数;*/ /*a中放的是a,b,c三个数中的最小数;*/ if (bc ) 将 b和c中存放的数值交换; /* 保证 b 中放的是b , c中的小数;*/ (3) 最后输出a,b ,c三个盒子中的身高数据。,N-
7、S图:,源代码: # include main() float a,b,c; float t ; scanf(%f%f%f, ,例4.5 电梯厂商需要一个控制程序,实现的功能是:你输入楼层数,如果楼层是15 ,显示信息:“请走楼梯!”;如果楼层是6-15,显示信息:“请进电梯!”;如果输入的是1-15之外的数据,显示信息:“本楼只有115层,输入数据错误,请重新输入!”。,算法思想 : (1) 输入楼层数x ; (2) if ( x ) 在1-15之外,显示提示“本楼只有115层,输入数据错误,请重新输入!”; if ( x ) 在 1-5之间,显示提示“请走楼梯!”; if ( x ) 在
8、6-15之间 ,显示提示“请进电梯!”。,源代码: # include main() int x; scanf(%df, ,提出问题,问题1. 学期末,王老师想根据学生的平均成绩来决定奖学金的等级,90分以上的,得一等奖学金;8089分的,得二等奖学金;7079分的,得三等奖学金;70分以下的,没有奖学金,你能设计个程序,帮王老师解决这个问题吗?,4.4 多分支选择语句 4.5 选择语句的嵌套与条件运算符,相关知识点,1. 格式: if (条件1) 语句序列1 else if (条件2) 语句序列2 else if (条件3) 语句序列3 . else if (条件n ) 语句序列n else
9、 语句序列n+1 ,4.4.1 ifelse多分支选择语句,例如:s 用来存放学生平均成绩 if( s=90) printf(“一等奖学金n!”); else if(s= 80) printf(“二等奖学金!n”); else if(s= 70) printf(“三等奖学金!n”); else printf(“没有奖学金,继续努力!n”);,2. 执行过程: 如图4-10 如果条件1为真(条件非0 ,即为真) ,执行花括号括起来的语句序列1,然后自动退出多分支语句结构,继续执行选择结构下面的语句; 如果条件1为假(条件为0 ,即为假) , 不执行花括号括起来的语句序列1,再来判断条件2是否为真
10、; 如果条件2为真(条件非0 ,即为真) ,执行花括号括起来的语句序列2,然后自动退出多分支语句结构,继续执行选择结构下面的语句; 如果条件2为假(条件为0 ,即为假) , 不执行花括号括起来的语句序列2,再来判断条件 3是否为真;依次类推 如果所有的条件都不成立,则执行最后一个else下的语句序列n+1 ,然后继续执行选择结构下面的语句。,4.4.2 switch开关语句,1. 格式: switch ( 表达式 ) case 常量表达式1 :语句序列1; case 常量表达式2 :语句序列2; case 常量表达式3 :语句序列3; case 常量表达式 n :语句序列n; default
11、: 语句序列 n+1 ; ,例如: switch ( grade ) case A : printf(“ 85100 n” ) ; case B : printf(“ 7084 n” ) ; case C : printf(“ 6069 n” ) ; case D : printf(“ 60 n” ) ; default : printf(“Error n”) ; ,2. 执行过程:,先拿switch后的表达式与第一个case后面的常量表达式1的值相比: 如果相同,就执行语句序列1 ( 语句序列1后如果有 break 语句 ,就退出switch开关语句,继续执行switch开关语句后的语句;语
12、句序列1后如果没有 break 语句,继续执行下一个case 后的语句序列2 ;依次类推); 如果不同,再拿switch后的表达式与第二个case后面的常量表达式2的值相比:如果相同,就执行语句序列2 ( 同上面括号内) ;依次类推;,说明: (1) switch后的表达式,原则上允许任何类型,但以 int 和 char 为多; (2) 每一个case后的常量表达式的值,必须互不相同,否则出现矛盾; (3) 执行完一个case后面的语句后,流程控制转移到下一个case中的语句继续执行。此时,“case 常量表达式”只是起到语句标号的作用,并不在此处进行条件判断。在执行一个分支后,可以使用bre
13、ak语句使流程跳出switch结构,即终止switch语句的执行;如果没有 break 语句,继续执行下一个case 后的语句序列,依次类推; (4) 多个case可以共用一组执行语句。(注意break使用的位置); (5) 各个case,default出现的顺序不影响执行结果。,4.5.1 选择语句的嵌套,常见的if 嵌套形式: 1、if 嵌套ifelse if ( ) if ( ) 语句1 /*内层的if else语句*/ else 语句2 2、ifelse 嵌套if else if ( ) if ( ) 语句1 /*内层的if else语句*/ else 语句2 else if ( )
14、语句1 /*内层的if else语句*/ else 语句2,3、if else 嵌套if if ( ) if ( ) 语句 /*内层的if 语句*/ else if ( ) 语句 /* 内层的if 语句*/ 注意: 这个else和谁是一对,C编译系统总是把else 与它上面最近的未配对的if 配对;如果你想让这个else 与最上面的if 配对,就需要将内层if 语句用花括号括起来。,4.5.2 条件运算符,1. 条件运算符: ? : 2. 条件表达式: 表达式1 ? 表达式2 :表达式3 ; 说明: (1) 条件运算符的执行顺序:先求解表达式1,若为非0(真) ,则求解表达式2,此时表达式2的
15、值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。 例如:max = ( ab) ? a:b; (2) 条件运算符优先级别低于关系、逻辑和算术运算符。,例4.6 学期末,王老师想根据学生的平均成绩来决定奖学金的等级,90分以上的,得一等奖学金;8089分的,得二等奖学金;7079分的,得三等奖学金;70分以下的,没有奖学金,你能设计个程序,帮王老师解决这个问题吗?,解决问题,算法思想: (1) 定义变量,输入学生成绩; (2) 用ifelse if 语句,根据不同的成绩段,输出不同的奖学金等级;,例4.6 源代码: #include ma
16、in() int s; printf(Please input a student scoren); scanf(%d, ,例4.7 王丽的外甥正上小学,算术学的不好,王丽想:如果有一个四则运算程序,帮助外甥练习算术,那该多好!说干就干,王丽花了半个小时,设计出了这个小程序。你能模拟王丽的编程过程吗?,算法思想: (1) 输入两个数; (2) 输入一个运算符; (3) 根据输入的运算符,选择运算,可以用switch语句; (4) 输入口算结果; (5) 判断运算是否正确,给出判断结果。,例4.7源代码: #include main() int x1,x2; /*存放两个数*/ int y; /
17、* 存放运算结果*/ char c; /*存放运算符8 */ int ret; /*存放用户输入的运算结果*/ printf(n Please input two integer and +/-/*/ /:n); /*提示信息*/ scanf(%d%c%d, /*输入两个数和运算符*/,switch(c) /*根据运算符,选择运算*/ case + : y=x1+x2; break; case - : y=x1-x2; break; case * : y=x1*x2; break; case / : y=x1/x2; break; printf(n Please input the resul
18、t :n); scanf(%d, ,例4.8 王老师学期末要统计学生总成绩,每个学生的总成绩等于课程设计等级(A,B,C,D,)加上期末考试成绩(占80%),王老师打算将课程设计等级换算成对应的分数(A-20,B-15,C-10,D-5),然后加上期末考试成绩的80%,请你帮助王老师设计一个小程序,计算某个学生的总成绩。,问题的深化,算法思想: (1) 输入一个学生的课程设计等级和期末成绩; (2) 如果输入的是小写字母a , b ,c,d,将其转换成大写字符; (3) 根据课程设计等级,确定应换算成什么分数; (4) 计算学生总成绩=课程设计等级的对应分数+期末成绩* 80% ; (5) 输
19、出学生总成绩。,源代码:,#include main() char c; float score; int cscore; printf(n Please input grade-A/B/C/D and score:n); scanf(%c%f,源代码:,switch(c) /*根据输入的等级,确定转化的成绩*/ case A : cscore=20; break; case B : cscore=15; break; case C : cscore=10; break; case D : cscore= 5; break; default : printf(n Input Error!n); printf(n The students all score=%5.1fn,cscore+score*0.8); /*计算并输出总成绩*/,例4.9 财务处急需一个计算教职工所得税的软件,请同学们设计一下。 国家交纳个人所得税税率如下:( s 代表个人收入,r代表税率) s 1000 元 , r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年压纹机项目发展计划
- 2025年RN系列低压加氢催化剂项目建议书
- 2024年汽车故障排查技巧试题及答案
- 2024年计算机基础学习要点分析试题及答案
- 2024年小自考公共事业管理知识整合试题及答案
- 2024年美容师考试备考策略与方法试题及答案
- 2025年初中人教版七年级生物上册第二单元第二章第二节动物体的结构层次(说课稿)
- 2024年统计学考试内容与考试形式的变迁试题及答案
- 2025年小学一年级字符识别试题及答案
- 二建法规2024真题试卷及答案
- DL∕T 5344-2018 电力光纤通信工程验收规范
- 洗煤厂洗煤技术人员题库
- 开展志愿服务培养奉献精神三篇
- 【公司招聘与选拔中存在的问题与优化建议探析2500字(论文)】
- 2024年高考语文阅读之鲁迅小说专练(解析版)
- SL 288-2014 水利工程施工监理规范
- 5WHY分析法培训课件
- (高清版)TDT 1031.6-2011 土地复垦方案编制规程 第6部分:建设项目
- 国企素质测评试题及答案
- 2024春苏教版《亮点给力大试卷》数学六年级下册(全册有答案)
- 中考英语语法填空总复习-教学课件(共22张PPT)
评论
0/150
提交评论