【教学课件】第4章选择结构程序设计.ppt

上传人:小飞机 文档编号:5658892 上传时间:2023-08-06 格式:PPT 页数:33 大小:327KB
返回 下载 相关 举报
【教学课件】第4章选择结构程序设计.ppt_第1页
第1页 / 共33页
【教学课件】第4章选择结构程序设计.ppt_第2页
第2页 / 共33页
【教学课件】第4章选择结构程序设计.ppt_第3页
第3页 / 共33页
【教学课件】第4章选择结构程序设计.ppt_第4页
第4页 / 共33页
【教学课件】第4章选择结构程序设计.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《【教学课件】第4章选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第4章选择结构程序设计.ppt(33页珍藏版)》请在三一办公上搜索。

1、1,第4章 选择结构程序设计,目前我们已经讲了顺序结构程序设计,实际生活中,若需要处理事情,往往会根据不同的情况,采取相应不同的处理措施。在程序设计中,这种算法表现为根据不同的判定条件,控制执行不同的程序流程。选择结构是程序结构中很重要的一种控制结构。在程序设计时,当需要进行选择、判断和处理的时候,就要用到选择结构。,2,要设计选择结构程序,要考虑两个方面的问题:,一、在C语言中如何来表示选择的条件?,二、在C语言中实现选择结构用什么语句?,在C语言中表示条件,一般用关系表达式或逻辑表达式,实现选择结构用if语句或switch语句。,我们今天要讲的主要内容如下:,4.if语句,4.switch

2、语句,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语句,#include stdio.hvoid

3、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.hvoid main()int a,b,max;printf(a,b=);

4、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 100score90 A,3.if-else if-else语句,12,1#include stdio.h2 void mai

5、n()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.h2 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,14,注意条件的表示形式和

6、顺序,3.if-else if-else语句,1#include stdio.h2 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语句可以内嵌在if子句中,又可以内嵌在else子句中。,例如:if()if()语句1 else 语句2 else if()语句3 else 语句4,16,【例4.4】猜数程序,和预定的数比较,并给出相应的提示。

7、,4.1.2 if语句的嵌套,1#include stdio.h2 void main()3 int number=200;4 int i;5 scanf(%d,13,17,1#include stdio.h2 void main()3 int a,b,c,max;4 printf(a,b,c=);5 scanf(%d,%d,%d,14,说明:内嵌的if语句既可以嵌套在if部分,也可以嵌套在else部分。,4.1.2 if语句的嵌套,【例4.5】求三个整数a,b,c中的最大数。,18,3.if 与else的配对规则:else总是与它上面最近的if配对。,特别注意:(1)要采用正确的缩进格式;(

8、2)不易弄清的地方要加上。,例4.5:7 if(ab)8 if(bc)9 max=a;10 else11 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 small!);11 else12 printf(Its right!);,19,问题,实现多分支结构的方法有哪些?,方法一:if-else if-else语句方法二:if语句的嵌套,20,1#include stdio.h2 void main()3 int a,b,c,max;4 p

9、rintf(a,b,c=);5 scanf(%d,%d,%d,14,用if-else if-else语句改写例4.5。,21,比较,方法一:ifelse if语句不仅要对多个条件进行并列测试,而且程序描述不够简洁。方法二:if语句的嵌套当分支较多时,嵌套的if语句层数多,程序冗长而且可读性降低。初学者要尽量避免使用if语句的嵌套来解决多分支问题。,22,4.2 switch语句,1.语句格式:switch(表达式)case 常量表达式1:语句1 case 常量表达式2:语句2 case 常量表达式n:语句n default:语句n+1,23,switch(表达式)case 常量表达式1:语句1

10、 case 常量表达式2:语句2 case 常量表达式n:语句n default:语句n+1,注意:1.可以是整型或字符型表达式;2.case后面必须是常量表达式,不能包含变量;3.每个常量表达式的值应互不相同;4.case语句先后顺序随意;5.若从上至下没有找到与表达式的值相匹配的case,含有default子句时,执行语句n+1。,4.2 switch语句,24,【例4.6】输入一个星期数字,输出其对应的英文单词。,4.2 switch语句,1#include stdio.h2 void main()3 int a;4 printf(please input a week number:)

11、;5 scanf(%d,15 16,25,注意使用break语句。程序修改如下:,4.2 switch语句,1#include stdio.h2 void main()3 int a;4 printf(please 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,注意:当多个常量表达式都执行同一组语句时,可将它们集中写在一起。,问

12、题:怎样使得 case语句数目较少?,4.2 switch语句,#include stdio.h void main()int month,day;printf(please input month:);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#i

13、nclude stdio.h/*例4.3*/2 void main()3 int score;5 printf(score=);6 scanf(%d,17,28,【例4.8】输入三个整数,输出最大数和最小数。,4.3 程序举例,1#include stdio.h2 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.h2 void main()3 4 float a,b;5 char

14、c;6 printf(请输入运算数和四则运算符如a+(-,*,/)b:);7 scanf(%f%c%f,15 16,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,

15、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,imagpart);printf(x2=%8.4f-%8.4fin,realpart,imagpart);,33,4.3 程序举例,注意:(1)disc代表b24ac,realpart代表实部,imagpart代表虚部,以增加可读性。(2)由于a,b,disc(即b24ac)为实数,而实数在计算和存储时会有一些微小的误差,因此不能直接进行如下判断:if(a=0.0)。所以采取的办法是判别a的绝对值fabs(a)是否小于一个很小的数(如10-6),如果小于此数,就认为a=0。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号