《第5章选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《第5章选择结构程序设计.ppt(101页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材第5章选择结构程序设计 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.1 5.1 选择结构的概念选择结构的概念普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.1 5.1 选择结构的概念选择结构的概念 到目前为止,所介绍的程序都属于顺序结构,顺序结构程序中的所有语句都将被按照书写的顺序执行一次。但是在实际
2、应用中,常常需要根据不同情况选择不同的执行语句,这时需要设计分支结构。例如:在第4章例4.11中,我们介绍了用海伦公式求三条边长a、b、c分别为3、4、5的三角形的面积s。这个程序的局限性很大,它不能判别三边长度是否满足构成三角形的条件。为此,将该问题的算法用流程图和N-S图描述如图5.1所示。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.1 5.1 选择结构的概念选择结构的概念56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材基于图5.1编写的程序如下:#include#include void main()float a,b,c,p,
3、s;printf(input a,b,c=);/*输出提示字符串input a,b,c=*/scanf(%f,%f,%f,&a,&b,&c);/*通过键盘输入三角形的三边a,b,c的值*/if(a0|b0|c0|(a+bc)|(b+ca)|(c+a (大于)=(大于等于)(小于),=,a+b 等价于 x(a+b)x=a=b 等价于 x=(a=b)x=yz 等价于 x=(yz)x=y=z 等价于 x=(y53,在C语言中,先计算85的结果为1,也就是为真,接着再来计算13的结果为0,也就是为假。当然这个计算过程与原式在数学中的含义(85并且53)是不一样的,这一点值得我们注意。56-普通高等教育
4、普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.2 5.2 关系运算符和关系表达式关系运算符和关系表达式5.2.2 关系表达式关系表达式 用关系运算符将两个表达式连接起来的表达式,称为关系表达式。表达式可以是算术表达式、关系表达式、逻辑表达式、赋值表达式以及字符表达式。其一般形式为:表达式 关系运算符 表达式 例如:a+bc+d ab=cd x!=d (x=2)=(b=a)等都是合法的关系表达式。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.2 5.2 关系运算符和关系表达式关系运算符和关系表达式 关系表达式的值是一个逻辑值,即“真”或“假”。C语言
5、中没有逻辑型数据,以1表示“真”,0表示“假”。C语言在判断一个量是否为真时,只要不是0就认为是真,只有等于0才认为是假。例如:a=1,b=2,c=3,则:cba:“cb”是真的,值为1,1a是假的,值为0,因此整个表达式的值为0。a-b=b-c:表达式的值为1。a90+3*c:a的ASCII码值是97,因此表达式的值是0。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.2 5.2 关系运算符和关系表达式关系运算符和关系表达式例5.1 输出各表达式的值。#include void main()char ch=k;int a=1,b=2,c=3;float x=1E
6、+2,y=6.5;printf(%d%d%dn,a+5=c+1,ch-10=97);printf(%d%dn,2E+2x=y+0.5);56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.2 5.2 关系运算符和关系表达式关系运算符和关系表达式程序运行结果:1 0 11 0程序说明:在程序中计算并输出了各种关系运算符的值。字符变量是以它对应的ASC码参与运算的,97+5=c+1,根据运算符的从左向右结合性,先算数后关系,而算数运算符也要按照先乘除,后加减,即-1-2*2=-5,该式不成立,其值为0。而2E+2x1E+2值为1,然后1c)&(x+y)c&x+yb (a%
7、2=0)&(b%2!=0)可以写成 a%2=0&b%2!=0 (x7)可以写成 x7 (!x)&y=z)可以写成 !x&y3&85,由于53为真,85也为真,其结果也为真。逻辑表达式53&59,由于53为真,510为假,其结果为假。2或运算求值规则 或运算“|”参与运算的两个量只要有一个为真时,结果就为真。两个量都为假时,结果才为假。例如:逻辑表达式515,由于515也为假,其结果也就为假。3非运算求值规则 非运算“!”参与运算量为真时,结果为假;参与量为假时,结果为真。例如:逻辑表达式!55的结果为假,因为55的值为真,所以!55的值为假。56-普通高等教育普通高等教育“十一五十一五”国家级
8、规划教材国家级规划教材5.3 5.3 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式这3种逻辑运算符的运算规则,可用表5-1表示。表表5-1 逻辑运算真值表逻辑运算真值表56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.3 5.3 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式由逻辑表达式的求值规则可以总结如下:(1)逻辑运算符两侧的运算对象,除可以是0和非0的整数外,也可以是其他任何类型的数据。如是实型和字符型等。(2)在计算逻辑表达式时,只有在必须执行下一个表达式才能 求解时,才求解该表达式,即并不是所有的表达式都被求解。逻辑与运算表达式中,只要前面有一个表达式被判
9、定为“假”系统不再判定或求解其后的表达式,整个表达式的值为0。逻辑或运算表达式中,只要前面有一个表达式被判定为“真”系统不再判定或求解其后的表达式,整个表达式的值为1。例如:对于逻辑表达式:a|&b|c 当a=1(非0)时,表达式的值为1,不必计算判断b、c;当a=0时,才判断b,如b=1,则表达式的值为1,不必计算判断c;只有当a=0、b=0时,才判断c。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.3 5.3 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式例例5.2 输出各逻辑表达式的值。输出各逻辑表达式的值。#include void main()char
10、c=k;int i=1,j=2,k=3;float x=3e+3,y=0.95;printf(%d,%dn,!x*!y,!x);printf(%d,%dn,x|i&j-3,ij&xy);printf(%d,%dn,i=5&c&(j=8),x+y|i+j+k);程序运行结果:程序运行结果:0,01,00,156-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.3 5.3 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式程序说明:在程序中计算并输出了各种逻辑运算符的值。!x和!y分别为“0”,!x*!y也为“0”,因此输出的值为“0”。由于x为“非0”,所以!x的逻辑值为“0”
11、。对x|i&j-3式,先计算j-3的值为非“0”,再求i&j-3的逻辑值为“1”,所以x|i&j-3的逻辑值为“1”。对ij&xy式,由于ij的值为“1”,而xy为“0”,即表达式的值为“1”和“0”相与的结果,最后为“0”。对于i=5&c&(j=8)式,由于i=5为假,即值为“0”,该表达式由两个与运算组成,所以整个表达式的值为“0”。对于x+y|i+j+k,由于x+y的值为“非0”,所以整个或表达式的值为“1”。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.3 5.3 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式例例5.3 分析下面程序执行后的输出结果分析下
12、面程序执行后的输出结果#include void main()int a=1,b=1,c=1;printf(%dn,+a|+b&+c);printf(%dt%dt%dn,a,b,c);printf(%dn,+a&+b|+c);printf(%dt%dt%dn,a,b,c);printf(%dn,-a|-b|-c);printf(%dt%dt%dn,a,b,c);printf(%dn,-a&-b&-c);printf(%dt%dt%dn,a,b,c);printf(%dn,-a|-b&-c);printf(%dt%dt%dn,a,b,c);56-普通高等教育普通高等教育“十一五十一五”国家级规划
13、教材国家级规划教材5.3 5.3 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式程序运行结果:程序运行结果:1 1 2 1 1 2 1 1 1 1 3 2 1 3 2 1 1 1 2 2 1 2 2 1 0 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.3 5.3 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式分析:根据在计算逻辑表达式时,只有在必须执行下一个表达式才能求解时,才求解该表达式的方法,在第一个printf()函数中,首先计算“|”的左边部分。如果“|”的左值为非0,则不再求右值。因此,+a的值
14、为2,所以不再求+b&+c的值了,因而,不执行+b和+c。由此得知,整个逻辑表达式的值为1,a、b、c的值分别为2、1、1。故第一个printf()函数的输出结果为:1,而第二个printf()函数的输出结果为:2 1 1。按照此法,可以求出其他的结果。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句 选择结构程序设计中条件语句的作用是,使程序按某种条件有选择地执行一条或多条语句。用if语句可以构成选择(分支)结构。它根据给定的条件进行判
15、断,以决定执行某个分支程序段。C语言的if语句有3 种基本形式。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句5.4.1 if语句的语句的3种形式种形式1 第一种形式(单分支选择结构)语句格式:if(表达式)语句;语句功能:首先计算表达式的值,若表达式的值为非0,则执行语句;若表达式的值为0,则该语句不起作用,继续执行下面的语句。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例5.4 任意输入两个整数,
16、输出其中的大数。5.4 if5.4 if语句语句56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句#include void main()int a,b,max;printf(input a,b=);scanf(%d%d,&a,&b);max=a;/*把a先赋予变量max*/if(maxb)/*如max小于b,则把b赋予max*/max=b;printf(max=%dn,max);程序运行结果:input a,b=5 3max=5 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句2
17、第二种形式(双分支选择结构)语句格式:if(表达式)语句1;else 语句2;语句功能:首先计算表达式的值,若表达式的值为非0,则执行语句1,否则执行语句2。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句例5.5 任意输入两个整数,输出其中的大数。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句#include void main()int a,b;printf(input
18、 a,b=);scanf(%d%d,&a,&b);if(ab)printf(max=%dn,a);else printf(max=%dn,b);程序运行结果:input a,b=33 55max=55 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句3 第三种形式(多分支选择结构)前两种形式的if语句一般用于两个分支的情况。当有多个分支选择时,可采用下列多分支选择结构。语句格式:if(表达式1)语句1;else if(表达式2)语句2;else if(表达式n)语句n;else 语句n+1;语句功能:首先计算表达式1的值,若表达式1的值
19、为非0,则执行语句1,否则计算表达式2的值,若表达式2的值为非0,则执行语句2,否则计算表达式3的值,若表达式3的值为非0,则执行语句3,所有的表达式的值都是0时,执行语句n+1。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句例5.6 晨光小区要举行跳棋比赛,比赛要根据居民的岁数分组。编写程序输入一个居民的岁数,然后根据表5-
20、2将其分组,输出分组的结果(姓名用编号代替)。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句#include void main()int age,numb;char group;printf(input Number:);scanf(%d,&numb);printf(input age:);scanf(%d,&age);if
21、(age55)/*岁数大于55岁在第4组*/group=4;else if(age40)/*岁数大于40岁在第3组*/group=3;else if(age17)/*岁数大于17岁在第2组*/group=2;else group=1;/*岁数小于17岁在第1组*/printf(The No.%d is in the group%cn,numb,group);程序运行结果:程序运行结果:input Number:3 input age:61The No.3 is in the group 4input Number:55 input age:26The No.55 is in the group
22、 2 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句说明:1、表达式一般为关系表达式或逻辑表达式,C语言在判断时只要不 是0,就认为是真,只有0时才认为是假,因此表达式可以是任意 类型的表达式,这是C语言与其它高级语言的不同之处。例如:if(c=getchar()printf(“%c”,c);输入一个字符,赋给变量c只要输入的不是0,就输出输入的字符。2、分号是C语句必备的成分,因此if和else后面的语句都必须有分号。例如:if(ab)printf(“%d,%dn”,a,b);else printf(“%d,%dn”,a,b);56
23、-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句3、语句可以是一个简单语句,也可以是复合语句。当条件成立或 不成立时,执行的语句不止一条语句时,必须使用复合语句。例如:将变量a,b中大的放到a中,小的放到b中。a=5,b=9或a=9,b=5 if(ab)t=a;a=b;b=t;执行后都可得到:a=9,b=5 如果写成:if(ab)t=a;a=b;b=t;a=5,b=9执行后可得到:a=9,b=5 a=9,b=5执行时“ab”为假,“t=a”不执行,但“a=b”和“b=t”要执行,若t没有赋过值,则会出错。56-普通高等教育普通高等教育“十一
24、五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句例5.7 任意输入两个整数,按代数值从小到大的顺序输出这2个整数。#include void main()int a,b,t;printf(input a,b=);scanf(%d%d,&a,&b);if(ab)t=a;a=b;b=t;/*实现a和b的互换*/printf(%5d%5dn,a,b);程序运行结果:input a,b=55 3333 55 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句例5.8 任意输入三个整数,按代数值从小到大的顺序输出。#inclu
25、de void main()int a,b,c,t;printf(input a,b,c=);scanf(%d%d%d,&a,&b,&c);if(ab)/*实现a和b的互换,即a是a,b中的小者*/t=a;a=b;b=t;if(ac)/*实现a和c的互换,即a是a,c中的小者,因此a是三者中最小者*/t=a;a=c;c=t;if(bc)/*实现b和c的互换,即b是b,c中的小者,也是三者中次小者*/t=b;b=c;c=t;printf(%5d%5d%5dn,a,b,c);程序运行结果:input a,b=55 33 6633 55 6656-普通高等教育普通高等教育“十一五十一五”国家级规划教
26、材国家级规划教材5.4 if5.4 if语句语句5.4.2 if语句的的嵌套 在if语句中又包含一个或多个if语句,称为if语句的嵌套。一般形式如下:1.if(表达式)if(表达式)语句1;else 语句2;else if(表达式)语句3;else 语句4;2.if(表达式)if(表达式)语句1;else 语句2;else 语句3;56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句3.if(表达式)语句1;else if(表达式)语句2;else 语句3;注意:else 总是与它上面最近的尚未与else匹配的if配对。一般情况下,if与e
27、lse的数目相同。如果if与else的数目不相同,为实现程序设计者的目的,可以用花括号来确定配对关系。例如:if(表达式1)if(表达式2)语句1;else 语句2;这时 限定了内嵌的if语句的范围,因此else与第一个if匹配。如果没有,则else与第二个if匹配。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句例5.9 修改例5.6,排除不可能的岁数。例5.6 并不是一个完整的程序,它要求输入的岁数应该是普通人的年龄,否则不能给出正确结果。例如输入-5岁或150岁,都将被认为是正确的。使用嵌套的if语句则可以排除不可能的岁数。例5.
28、6 晨光小区要举行跳棋比赛,比赛要根据居民的岁数分组。编写程序输入一个居民的岁数,然后根据表5-2将其分组,输出分组的结果(姓名用编号代替)。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句#include void main()int age,numb;char group;printf(input number:);scanf(%d,&numb);printf(input age:);scanf(%d,&age);if(age0&age55)/*岁数大于岁数大于55岁在第岁在第4组组*/group=4;else if(age40)/
29、*岁数大于岁数大于40岁在第岁在第3组组*/group=3;else if(age17)/*岁数大于岁数大于17岁在第岁在第2组组*/group=2;else group=1;/*岁数小于岁数小于17岁在第岁在第1组组*/printf(The No.%d is in the group%cn,numb,group);else printf(Data error!n);/*提示输入数据有误提示输入数据有误*/程序运行结果:程序运行结果:input number:3 input age:61The No.3 is in the group 4input number:-3 Data error!i
30、nput number:151 Data error!56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句#include#include void main()float x,y;printf(input x=);scanf(%f,&x);if(x7)y=(x-5)/3;else y=sqrt(7-x)+log(x-2);printf(x=%7.3f y=%7.3fn,x,y);程序运行结果:程序运行结果:input x=1 x=1.
31、000 y=0.500input x=8 x=8.000 y=1.000 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.5 5.5 条件运算符和条件表达式条件运算符和条件表达式普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.5 5.5 条件运算符和条件表达式条件运算符和条件表达式 条件运算符为?和:,它是C语言提供的惟一一个三目运算符,即有三个参与运算的量。由条件运算符连接的式子称为条件表达式。其一般形式为:表达式1?表达式2:表达式3 其求值规则为:先求解表达式1的值,若表达式1的值非0(真),则表达式2的值为整个条件表达式的值,否则表
32、达式3的值为整个条件表达式的值。例如:53?6:20的值6,5b)max=a;else max=b;可用条件表达式写为:max=(ab)?a:b;56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.5 5.5 条件运算符和条件表达式条件运算符和条件表达式使用条件表达式时,还应注意以下几点:条件运算符的优先级高于赋值运算符,低于关系运算符和算术运算符。例如:max=ab?a:(b+1);可以去掉括号而写为max=ab?a:b+1;条件运算符的结合方向为“自右至左”。例如:ab?a:cd?c:d 相当于:ab?a:(cd?c:d)。这也是条件表达式嵌套的情形,即其中的表达
33、式3又是一个条件表达式。条件表达式不能取代一般的if语句,只有if语句中内嵌的语句为赋值语句且两个分支都给同一个变量赋值时才能代替if语句。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.5 5.5 条件运算符和条件表达式条件运算符和条件表达式条件表达式中,表达式1的类型可以与表达式2和表达式3的类型不一致。例如:a?x:y 表达式2和表达式3的类型也可以不一致(例如,a为整型或实型变量,而x、y为字符型变量),此时条件表达式的值为二者中较高的类型。例如:ab?2:?2.5 此时如果ab为真,则条件表达式的值应为2,但由于2.5是实 型,比整型高,因此,把表达式1
34、转成实型2.0。条件运算符为?和:是一对运算符,不能分开单独使用。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.5 5.5 条件运算符和条件表达式条件运算符和条件表达式例5.11 输入一个字符,如果是小写字母,则转成对应的大写 字母,其它字符和大写字母原样不变。#include void main()char ch;printf(input one char:);ch=getchar();/*输入一个字符*/ch=ch=a&ch=z?ch-32:ch;putchar(ch);putchar(n);程序运行结果:程序运行结果:input one char:h Hi
35、nput one char:A A 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.5 5.5 条件运算符和条件表达式条件运算符和条件表达式例5.12 根据输入的百分制成绩,输出相应的分数等级A、B、C。即输入成绩,成绩大于等于80分的同学,用A表示,6079 分的用B表示,60 分以下的用C表示。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.5 5.5 条件运算符和条件表达式条件运算符和条件表达式#include void main()int score;char grade;printf(input score=);scanf(
36、%d,&score);grade=score=80?A:(score=60?B:C);printf(The%d is belong to%cn,score,grade);程序运行结果:input score=55The 55 is belong to Cinput score=95The 95 is belong to A56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.6 switch5.6 switch语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.6 switch5.6 switch语句语句 前面介绍的if语句,常用于两种情况的
37、选择结构,要表示两种以上条件的选择结构,则要用if语句的嵌套形式,但如果嵌套的if语句比较多时,程序比较冗长且可读性降低。在C语言中,可直接用switch语句来实现多种情况的选择结构。其一般形式如下:switch(表达式)case 常量表达式1:语句1;case 常量表达式2:语句2;case 常量表达式3:语句3;case 常量表达式n:语句n;default 语句n+1;/*根据需要可有可无*/56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.6 switch5.6 switch语句语句 switch语句的执行过程:首先计算表达式的值,并逐个与case后面的常量
38、表达式的值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后面的语句。如表达式的值与所有case后面的常量表达式的值均不相等时,则执行default后面的语句(如果没有default部分,则不执行switch语句中的任何语句,而直接去执行switch后面的语句)。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.6 switch5.6 switch语句语句例如:switch(class)case A:printf(“GREAT!n”);case B:printf(“GOOD!n”);case C:print
39、f(“OK!n”);case D:printf(“NO!n”);default:printf(“ERROR!n”);若若class的值为的值为B,则输出的结果则输出的结果是:是:GOOD!OK!NO!ERROR!若若class的值为的值为D,则输出的结果则输出的结果是:是:NO!ERROR!若若class的值为的值为A,则输出的结果则输出的结果是:是:GREAT!GOOD!OK!NO!ERROR!switch语句的功能是:根据语句的功能是:根据switch后面表达式的值找到后面表达式的值找到匹配的入口处,就从此入口匹配的入口处,就从此入口处开始执行下去,不再进行处开始执行下去,不再进行判断。判
40、断。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.6 switch5.6 switch语句语句说明:(1)switch后面常量表达式的类型,可以是整型或字符型,也 可以是枚举类型,不能是上述3种类型以外的类型。(2)常量表达式的类型应与switch后面表达式的类型一致。(3)case后面常量表达式的值必须互不相同,否则会出现相互 矛盾的现象。例如:switch(ch)case 2+3:语句m;case 8-3:语句n;是不允许的。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.6 switch5.6 switch语句语句(4)多个c
41、ase可以共用一组执行语句。例如:switch(ch)case A:case B:case C:case D:printf(“=60n”);本switch语句表示当ch的值为A、B、C、D时,都会执行printf(“=60n”)。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.6 switch5.6 switch语句语句(5)switch结构可以嵌套,即在一个switch语句中嵌套另一个 switch语句,这时可以用break语句使流程跳出switch结 构,但是要注意break只能跳出最内层的switch语句。int x=1,y=0;switch(x)case
42、1:switch(y)case 0:printf(“x=1 y=0n”);break;case 1:printf(“y=1n”);break;case 2:printf(“x=2n”);程序段的运行结果:x=1 y=0 x=256-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.6 switch5.6 switch语句语句例5.13 从键盘上输入一个数字,输出一个有关星期几的 英文单词。#include void main()int a;printf(input integer number:);scanf(%d,&a);56-普通高等教育普通高等教育“十一五十一五”国
43、家级规划教材国家级规划教材5.6 switch5.6 switch语句语句 switch(a)/*a逐个与case后面的常量比较*/case 1:printf(Mondayn);/*如果a=1则输出Monday*/break;/*跳出switch语句*/case 2:printf(Tuesdayn);break;case 3:printf(Wednesdayn);break;case 4:printf(Thursdayn);break;case 5:printf(Fridayn);break;case 6:printf(Saturdayn);break;case 7:printf(Sunday
44、n);break;default:printf(Input error!n);/*如果输入不是1到7的数字,显示错误信息*/56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.6 switch5.6 switch语句语句程序运行结果:input integer number:5Fridayinput integer number:55Input error!56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例例5.1
45、4 编写一个程序,求一元二次方程的根。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例#include#include void main()float a,b,c,d,r,p;float x1,x2;printf(input a,b,c=);scanf(%f,%f,%f,&a,&b,&c);if(fabs(a)=1e-6)if
46、(fabs(b)=1e-6)printf(no answer!n);/*输出方程无解*/else printf(x=%fn,-c/b);/*直接输出一个实根*/else56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例 d=b*b-4*a*c;if(fabs(d)1e-6)x1=(-b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a);printf(x1=%ftx2=%fn,x1,x2);/*输出两个不相等的实根*/else r=-b/(2*a);p=sqrt(-d)/(2*a);printf(x1=%f+%finx2
47、=%f-%fin,r,p,r,p);/*输出两个共轭复根*/56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例程序运行结果:input a,b,c=2,6,1x1=-0.177124 x2=-2.822876input a,b,c=1,3,5x1=-1.500000+1.658312ix1=-1.500000-1.658312iinput a,b,c=2,4,2x1=x2=-1.000000input a,b,c=0,0,1No answer!56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举
48、例程序举例例5.15 编写一个程序,从键盘上输入一个用整数表示的年份,判断该年份是否为闰年。判断一个用整数表示的年份是不是闰年的条件是,该年份满足下面两个条件之一:(1)年份能被400整除;(2)年份能被4整除、但不能被100整除。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例#include void main()int y
49、ear,flag;printf(input a year:);/*提示输入年份*/scanf(%d,&year);/*输入年份*/if(year%400!=0)/*如果不能被400整除*/if(year%4=0)/*如果被4整除*/if(year%100=0)/*如果被100整除*/flag=0;/*置为非闰年*/else flag=1;/*置为闰年*/56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例else flag=0;/*置为非闰年*/else /*如果被400整除*/flag=1;/*置为闰年*/if(flag=0)printf
50、(%d is not leap year.n,year);/*输出不是闰年信息*/else printf(%d is leap year.n,year);/*输出是闰年信息*56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例程序运行结果:input a year:20042004 is not leap year.input a year:20052005 is not leap year.56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例判断一个用整数表示的年份是不是闰年,用逻辑表