




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第4章 选择结构程序设计,目前我们已经讲了顺序结构程序设计,实际生活中,若需要处理事情,往往会根据不同的情况,采取相应不同的处理措施。在程序设计中,这种算法表现为根据不同的判定条件,控制执行不同的程序流程。选择结构是程序结构中很重要的一种控制结构。在程序设计时,当需要进行选择、判断和处理的时候,就要用到选择结构。,2,要设计选择结构程序,要考虑两个方面的问题:,一、在C语言中如何来表示选择的条件?,二、在C语言中实现选择结构用什么语句?,在C语言中表示条件,一般用关系表达式或逻辑表达式,实现选择结构用if语句或switch语句。,我们今天要讲的主要内容如下:,4. if语句,4. swit
2、ch语句,4. 程序举例,3,4.1.1 if语句的形式,1. 单if语句 2. if-else语句 3. if-else if-else语句,4.1 if语句,4.1.2 if语句的嵌套,4,1.单if语句,(1)语句格式: if (表达式) 语句,(2)注意: 表达式即条件,一定要有括号,可以是任意类型的表达式,值为真或假; 语句可以是单语句也可以是语句块。,5,【例4.1】求两个整数a,b中较大者。,(1)算法分析: 设三个变量a,b,max。 首先假设max=a, 然后判断a,b,若a=b则max=b, 最后输出max。,1.单if语句,6,(2)流程图描述:,1.单if语句,#inc
3、lude stdio.h void main( ) int a,b,max; printf(a,b=); scanf(%d,%d, ,7,2. if-else语句,(1)语句格式: if (表达式) 语句1 else 语句2,(2)注意: if和else同属于一个if语句; 语句1和语句2可以是单语句也可以是语句块。,8,(1)算法分析: 设3个变量a,b,max。 首先输入a,b, 然后判断a,b,较大者放在max中, 最后输出max。,【例4.2】用if-else语句改写例4.1。,2. if-else语句,9,(2)流程图描述:,2. if-else语句,#include stdio.h
4、 void main( ) int a,b,max; printf(a,b=); scanf(%d,%d, ,10,3.if-else if-else语句,(1)语句格式: if (表达式1) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3 else 语句n,11,【例4.】根据成绩打印出等级。 (0-59: 60-69: 70-79:C 80-89:B 90-100:A),算法分析: 设成绩为score,假设取值在0-100之间,没 有错误的输入。 60score0 E 70score60 D 80score70 C 90score80 B 100scor
5、e90 A,3.if-else if-else语句,12,1 #include stdio.h 2 void main( ) 3 /*E:0-59 D:60-69 C:70-79 B:80-89 A:90-100*/ 4 int score; 5 printf(score= ); 6 scanf( %d , 17 ,问题:条件表达式可否采用更简洁的形式?,3.if-else if-else语句,13,问题:条件表达式的先后可否任意?,3.if-else if-else语句,1 #include stdio.h 2 void main( ) 3 /*E:0-59 D:60-69 C:70-79
6、B:80-89 A:90-100*/ 4 int score; 5 printf(score= ); 6 scanf( %d , 17 ,14,注意条件的表示形式和顺序,3.if-else if-else语句,1 #include stdio.h 2 void main( ) 3 /*E:0-59 D:60-69 C:70-79 B:80-89 A:90-100*/ 4 int score; 5 printf(score= ); 6 scanf( %d , 17 ,15,4.1.2 if语句的嵌套,1.嵌套的概念: 在if语句中又包含一个或多个if语句。,2.嵌套的形式: if语句可以内嵌在i
7、f子句中,又可以内嵌在else子句中。,例如: if ( ) if ( ) 语句1 else 语句2 else if ( ) 语句3 else 语句4,16,【例4.4】猜数程序,和预定的数比较,并给出相应的提示。,4.1.2 if语句的嵌套,1 #include stdio.h 2 void main( ) 3 int number=200; 4 int i; 5 scanf(%d, 13 ,17,1 #include stdio.h 2 void main( ) 3 int a,b,c,max; 4 printf(a,b,c=); 5 scanf(%d,%d,%d, 14 ,说明: 内嵌的
8、if语句既可以嵌套在if部分,也可以嵌套在else部分。,4.1.2 if语句的嵌套,【例4.5】求三个整数a,b,c中的最大数。,18,3. if 与else的配对规则: else总是与它上面最近的if配对。,特别注意: (1)要采用正确的缩进格式; (2)不易弄清的地方要加上 。,例4.5: 7 if (ab) 8 if (bc) 9 max=a; 10 else 11 if (ac) 12 max=b;,4.1.2 if语句的嵌套,例4.4: 6 if (inumber) 7 printf(Its large!); 8 else 9 if (inumber) 10 printf(Its
9、small!); 11 else 12 printf(Its right!);,19,问题,实现多分支结构的方法有哪些?,方法一: if-else if-else语句 方法二: if语句的嵌套,20,1 #include stdio.h 2 void main( ) 3 int a,b,c,max; 4 printf(a,b,c=); 5 scanf(%d,%d,%d, 14 ,用if-else if-else语句改写例4.5。,21,比较,方法一:ifelse if语句 不仅要对多个条件进行并列测试,而且程序描述不够简洁。 方法二:if语句的嵌套 当分支较多时,嵌套的if语句层数多,程序冗长
10、而且可读性降低。 初学者要尽量避免使用if语句的嵌套来解决多分支问题。,22,4.2 switch语句,1.语句格式: switch (表达式) case 常量表达式1:语句1 case 常量表达式2:语句2 case 常量表达式n:语句n default:语句n+1 ,23,switch (表达式) case 常量表达式1:语句1 case 常量表达式2:语句2 case 常量表达式n:语句n default:语句n+1 ,注意: 1. 可以是整型或字 符型表达式; 2. case后面必须是常量表达 式,不能包含变量; 3. 每个常量表达式的值应互 不相同; 4. case语句先后顺序随意;
11、 5.若从上至下没有找到与表 达式的值相匹配的case,含有 default子句时,执行语句n+1。,4.2 switch语句,24,【例4.6】输入一个星期数字,输出其对应的英文单词 。,4.2 switch语句,1 #include stdio.h 2 void main() 3 int a; 4 printf(please input a week number:); 5 scanf(%d, 15 16 ,25,注意使用break语句。程序修改如下:,4.2 switch语句,1 #include stdio.h 2 void main() 3 int a; 4 printf(pleas
12、e input a week number:); 5 scanf(%d, 15 16 ,26,【例4.7】输入任一平年的月份,输出该月份对应的 天数。,算法分析: 设月份为month,天数为day month=1,3,5,7,8,10,12 day=31 month=4,6,9,11 day=30 month=2 day=28,注意:当多个常量表达式都执行同一组语句时,可将它们集中写在一起。,问题:怎样使得 case语句数目较少?,4.2 switch语句,#include stdio.h void main() int month,day; printf(please input month
13、:); scanf(%d, ,27,if-else if-else语句与switch语句的区别,if-else if-else 语句:用于多条件并列测试,从中取一的情形; switch语句:用于单条件测试,从其多种结果中取一的情形。,1 #include /*例4.7*/ 2 main() 3 int month,day; 4 printf( please input month: ); 5 scanf(%d, 15 ,1 #include stdio.h /*例4.3*/ 2 void main( ) 3 int score; 5 printf(score= ); 6 scanf( %d ,
14、 17 ,28,【例4.8】输入三个整数,输出最大数和最小数。,4.3 程序举例,1 #include stdio.h 2 void main( ) 3 4 int a,b,c,max,min; 5 printf(a,b,c=); 6 scanf(%d,%d,%d, 17 ,29,【例4.9】计算器程序。用户输入运算数和四则运算符,输出计算结果。,4.3 程序举例,1 #include stdio.h 2 void main( ) 3 4 float a,b; 5 char c; 6 printf(请输入运算数和四则运算符如a+(-,*,/)b:); 7 scanf(%f%c%f, 15 16
15、 ,30,【例4.10】求一元二次方程ax2+bx+c=0的根。,4.3 程序举例,分析: 一元二次方程的根有下列情况: 当a=0,b=0时,方程无解; 当a=0,b0时,方程只有一个实根-c/b; 当a0时,方程的根为 x = 其中,当b24ac0时有两个实根; 当b24ac0时有两个虚根。,31,4.3 程序举例,我们把上述描述用流程图表示,逻辑关系更为清晰。,32,4.3 程序举例,#include stdio.h #include math.h void main( ) float a,b,c,disc,x1,x2,realpart,imagpart; printf(a,b,c=); scanf(%f,%f,%f, ,else realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf(方程有两个虚根!n); printf(x1=%8.4f+%8.4fin, realpart,imag
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人美版三年级美术下册艺术实践计划
- 九年级下班主任学生心理危机应对计划
- 二年级上册道德法治知识点复习计划
- 部编版小学二年级语文上册教研组集体备课计划
- 人教版七年级数学上册课时安排计划
- 新人教版九年级数学专题教学计划
- 六年级年级组信息化教学应用计划
- 2025年幼儿园安全防护计划
- 班主任学校节假日安全工作计划
- 七年级上册植物观察实验教学计划
- 2025至2030年中国飞行控制器行业市场供需态势及未来趋势研判报告
- 2025年黑龙江省龙东地区中考数学试卷真题(含答案)
- 2025至2030年中国锦氨纶汗布市场分析及竞争策略研究报告
- 2025年建筑电气工程师职业资格考试试卷及答案
- 2024年江苏地质局所属事业单位招聘考试真题
- 2025年湖北省中考物理试题(含答案及解析)
- 2025年中小学暑假安全教育主题家长会 课件
- 房地产销售计划书
- 2025年劳动争议仲裁员(二级)考试试卷
- 近视管理白皮书(2025)专家共识-
- 2025年佛山市南海区图书馆招聘题库带答案分析
评论
0/150
提交评论