第4章-选择结构程序设计-谭浩强第五版

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

24.1选择结构和条件判断4.2用if语句实现选择结构4.3关系运算符和关系表达式4.4逻辑运算符和逻辑表达式4.5条件运算符和条件表达式4.6选择结构的嵌套4.7用switch语句实现多分支选择结构4.8选择结构程序综合举例3在现实生活中,需要进行判断和选择的情况是很多的如果你在家,我去拜访你如果考试不及格,要补考如果遇到红灯,要停车等待周末我们去郊游70岁以上的老年人,入公园免票4在现实生活中,需要进行判断和选择的情况是很多的处理这些问题,关键在于进行条件判断由于程序处理问题的需要,在大多数程序中都会包含选择结构,需要在进行下一个操作之前先进行条件判断5C语言有两种选择语句:(1)if语句,实现两个分支的选择结构(2)switch语句,实现多分支的选择结构6例4.1在例3.5的基础上对程序进行改进。题目要求是求方程的根。由键盘输入a,b,c。假设a,b,c的值任意,并不保证。需要在程序中进行判别,如果,就计算并输出方程的两个实根,否则就输出“方程无实根”的信息。02cbxax042acb042acb7解题思路:输入a,b,c计算discdisc0计算x1,x2输出无实根输出x1,x2假真8#includestdio.h#includemath.hintmain(){doublea,b,c,disc,x1,x2,p,q;scanf(%lf%lf%lf,&a,&b,&c);disc=b*b-4*a*c;计算b2-4ac,disc的值变为-159if(disc0)printf(“hasnotrealroots\n”);else{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);}return0;}-150为真计算b2-4ac,disc的值变为8选择结构,用if语句实现的复合语句104.2.1用if语句处理选择结构举例4.2.2if语句的一般形式11例4.2输入两个实数,按代数值由小到大的顺序输出这两个数。12解题思路:只需要做一次比较,然后进行一次交换即可用if语句实现条件判断关键是怎样实现两个变量值的互换★●AB互换前●★AB互换后13★●ABC★14★●ABC★●15ABC★●★●16#includestdio.hintmain(){floata,b,t;scanf(%f,%f,&a,&b);if(ab){t=a;a=b;b=t;}printf(%5.2f,%5.2f\n,a,b);return0;}将a和b的值互换如果ab17#includestdio.hintmain(){floata,b,t;scanf(%f,%f,&a,&b);if(ab){t=a;a=b;b=t;}printf(%5.2f,%5.2f\n,a,b);return0;}选择结构,用if语句实现的18例4.3输入3个数a,b,c,要求按由小到大的顺序输出。19解题思路:可以先用伪代码写出算法:ifab,a和b对换(a是a、b中的小者)ifac,a和c对换(a是三者中最小者)ifbc,b和c对换(b是三者中次小者)顺序输出a,b,c20#includestdio.hintmain(){floata,b,c,t;scanf(%f,%f,%f,&a,&b,&c);if(ab){t=a;a=b;b=t;}if(ac){t=a;a=c;c=t;}if(bc){t=b;b=c;c=t;}printf(%5.2f,%5.2f,%5.2f\n,a,b,c);return0;}如果ab,将a和b对换a是a、b中的小者如果ac,将a和c对换a是三者中的小者如果bc,将b和c对换b是三者中的次小者21if(表达式)语句1[else语句2]关系表达式逻辑表达式数值表达式方括号内的部分为可选的22if(表达式)语句1[else语句2]简单的语句复合语句另一个if语句等23最常用的3种if语句形式:1.if(表达式)语句1(没有else子句)2.if(表达式)语句1else语句2(有else子句)3.if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3┆elseif(表达式m)语句melse语句m+1(在else部分又嵌套了多层的if语句)24if(number500)cost=0.15;elseif(number300)cost=0.10;elseif(number100)cost=0.075;elseif(number50)cost=0.05;elsecost=0;if(number500)cost=0.15;elseif(number300)cost=0.10;elseif(number100)cost=0.075;elseif(number50)cost=0.05;elsecost=0;等价于分号不能丢25说明:(1)整个if语句可写在多行上,也可写在一行上但都是一个整体,属于同一个语句(2)“语句1”…“语句m”是if中的内嵌语句内嵌语句也可以是一个if语句(3)“语句1”…“语句m”可以是简单的语句,也可以是复合语句,但语法上只能是一条语句26switch语句用来实现多分支选择结构学生成绩分类85分以上为’A’等70~84分为’B’等60~69分为’C’等……人口统计分类按年龄分为老、中、青、少、儿童27例4.6要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分,D等为60分以下。成绩的等级由键盘输入。28解题思路:判断出这是一个多分支选择问题根据百分制分数将学生成绩分为4个等级如果用if语句,至少要用3层嵌套的if,进行3次检查判断用switch语句进行一次检查即可得到结果29switch语句的作用是根据表达式的值,使流程跳转到不同的语句switch语句的一般形式:switch(表达式){case常量1:语句段1case常量2:语句段2┇┇┇case常量n:语句段ndefault:语句段n+1}整数类型(包括字符型)不能相同30#includestdio.hintmain(){chargrade;scanf(%c,&grade);printf(Yourscore:);switch(grade){case'A':printf(85~100\n);break;case'B':printf(70~84\n);break;case'C':printf(60~69\n);break;case'D':printf(60\n);break;default:printf(enterdataerror!\n);}return0;}输入值为A不能少31scanf(%c,&grade);printf(Yourscore:);switch(grade){case'A':printf(85~100\n);case'B':printf(70~84\n);case'C':printf(60~69\n);case'D':printf(60\n);default:printf(enterdataerror!\n);}32scanf(%c,&grade);printf(Yourscore:);switch(grade){case'A‘:case'B‘:case'C':printf(60~69\n);break;case'D':printf(60\n);break;default:printf(enterdataerror!\n);}几个常量表达式共有一个语句段33例4.7编写程序,用switch语句处理菜单命令。解题思路:在许多应用程序中,用菜单对流程进行控制,例如从键盘输入一个’A’或’a’字符,就会执行A操作,输入一个’B’或’b’字符,就会执行B操作,等等。34#includestdio.hintmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break;case'b':case‘B’:action2(a,b);break;default:putchar(‘\a’);}return0;}输入a或A调用action1函数,执行A操作voidaction1(intx,inty){printf(x+y=%d\n,x+y);}35#includestdio.hintmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break;case'b':case‘B’:action2(a,b);break;default:putchar(‘\a’);}return0;}输入b或B调用action2函数,执行B操作voidaction2(intx,inty){printf(x*y=%d\n,x*y);}36#includestdio.hintmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break;case'b':case‘B’:action2(a,b);break;default:putchar(‘\a’);}return0;}输入其他字符发出警告374.3.1关系运算符及其优先次序4.3.2关系表达式38关系运算符:用来对两个数值进行比较的比较运算符C语言提供6种关系运算符:①<(小于)②<=(小于或等于)③>(大于)④>=(大于或等于)⑤==(等于)⑥!=(不等于)优先级相同(高)优先级相同(低)39关系、算术、赋值运算符的优先级算术运算符(高)赋值运算符(低)关系运算符40ca+b等效于c(a+b)ab==c等效于(ab)==ca==bc等效于a==(bc)a=bc等效于a=(bc)练习:d=b+2==3b-1==a!=c41关系表达式用关系运算符将两个数值或数值表达式连接起来的式子关系表达式的值是一个逻辑值,即“真”或“假”在C的逻辑运算中,以“1”代表“真”,以“0”代表“假”42intx=2,y=6;x=(y3)x=(xy)x=1x=043从键盘输入若干个数,请将大于3,小于5的数输出。数学上:3x5在C语言中,表示方式一样吗?x=1时x=4时(3x)5恒为1所以,关系运算的规则决定了:它无法进行多个数的比较(难以描述由几个简单条件组成的复合条件)443x5035xx3并且x53x&&x5454.4.1逻辑运算符及其优先次序4.4.2逻辑表达式4.4.3逻辑型变量463种逻辑运算符:&&(逻辑与)||(逻辑或)!(逻辑非)&&和||是双目(元)运算符!是一目(元)运算符逻辑表达式用逻辑运算符将关系表达式或其他逻辑量连接起来的式子47判断年龄在13至17岁之内?age=13&&age=17判断年龄小于12或大于65?age12||age6548ab!a!ba&&ba||b真真假假真真真假假真假真假真真假假真假假真真假假逻辑运算的真值表49逻辑运算符的优先次序!→&&→||(!为三者中最高)与其他运算符的优先次序!(高)算术运算符关系运算符&&和||赋值运算符(低)50!算术运算符====!=&&||=设x=1,y=2,c=0x=y==c&&!x+23(x=y==

1 / 88
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功