C语言程序课件ppt-第4章选择结构程序设计[谭浩强C程序设计(第四版)].ppt

上传人:君**** 文档编号:75816945 上传时间:2023-03-05 格式:PPT 页数:100 大小:2.62MB
返回 下载 相关 举报
C语言程序课件ppt-第4章选择结构程序设计[谭浩强C程序设计(第四版)].ppt_第1页
第1页 / 共100页
C语言程序课件ppt-第4章选择结构程序设计[谭浩强C程序设计(第四版)].ppt_第2页
第2页 / 共100页
点击查看更多>>
资源描述

《C语言程序课件ppt-第4章选择结构程序设计[谭浩强C程序设计(第四版)].ppt》由会员分享,可在线阅读,更多相关《C语言程序课件ppt-第4章选择结构程序设计[谭浩强C程序设计(第四版)].ppt(100页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第4章章 选择结构程序设计选择结构程序设计4.1选择结构和条件判断选择结构和条件判断4.2用用if语句实现选择结构语句实现选择结构4.3关系运算符和关系表达式关系运算符和关系表达式4.4逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式4.5条件运算符和条件表达式条件运算符和条件表达式4.6选择结构的嵌套选择结构的嵌套4.7用用switch语句实现多分支选择结构语句实现多分支选择结构4.8选择结构程序综合举例选择结构程序综合举例4.1 选择结构和条件判断选择结构和条件判断在现实生活在现实生活中中,需要进行判断和选择的,需要进行判断和选择的情况是很多的情况是很多的u如果你在家,我去拜访你如果你在家,

2、我去拜访你u如果考试不及格,要补考如果考试不及格,要补考u如果遇到红灯,要停车等待如果遇到红灯,要停车等待u周末我们去郊游周末我们去郊游u70岁以上的老年人,入公园免票岁以上的老年人,入公园免票4.1 选择结构和条件判断选择结构和条件判断在现实生活在现实生活中中,需要进行判断和选择的,需要进行判断和选择的情况是很多的情况是很多的处理处理这些这些问题,关键在于进行条件判断问题,关键在于进行条件判断由于程序处理问题的需要,在大多数程由于程序处理问题的需要,在大多数程序中都会包含选择结构,需要在进行下序中都会包含选择结构,需要在进行下一个操作之前先进行条件判断一个操作之前先进行条件判断4.1 选择结

3、构和条件判断选择结构和条件判断C语言有两种选择语句语言有两种选择语句:(1)if语句语句,实现两个分支的选择结构,实现两个分支的选择结构(2)switch语句语句,实现多分支的选择结构,实现多分支的选择结构4.1 选择结构和条件判断选择结构和条件判断例例4.1在例在例3.5的基础上对程序进行改进。的基础上对程序进行改进。题目要求题目要求是是求求方程的根。方程的根。由键盘输入由键盘输入a,b,c。假设。假设a,b,c的值任意,的值任意,并不保证并不保证。需要在程序中进行。需要在程序中进行判别,如果判别,如果,就计算并输出方,就计算并输出方程的两个实根,程的两个实根,否则否则就输出就输出“方程无实

4、根方程无实根”的信息的信息解题思路:解题思路:输入输入a,b,c计算计算discdisc0计算计算x1,x2输出无实根输出无实根输出输出x1,x2真真假假#include#includeintmain()doublea,b,c,disc,x1,x2,p,q;scanf(%lf%lf%lf,&a,&b,&c);disc=b*b-4*a*c;计算计算b2-4ac,disc的值变为的值变为-15if(disc0)printf(“hasnotrealrootsn”);elsep=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroot

5、s:nx1=%7.2fnx2=%7.2fn”,x1,x2);return0;-150为真为真#include#includeintmain()doublea,b,c,disc,x1,x2,p,q;scanf(%lf%lf%lf,&a,&b,&c);disc=b*b-4*a*c;计算计算b2-4ac,disc的值变为的值变为8if(disc0)printf(“hasnotrealrootsn”);elsep=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:nx1=%7.2fnx2=%7.2fn”,x1,x2);ret

6、urn0;80为假为假p的值变为的值变为-1q的值变为的值变为0.71x1的值变为的值变为-0.29x2的值变为的值变为-1.71if(disc0)printf(“hasnotrealrootsn”);elsep=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:nx1=%7.2fnx2=%7.2fn”,x1,x2);return0;选择结构选择结构,用用if语句实现语句实现的的if(disc0)printf(“hasnotrealrootsn”);elsep=-b/(2.0*a);q=sqrt(disc)/(2.0

7、*a);x1=p+q;x2=p-q;printf(“realroots:nx1=%7.2fnx2=%7.2fn”,x1,x2);return0;复合语句复合语句4.2 用用if语句实现选择结构语句实现选择结构4.2.1用用if语句处理选择结构举例语句处理选择结构举例4.2.2if语句的一般形式语句的一般形式4.2.1 用用if语句处理选择结构举例语句处理选择结构举例例例4.2输入两个实数,按代数值由小到输入两个实数,按代数值由小到大的顺序输出这两个数。大的顺序输出这两个数。解题思路:解题思路:u只需要做一次比较,然后进行一次交换即可只需要做一次比较,然后进行一次交换即可u用用if语句实现条件判

8、断语句实现条件判断u关键是怎样实现两个变量值的互换关键是怎样实现两个变量值的互换AB互换前互换前AB互换后互换后4.2.1 用用if语句处理选择结构举例语句处理选择结构举例ABC4.2.1 用用if语句处理选择结构举例语句处理选择结构举例ABC4.2.1 用用if语句处理选择结构举例语句处理选择结构举例ABC 4.2.1 用用if语句处理选择结构举例语句处理选择结构举例#includeintmain()floata,b,t;scanf(%f,%f,&a,&b);if(ab)t=a;a=b;b=t;printf(%5.2f,%5.2fn,a,b);return0;将将a和和b的值互换的值互换如果

9、如果ab#includeintmain()floata,b,t;scanf(%f,%f,&a,&b);if(ab)t=a;a=b;b=t;printf(%5.2f,%5.2fn,a,b);return0;选择结构,用选择结构,用if语句实现的语句实现的例例4.3输入输入3个数个数a,b,c,要求按由小,要求按由小到大的顺序输出。到大的顺序输出。解题思路:可以先用伪代码写出算法:解题思路:可以先用伪代码写出算法:uifab,a和和b对换对换(a是是a、b中的小者)中的小者)uifac,a和和c对换对换(a是三者中最小者)是三者中最小者)uifbc,b和和c对换对换(b是三者中次小者是三者中次小者

10、)u顺序输出顺序输出a,b,c#includeintmain()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.2fn,a,b,c);return0;如果如果 ab,将,将a和和b对换对换a是是a、b中的小者中的小者#includeintmain()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

11、=c;c=t;printf(%5.2f,%5.2f,%5.2fn,a,b,c);return0;如果如果 ac,将,将a和和c对换对换a是是三者三者中的小者中的小者#includeintmain()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.2fn,a,b,c);return0;如果如果 bc,将,将b和和c对换对换b是是三者三者中的中的次次小者小者4.2.2 if语句的一般形式语句的一般形式if(表达式表达式)

12、语句语句1else语句语句2关系表达式关系表达式逻辑表达式逻辑表达式数值表达式数值表达式方括号内的部分为可选的方括号内的部分为可选的4.2.2 if语句的一般形式语句的一般形式if(表达式表达式)语句语句1else语句语句2简单的语句简单的语句复合语句复合语句另一个另一个if语句语句等等最常用的最常用的3种种if语句语句形式形式:1.if(表达式表达式)语句语句1(没有没有else子句子句)2.if(表达式表达式)语句语句1else语句语句2(有有else子句子句)3.if(表达式)(表达式)语句语句elseif(表达式)(表达式)语句语句elseif(表达式)(表达式)语句语句 elseif

13、(表达式)(表达式)语句语句else语句语句m+1(在在else部分又嵌套了多层的部分又嵌套了多层的if语句语句)if(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;等价于等价于分号不能丢分号

14、不能丢说明:说明:(1)整个整个if语句可写在多行上,也可写在一行上语句可写在多行上,也可写在一行上但但都是一个整体,属于同一个语句都是一个整体,属于同一个语句(2)“语句语句1”“语句语句m”是是if中的内嵌语句中的内嵌语句内嵌语句也可以是一个内嵌语句也可以是一个if语句语句(3)“语句语句1”“语句语句m”可以是简单的语句,也可以是简单的语句,也可以是复合语句可以是复合语句4.3关系运算符和关系表达式关系运算符和关系表达式4.3.1关系运算符及其优先次序关系运算符及其优先次序4.3.2关系表达式关系表达式4.3.1关系运算符及其优先次序关系运算符及其优先次序关系运算符关系运算符:用来对两个

15、数值进行比较用来对两个数值进行比较的的比较运算符比较运算符语言提供种关系运算符:语言提供种关系运算符:(小于小于)=(小于或等于小于或等于)(大于大于)=(大于或等于大于或等于)=(等于等于)!=(不等于不等于)优先级相同优先级相同(高高)优先级相同优先级相同(低低)4.3.1关系运算符及其优先次序关系运算符及其优先次序关系关系、算术算术、赋值运算符赋值运算符的优先级的优先级算术运算符算术运算符 (高高)赋值运算符赋值运算符 (低低)关系运算符关系运算符 4.3.1关系运算符及其优先次序关系运算符及其优先次序ca+b等效于等效于c(a+b)ab=c等效于等效于(ab)=ca=bc等效于等效于a

16、=(bc等效于等效于a=(bc)4.3.2 关系表达式关系表达式关系表达式关系表达式u用关系运算符将两个数值或数值表达式连用关系运算符将两个数值或数值表达式连接起来的式子接起来的式子u关系表达式的值是一个逻辑值,即关系表达式的值是一个逻辑值,即“真真”或或“假假”u在在C的逻辑运算中,以的逻辑运算中,以“”代表代表“真真”,以,以“”代表代表“假假”4.4 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式4.4.1逻辑运算符及其优先次序逻辑运算符及其优先次序4.4.2逻辑表达式逻辑表达式4.4.3逻辑型变量逻辑型变量4.4.1 逻辑运算符及其优先次序逻辑运算符及其优先次序3种逻辑运算符:种逻辑运算

17、符:&(逻辑与逻辑与)|(逻辑或逻辑或)!(逻辑非逻辑非)&和和|是双目是双目(元元)运算符运算符!是一目是一目(元元)运算符运算符逻辑表达式逻辑表达式u用逻辑运算符将关系表达式或其他逻辑量连用逻辑运算符将关系表达式或其他逻辑量连接起来的式子接起来的式子4.4.1 逻辑运算符及其优先次序逻辑运算符及其优先次序判断判断年龄年龄在在13至至17岁岁之内?之内?age=13&age=17判断判断年龄小于年龄小于12或大于或大于65?age654.4.1 逻辑运算符及其优先次序逻辑运算符及其优先次序ab!a!ba&ba|b 真真真真假假假假真真真真真真假假假假真真假假真真假假真真真真假假假假真真假假假

18、假真真真真假假假假逻辑运算的真值表逻辑运算的真值表4.4.1 逻辑运算符及其优先次序逻辑运算符及其优先次序逻辑运算符的优先次序逻辑运算符的优先次序!&|(!为三者中最高为三者中最高)与其他运算符的优先次序与其他运算符的优先次序 !(高)(高)算术运算符算术运算符关系运算符关系运算符&和和|赋值运算符赋值运算符 (低)(低)4.4.2 逻辑表达式逻辑表达式逻辑表达式的值应该是逻辑量逻辑表达式的值应该是逻辑量“真真”或或“假假”编译系统在编译系统在表示表示逻辑运算逻辑运算结果结果时时u由于语言没有逻辑型数据,所以用整数由于语言没有逻辑型数据,所以用整数“”表示表示“逻辑真逻辑真”,用整数,用整数“

19、”表示表示“逻辑假逻辑假”。但在但在判断判断一个量是否为一个量是否为“真真”时时u以以0代表代表“假假”,以非,以非0代表代表“真真”注意:注意:将一个非零的数值认作为将一个非零的数值认作为“真真”4.4.2 逻辑表达式逻辑表达式(1)若若a=4,则,则!a的值为的值为0(2)若若a=4,b=5,则,则a&b的值为的值为1(3)a和和b值分别为值分别为4和和5,则则a|b的值为的值为1(4)a和和b值分别为值分别为4和和5,则则!a|b的值为的值为1(5)4&0|2的值为的值为14.4.2 逻辑表达式逻辑表达式修改后的修改后的逻辑运算真值表逻辑运算真值表ab!a!ba&ba|b 非非0非非00

20、011非非000101假假非非01001假假011004.4.2 逻辑表达式逻辑表达式判别某一年是否闰年,判别某一年是否闰年,用用逻辑表达式表示逻辑表达式表示闰年的条件是符合下面二者之一:闰年的条件是符合下面二者之一:能被能被4整除,但不能被整除,但不能被100整除,如整除,如2008能被能被400整除,如整除,如2000u(year%4=0&year100!=0)|year%400=0u如果表达式值为如果表达式值为1,则闰年;否则为非闰年,则闰年;否则为非闰年运算规则运算规则1)&:当当且且仅仅当当两两个个运运算算量量的的值值都都为为“真真”时时,运运算结果为算结果为“真真”,否则为,否则为

21、“假假”。2)|:当当且且仅仅当当两两个个运运算算量量的的值值都都为为“假假”时时,运运算结果为算结果为“假假”,否则为,否则为“真真”。3)!:当当运运算算量量的的值值为为“真真”时时,运运算算结结果果为为“假假”;当运算量的值为;当运算量的值为“假假”时,运算结果为时,运算结果为“真真”。例例如如,假假定定x=5,则则(x=0)&(x10)的的值值为为“真真”,(x5)的值为的值为“假假”。4.4.3 逻辑型变量逻辑型变量这是这是C99所增加的一种数据类型所增加的一种数据类型可以将关系运算和逻辑运算的结果存到可以将关系运算和逻辑运算的结果存到一个逻辑型变量中,以便于分析和运算一个逻辑型变量

22、中,以便于分析和运算4.5 条件运算符和条件表达式条件运算符和条件表达式有一种有一种if语句,当被判别的表达式的值语句,当被判别的表达式的值为为“真真”或或“假假”时,都执行一个赋值时,都执行一个赋值语句且向同一个变量赋值语句且向同一个变量赋值如:如:if(ab)max=a;elsemax=b;max=(a b)?a:b;条件运算符条件运算符4.5 条件运算符和条件表达式条件运算符和条件表达式有一种有一种if语句,当被判别的表达式的值语句,当被判别的表达式的值为为“真真”或或“假假”时,都执行一个赋值时,都执行一个赋值语句且向同一个变量赋值语句且向同一个变量赋值如:如:if(ab)max=a;

23、elsemax=b;max=(a b)?a:b;条件条件表达式表达式4.5 条件运算符和条件表达式条件运算符和条件表达式条件表达式的一般形式为条件表达式的一般形式为表达式表达式?表达式表达式:表达式表达式4.5 条件运算符和条件表达式条件运算符和条件表达式条件运算符的执行顺序:条件运算符的执行顺序:u求解表达式求解表达式1u若为非若为非0(真)则求解表达式(真)则求解表达式2,此时表达,此时表达式式2的值就作为整个条件表达式的值的值就作为整个条件表达式的值u若表达式若表达式1的值为的值为0(假),则求解表达式(假),则求解表达式3,表达式,表达式3的值就是整个条件表达式的值的值就是整个条件表达

24、式的值4.5 条件运算符和条件表达式条件运算符和条件表达式条件运算符优先于赋值运算符条件运算符优先于赋值运算符条件运算符的结合方向为条件运算符的结合方向为“自右至左自右至左”以下为合法的使用方法:以下为合法的使用方法:uab?(max=a):(max=b);uab?printf(“%d”,a):printf(“%d”,b);4.5 条件运算符和条件表达式条件运算符和条件表达式例例4.4输入一个字符,判别它是否大写输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到如果不是,不转换。然后输出最后得到的字符。的字符。4.

25、5 条件运算符和条件表达式条件运算符和条件表达式解题思路:用条件表达式来处理,当字解题思路:用条件表达式来处理,当字母是大写时,转换成小写字母,否则不母是大写时,转换成小写字母,否则不转换转换4.5 条件运算符和条件表达式条件运算符和条件表达式#includeintmain()charch;scanf(%c,&ch);ch=(ch=A&ch=Z)?(ch+32):ch;printf(%cn,ch);return0;4.6 选择结构的嵌套选择结构的嵌套在在if语句中又包含一个或多个语句中又包含一个或多个if语句称为语句称为if语句的嵌套语句的嵌套一般形式:一般形式:if()if()语句语句1el

26、se语句语句2elseif()语句语句3else语句语句4内嵌内嵌ifelse总是与它上面最总是与它上面最近的未配对的近的未配对的if配对配对4.6 选择结构的嵌套选择结构的嵌套在在if语句中又包含一个或多个语句中又包含一个或多个if语句称为语句称为if语句的嵌套语句的嵌套if()if()语句语句1else语句语句2内嵌内嵌if 限定了内嵌限定了内嵌if范围范围4.6 选择结构的嵌套选择结构的嵌套例例4.5有一函数有一函数:编一程序编一程序,输入一个输入一个x值值,要求输出相应要求输出相应的的y值。值。4.6 选择结构的嵌套选择结构的嵌套解题思路:解题思路:u用用if语句检查语句检查x的值,根

27、据的值,根据x的值决定赋予的值决定赋予y的值的值u由于由于y的可能值不是两个而是三个,因此不的可能值不是两个而是三个,因此不可能只用一个简单的可能只用一个简单的(无内嵌无内嵌if)的的if语句来语句来实现实现4.6 选择结构的嵌套选择结构的嵌套解题思路:解题思路:方法方法1(1)先后用先后用3个独立的个独立的if语句处理:语句处理:输入输入x若若x0,则则y=1输出输出x和和yscanf(%d,&x);if(x0)y=1;printf(x=%d,y=%dn,x,y);4.6 选择结构的嵌套选择结构的嵌套解题思路:解题思路:方法方法2(2)用一个嵌套的用一个嵌套的if语句处理:语句处理:输入输入

28、x若若x0,则则y=-1否则否则若若x=0,则则y=0否则否则y=1输出输出x和和yscanf(%d,&x);if(x0)y=-1;elseif(x=0)y=0;elsey=1;printf(x=%d,y=%dn,x,y);4.6 选择结构的嵌套选择结构的嵌套解题思路:解题思路:方法方法2(2)用一个嵌套的用一个嵌套的if语句处理:语句处理:输入输入x若若x0,则则y=-1否则否则若若x=0,则则y=0否则否则y=1输出输出x和和yscanf(%d,&x);if(x=0)if(x0)y=1;elsey=0;elsey=-1;printf(x=%d,y=%dn,x,y);提倡提倡内嵌内嵌if放在

29、放在else中中4.7 用用switch语句实现多分支选择结构语句实现多分支选择结构switch语句用来实现多分支选择结构语句用来实现多分支选择结构u学生成绩分类学生成绩分类85分以上为分以上为A等等7084分为分为B等等6069分为分为C等等u人口统计分类人口统计分类按年龄分为老、中、青、少、儿童按年龄分为老、中、青、少、儿童4.7 用用switch语句实现多分支选择结构语句实现多分支选择结构例例4.6要求按照考试成绩的等级输出百要求按照考试成绩的等级输出百分制分数段,分制分数段,A等为等为85分以上,分以上,B等为等为7084分,分,C等为等为6069分分,D等为等为60分以下分以下。成绩

30、的等级由键盘输入。成绩的等级由键盘输入。4.7 用用switch语句实现多分支选择结构语句实现多分支选择结构解题思路:解题思路:u判断出判断出这是一个多分支选择问题这是一个多分支选择问题u根据百分制分数将学生成绩分为根据百分制分数将学生成绩分为4个等级个等级u如果用如果用if语句语句,至少要用至少要用3层嵌套的层嵌套的if,进行,进行3次检查判断次检查判断u用用switch语句进行一次检查即可得到结果语句进行一次检查即可得到结果#includeintmain()chargrade;scanf(%c,&grade);printf(Yourscore:);switch(grade)caseA:pr

31、intf(85100n);break;caseB:printf(7084n);break;caseC:printf(6069n);break;caseD:printf(60n);break;default:printf(enterdataerror!n);return0;值为值为A#includeintmain()chargrade;scanf(%c,&grade);printf(Yourscore:);switch(grade)caseA:printf(85100n);break;caseB:printf(7084n);break;caseC:printf(6069n);break;case

32、D:printf(60n);break;default:printf(enterdataerror!n);return0;不能少不能少#includeintmain()chargrade;scanf(%c,&grade);printf(Yourscore:);switch(grade)caseA:printf(85100n);break;caseB:printf(7084n);break;caseC:printf(6069n);break;caseD:printf(60n);break;default:printf(enterdataerror!n);return0;值为值为C#include

33、intmain()chargrade;scanf(%c,&grade);printf(Yourscore:);switch(grade)caseA:printf(85100n);break;caseB:printf(7084n);break;caseC:printf(6069n);break;caseD:printf(60n);break;default:printf(enterdataerror!n);return0;值为值为F#includeintmain()chargrade;scanf(%c,&grade);printf(Yourscore:);switch(grade)caseA:p

34、rintf(85100n);break;caseB:printf(7084n);break;caseC:printf(6069n);break;caseD:printf(60n);break;default:printf(enterdataerror!n);return0;此行位置有问题,此行位置有问题,应如何修改?应如何修改?switch语句的作用是根据表达式的值,语句的作用是根据表达式的值,使流程跳转到不同的语句使流程跳转到不同的语句switch语句的一般形式语句的一般形式:switch(表达式)(表达式)case常量常量1:语句:语句1case常量常量2:语句:语句2 case常量常量n

35、:语句:语句ndefault:语句语句n+1整数类型整数类型(包括字符型包括字符型)switch语句的作用是根据表达式的值,语句的作用是根据表达式的值,使流程跳转到不同的语句使流程跳转到不同的语句switch语句的一般形式语句的一般形式:switch(表达式)(表达式)case常量常量1:语句:语句1case常量常量2:语句:语句2 case常量常量n:语句:语句ndefault:语句语句n+1不能相同不能相同执行过程执行过程u当当switch后面后面“表达式表达式”的值,与某个的值,与某个case后面的后面的“常常量表达式量表达式”的值相同时,就执行该的值相同时,就执行该case后面的语句(

36、组)后面的语句(组);当执行到;当执行到break语句时,跳出语句时,跳出switch语句,转向执行语句,转向执行switch语句的下一条。语句的下一条。u如果没有任何一个如果没有任何一个case后面的后面的“常量表达式常量表达式”的值,与的值,与“表达式表达式”的值匹配,则执行的值匹配,则执行default后面的语句(组)。后面的语句(组)。然后,再执行然后,再执行switch语句的下一条。语句的下一条。说明说明uswitch后面的后面的“表达式表达式”,可以是,可以是int、char和枚举型和枚举型中的一种。中的一种。u每个每个case后面后面“常量表达式常量表达式”的值,必须各不相同,否

37、则的值,必须各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的执行方案)。两种以上的执行方案)。ucase后面的常量表达式仅起语句标号作用,并不进行条件后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上再进行标号判断,所以必须加上break语句,以便结束语句,以便结束switch语句。语句。u多个多个case子句,可共用同一语句(组)。子句,可共用同一语句(组)。思考题:如果去掉程序中的所有:如果去

38、掉程序中的所有break语句,输出会语句,输出会如何?如何?scanf(%c,&grade);printf(Yourscore:);switch(grade)caseA:printf(85100n);break;caseB:printf(7084n);break;caseC:printf(6069n);break;caseD:printf(60n);break;default:printf(enterdataerror!n);scanf(%c,&grade);printf(Yourscore:);switch(grade)caseA:printf(85100n);break;caseB:pri

39、ntf(7084n);break;caseC:printf(6069n);break;caseD:printf(60n);break;default:printf(enterdataerror!n);scanf(%c,&grade);printf(Yourscore:);switch(grade)caseA:caseB:caseC:printf(6069n);break;caseD:printf(60n);break;default:printf(enterdataerror!n);例例4.7编写程序,用编写程序,用switch语句处理菜语句处理菜单命令。单命令。解题思路:在许多应用程序中,用

40、菜单对解题思路:在许多应用程序中,用菜单对流程进行控制,例如从键盘输入一个流程进行控制,例如从键盘输入一个A或或a字符,就会执行字符,就会执行A操作,输入一个操作,输入一个B或或b字符,就会执行字符,就会执行B操作,等等。操作,等等。#includeintmain()voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch)casea:caseA:action1(a,b);break;caseb:caseB:action2(a,b);break;default:putchar(a);retu

41、rn0;输入输入a或或A调用调用action1函数,执行函数,执行A操作操作void action1(int x,int y)printf(x+y=%dn,x+y);#includeintmain()voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch)casea:caseA:action1(a,b);break;caseb:caseB:action2(a,b);break;default:putchar(a);return0;输入输入b或或B调用调用action2函数,执行函数,执行B

42、操作操作void action2(int x,int y)printf(x*y=%dn,x*y);#includeintmain()voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch)casea:caseA:action1(a,b);break;caseb:caseB:action2(a,b);break;default:putchar(a);return0;输入其他字符输入其他字符发出警告发出警告这是一个非常简单的示意程序这是一个非常简单的示意程序实际应用中,所指定的操作可能比较复杂

43、:实际应用中,所指定的操作可能比较复杂:uA:输入全班学生各门课的成绩:输入全班学生各门课的成绩uB:计算并输出每个学生各门课的平均成绩:计算并输出每个学生各门课的平均成绩uC:计算并输出各门课的全班平均成绩:计算并输出各门课的全班平均成绩uD:对全班学生的平均成绩由高到低排序并输出:对全班学生的平均成绩由高到低排序并输出可以按以上思路编写程序,把各可以按以上思路编写程序,把各action函数函数设计成不同的功能以实现各要求设计成不同的功能以实现各要求4.8选择结构程序综合举例选择结构程序综合举例例例4.8写一程序,判断某一年是否闰年。写一程序,判断某一年是否闰年。解题思路:在前面已介绍过判别

44、闰年的方解题思路:在前面已介绍过判别闰年的方法法本例本例用不同的方法编写程序用不同的方法编写程序4.8选择结构程序综合举例选择结构程序综合举例用变量用变量leap代表是否闰年的信息。若闰代表是否闰年的信息。若闰年,令年,令leap=1;非闰年,;非闰年,leap=0。最。最后判断后判断leap是否为(真),若是,则是否为(真),若是,则输出输出“闰年闰年”信息信息参见教材参见教材图图4.13#includeintmain()intyear,leap;printf(enteryear:);scanf(%d,&year);if(year%4=0)if(year%100=0)if(year%400=

45、0)leap=1;elseleap=0;elseleap=1;elseleap=0;if(leap)printf(%dis,year);elseprintf(%disnot,year);printf(aleapyear.n);return0;标志变量标志变量与与if(leap!=0)含义相同含义相同#includeintmain()intyear,leap;printf(enteryear:);scanf(%d,&year);if(year%4=0)if(year%100=0)if(year%400=0)leap=1;elseleap=0;elseleap=1;elseleap=0;if(le

46、ap)printf(%dis,year);elseprintf(%disnot,year);printf(aleapyear.n);return0;采取锯齿形式采取锯齿形式#includeintmain()intyear,leap;printf(enteryear:);scanf(%d,&year);if(year%4=0)if(year%100=0)if(year%400=0)leap=1;elseleap=0;elseleap=1;elseleap=0;if(leap)printf(%dis,year);elseprintf(%disnot,year);printf(aleapyear.n

47、);return0;if(year%4!=0)leap=0;elseif(year%100!=0)leap=1;elseif(year%400!=0)leap=0;elseleap=1;#includeintmain()intyear,leap;printf(enteryear:);scanf(%d,&year);if(year%4=0)if(year%100=0)if(year%400=0)leap=1;elseleap=0;elseleap=1;elseleap=0;if(leap)printf(%dis,year);elseprintf(%disnot,year);printf(alea

48、pyear.n);return0;if(year%4=0&year%100!=0)|(year%400=0)leap=1;elseleap=0;例例4.9求求方程的解。方程的解。解题思路:解题思路:处理以下各情况处理以下各情况,不是二次方程,不是二次方程 ,有两个相等实根,有两个相等实根 ,有两个不等实根。,有两个不等实根。,有两个共轭复根。,有两个共轭复根。应当以应当以p+qi和和p-qi的形式输出复根的形式输出复根 其中,其中,p=-b/2a,q=()/2a参见教材参见教材图图4.14#include#includeintmain()doublea,b,c,disc,x1,x2,realp

49、art,imagpart;scanf(%lf,%lf,%lf,&a,&b,&c);printf(Theequation);if(fabs(a)=1e-6)printf(isnotaquadraticn);实型不能用实型不能用if(a=0)elsedisc=b*b-4*a*c;if(fabs(disc)1e-6)x1=(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/(2*a);printf(hasdistinctrealroots:%8.4fand%8.4fn,x1,x2);elserealpart=-b/(2*a);imagpart=sqrt(-disc)/(2*

50、a);printf(hascomplexroots:n);printf(%8.4f+%8.4fin“,realpart,imagpart);printf(%8.4f-%8.4fin,realpart,imagpart);return0;realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf(hascomplexroots:n);printf(%8.4f+%8.4fin“,realpart,imagpart);printf(%8.4f-%8.4fin,realpart,imagpart);return0;realpart=-b/(2*a);imag

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁