第5章选择结构程序设计

上传人:pu****.1 文档编号:579438563 上传时间:2024-08-26 格式:PPT 页数:101 大小:1.18MB
返回 下载 相关 举报
第5章选择结构程序设计_第1页
第1页 / 共101页
第5章选择结构程序设计_第2页
第2页 / 共101页
第5章选择结构程序设计_第3页
第3页 / 共101页
第5章选择结构程序设计_第4页
第4页 / 共101页
第5章选择结构程序设计_第5页
第5页 / 共101页
点击查看更多>>
资源描述

《第5章选择结构程序设计》由会员分享,可在线阅读,更多相关《第5章选择结构程序设计(101页珍藏版)》请在金锄头文库上搜索。

1、普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材第第5 5章章 选择结构程序设计选择结构程序设计普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.1 选择结构的概念选择结构的概念普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.1 5.1 选择结构的概念选择结构的概念 到目前为止,所介绍的程序都属于顺序结构,顺序结构程序中的所有语句都将被按照书写的顺序执行一次。但是在实际应用中,常常需要根据不同情况选择不同的执行语句,这时需要设计分支结构。 例如:在第4章例4.11中,我们介绍了用海伦公式求三条边长a、b、c分别为3、4、5的三角

2、形的面积s。这个程序的局限性很大,它不能判别三边长度是否满足构成三角形的条件。 为此,将该问题的算法用流程图和N-S图描述如图5.1所示。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.1 5.1 选择结构的概念选择结构的概念56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材基于图5.1编写的程序如下:#include #include void main() float a,b,c,p,s; printf(input a,b,c=); /*输出提示字符串input a,b,c= */ scanf(%f,%f,%f,&a,&b,&c); /

3、* 通过键盘输入三角形的三边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-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.2 5.2 关系运算符和关系表达式关系运算符和关系表达式5.2.

4、2 关系表达式关系表达式 用关系运算符将两个表达式连接起来的表达式,称为关系表达式。表达式可以是算术表达式、关系表达式、逻辑表达式、赋值表达式以及字符表达式。 其一般形式为:表达式 关系运算符 表达式 例如: a+bc+d ab=cd x!=d (x=2)=(b=a) 等都是合法的关系表达式。 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.2 5.2 关系运算符和关系表达式关系运算符和关系表达式 关系表达式的值是一个逻辑值,即“真”或“假”。C语言中没有逻辑型数据,以1表示“真”,0表示“假”。C语言在判断一个量是否为真时,只要不是0就认为是真,只有等于0才认为

5、是假。 例如: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+2,y=6.5; printf(%d %d %dn,a+5=c+1,ch-10=97);

6、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%2=0)&(b%2!=0) 可以写成 a%2=0&b%2!=0 (x7) 可以写

7、成 x7 (!x)&y=z) 可以写成 !x&y3&85,由于53为真,85也为真,其结果也为真。逻辑表达式53&59,由于53为真,510为假,其结果为假。 2或运算求值规则 或运算“|”参与运算的两个量只要有一个为真时,结果就为真。两个量都为假时,结果才为假。 例如:逻辑表达式515,由于515也为假,其结果也就为假。 3非运算求值规则 非运算“!”参与运算量为真时,结果为假;参与量为假时,结果为真。例如:逻辑表达式!55的结果为假,因为55的值为真,所以!55的值为假。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.3 5.3 逻辑运算符和逻辑表达式逻辑运算

8、符和逻辑表达式这3种逻辑运算符的运算规则,可用表5-1表示。表表5-1 逻辑运算真值表逻辑运算真值表56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.3 5.3 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式由逻辑表达式的求值规则可以总结如下:(1)逻辑运算符两侧的运算对象,除可以是0和非0的整数外,也可以是其他任何类型的数据。如是实型和字符型等。(2)在计算逻辑表达式时,只有在必须执行下一个表达式才能 求解时,才求解该表达式,即并不是所有的表达式都被求解。 逻辑与运算表达式中,只要前面有一个表达式被判定为“假”系统不再判定或求解其后的表达式,整个表达式的值为0。 逻

9、辑或运算表达式中,只要前面有一个表达式被判定为“真”系统不再判定或求解其后的表达式,整个表达式的值为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 c=k; int i=1,j=2,k=3; float

10、 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”。对x|i&j-3式,先计算j-3的

11、值为非“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 分析下面程序执行后的输出结果分析下面程序执行后的输出结果#inclu

12、de 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的值为2,所

14、以不再求+b&+c的值了,因而,不执行+b和+c。 由此得知,整个逻辑表达式的值为1,a、b、c的值分别为2、1、1。故第一个printf()函数的输出结果为:1,而第二个printf()函数的输出结果为:2 1 1。按照此法,可以求出其他的结果。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.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

17、.4 if语句语句2第二种形式(双分支选择结构) 语句格式: 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

18、 a,b; printf(input 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; el

19、se 语句n+1;语句功能: 首先计算表达式1的值,若表达式1的值为非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 晨光小区要举行跳棋比赛,比

20、赛要根据居民的岁数分组。 编写程序输入一个居民的岁数,然后根据表5-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,&num

21、b); printf(input age:); scanf(%d,&age); if(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 t

22、he group 4input Number:55 input age:26The No.55 is in the group 2 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句说明:1、表达式一般为关系表达式或逻辑表达式,C语言在判断时只要不 是0,就认为是真,只有0时才认为是假,因此表达式可以是任意 类型的表达式,这是C语言与其它高级语言的不同之处。 例如: if(c=getchar( ) printf(“%c”,c); 输入一个字符,赋给变量c只要输入的不是0,就输出输入的字符。2、分号是C语句必备的成分,因此if和else后面

23、的语句都必须有分号。 例如: if(ab) printf(“%d,%dn”,a,b); else printf(“%d,%dn”,a,b);56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材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执行后可得到:

24、a=9,b=5 a=9,b=5执行时“ab”为假,“t=a”不执行,但“a=b”和“b=t”要执行,若t没有赋过值,则会出错。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材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 33

25、33 55 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句例5.8 任意输入三个整数,按代数值从小到大的顺序输出。#include 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中

26、的小者,也是三者中次小者*/ t=b; b=c; c=t; printf(%5d%5d%5dn,a,b,c);程序运行结果:input a,b=55 33 6633 55 6656-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材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-

27、普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句3. if(表达式) 语句1; else if(表达式) 语句2; else 语句3; 注意:else 总是与它上面最近的尚未与else匹配的if配对。 一般情况下,if与else的数目相同。如果if与else的数目不相同,为实现程序设计者的目的,可以用花括号来确定配对关系。 例如:if(表达式1) if(表达式2) 语句1; else 语句2; 这时 限定了内嵌的if语句的范围,因此else与第一个if匹配。如果没有 ,则else与第二个if匹配。56-普通高等教育普通高等教育“十一五十一五”

28、国家级规划教材国家级规划教材5.4 if5.4 if语句语句例5.9 修改例5.6,排除不可能的岁数。 例5.6 并不是一个完整的程序,它要求输入的岁数应该是普通人的年龄,否则不能给出正确结果。例如输入-5岁或150岁,都将被认为是正确的。使用嵌套的if语句则可以排除不可能的岁数。例5.6 晨光小区要举行跳棋比赛,比赛要根据居民的岁数分组。 编写程序输入一个居民的岁数,然后根据表5-2将其分组,输出分组的结果(姓名用编号代替)。 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句#include void main( ) int age,

29、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) /* 岁数大于岁数大于40岁在第岁在第3组组 */ group=3; else if(age17) /* 岁数大于岁数大于17岁在第岁在第2组组 */ group=2; else group=1; /* 岁数小于岁数小于17岁在第岁在第1组组 */ printf(The No.

30、%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!input number:151 Data error! 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.4 if5.4 if语句语句56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.

31、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.000 y= 0.500input x=8 x= 8.000 y= 1.000 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.5 条件运算符和条件表达式条件运算符和条件表达式普通高等教育

32、普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.5 5.5 条件运算符和条件表达式条件运算符和条件表达式 条件运算符为?和:,它是C语言提供的惟一一个三目运算符,即有三个参与运算的量。由条件运算符连接的式子称为条件表达式。其一般形式为: 表达式1 ?表达式2 :表达式3 其求值规则为:先求解表达式1的值,若表达式1的值非0(真),则表达式2的值为整个条件表达式的值,否则表达式3的值为整个条件表达式的值。 例如: 53?6:20的值6, 5b) max=a; else max=b; 可用条件表达式写为:max=(ab)?a:b;56-普通高等教育普通高等教育“十一五十一五”国家级规划

33、教材国家级规划教材5.5 5.5 条件运算符和条件表达式条件运算符和条件表达式使用条件表达式时,还应注意以下几点:条件运算符的优先级高于赋值运算符,低于关系运算符和算术运算符。 例如:max=ab ? a:(b+1); 可以去掉括号而写为max=ab ? a: b+1;条件运算符的结合方向为“自右至左”。 例如:ab ? a: cd ? c:d 相当于:ab ? a:(cd ? c:d)。这也是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。条件表达式不能取代一般的if语句,只有if语句中内嵌的语句为赋值语句且两个分支都给同一个变量赋值时才能代替if语句。56-普通高等教育普通高等教

34、育“十一五十一五”国家级规划教材国家级规划教材5.5 5.5 条件运算符和条件表达式条件运算符和条件表达式条件表达式中,表达式1的类型可以与表达式2和表达式3的类型不一致。 例如:a ? x: y 表达式2和表达式3的类型也可以不一致(例如,a为整型或实型变量,而x、y为字符型变量),此时条件表达式的值为二者中较高的类型。 例如: ab ? 2: ? 2.5 此时如果ab为真,则条件表达式的值应为2,但由于2.5是实 型,比整型高,因此,把表达式1转成实型2.0。 条件运算符为?和:是一对运算符,不能分开单独使用。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.5

35、 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 Hinput one char:A A 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.5 5.5

36、条件运算符和条件表达式条件运算符和条件表达式例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(%d,&score); grade=score=80?A:(score=60?B:C); printf(The %d

37、is belong to %cn,score,grade);程序运行结果:input score=55The 55 is belong to Cinput score=95The 95 is belong to A56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.6 switch语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.6 switch5.6 switch语句语句 前面介绍的if语句,常用于两种情况的选择结构,要表示两种以上条件的选择结构,则要用if语句的嵌套形式,但如果嵌套的if语句比较多时,程序比较冗长且可读性降低。 在C语

38、言中,可直接用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后面的常量表达式的值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面

39、所有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: printf(“OK!n”); case D: printf(“NO!n”); default: pr

40、intf(“ERROR!n”); 若若class的值为的值为B,则输出的结果则输出的结果是:是:GOOD!OK!NO!ERROR!若若class的值为的值为D,则输出的结果则输出的结果是:是:NO!ERROR!若若class的值为的值为A,则输出的结果则输出的结果是:是:GREAT!GOOD!OK!NO!ERROR! switch语句的功能是:根据语句的功能是:根据switch后面表达式的值找到后面表达式的值找到匹配的入口处,就从此入口匹配的入口处,就从此入口处开始执行下去,不再进行处开始执行下去,不再进行判断。判断。 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材

41、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)多个case可以共用一组执行语句。 例如: switch(ch) ca

42、se 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 1: switch(y) case 0:

43、printf (“x=1 y=0n”); break; case 1: printf (“y=1n”); break; case 2: printf (“x=2n”); 程序段的运行结果:x=1 y=0x=256-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.6 switch5.6 switch语句语句例5.13 从键盘上输入一个数字,输出一个有关星期几的 英文单词。 #include void main() int a; printf(input integer number: ); scanf(%d,&a);56-普通高等教育普通高等教育“十一五十一五”国家级规划

44、教材国家级规划教材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); bre

45、ak; case 7: printf(Sundayn); 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 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划

46、教材国家级规划教材5.7 5.7 程序举例程序举例例5.14 编写一个程序,求一元二次方程的根。 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

47、,%f,%f,&a,&b,&c); if(fabs(a)=1e-6) if(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); /* 输出两个不相等的实根 */

48、 else r=-b/(2*a); p=sqrt(-d)/(2*a); printf(x1=%f+%finx2=%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=

49、0,0,1No answer! 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例例5.15 编写一个程序,从键盘上输入一个用整数表示的年份,判断该年份是否为闰年。判断一个用整数表示的年份是不是闰年的条件是,该年份满足下面两个条件之一:(1)年份能被400整除;(2)年份能被4整除、但不能被100整除。 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例56-普通高等教育普通高等

50、教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例#include void main() int year,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-普通高等教育普通高等教育“十一五十一五”国家级规

51、划教材国家级规划教材5.7 5.7 程序举例程序举例else flag=0; /* 置为非闰年 */ else /* 如果被400整除 */ flag=1; /* 置为闰年 */ if(flag=0) printf(%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

52、.input a year:20052005 is not leap year.56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例判断一个用整数表示的年份是不是闰年,用逻辑表达式可编写程序如下:#include void main( ) int year,flag; printf(input a year:); scanf(%d,& year); flag=(year%400=0)|(year%4=0&year%100!=0); flag?printf(%d is a leap year.n, year):printf(%d not a

53、leap year.n, year); 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例例5.16 输入某年某月,输出该月的天数。 讨论:每年的1、3、5、7、8、10、12月都有31天;4、6、 9、11月都有30天;2月闰年有29天,平年28天。 根据上述分析编写的程序如下: #include void main() int year,month,days; printf(input year and month:); scanf(%d,%d,&year,&month);56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国

54、家级规划教材5.7 5.7 程序举例程序举例 switch(month) case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=31; break; case 4: case 6: case 9: case 11: days=30; break; case 2: if(year%400=0)|(year%4=0&year%100!=0)=1) days=29; else days=28; printf(days=%dn,days); 程序运行结果:input year and month:2008,2days=2956-普

55、通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例例5.17 某运输公司对外承担货运,计算运费时,运输距离(s)越长,折扣越多。标准如下: s250km 没有折扣 250s500km 2%折扣 500s1000km 5%折扣 1000s2000km 8%折扣 2000s3000km 10%折扣 s3000km 15%折扣 设吨公里基本运费p,距离s,货物重量w,折扣率d,总运费f,计算公式为:f=p*s*w*(1-d)。56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include void main() float

56、p,w,d,f; int c,s; printf(input p,w,s=); scanf(%f,%f,%d,&p,&w,&s); if(s250) d=0; else if(s500) d=0.02; else if(s1000) d=0.05; else if(s2000) d=0.08; else if(s3000) d=0.10; else d=0.15; f=p*s*w*(1-d); printf(f=%10.2fn,f);5.7 5.7 程序举例程序举例程序运行结果:input p,w,s=5,8,1555f=572240.0056-普通高等教育普通高等教育“十一五十一五”国家级规

57、划教材国家级规划教材5.7 5.7 程序举例程序举例如果我们把折扣的标准用图5.9表示,从图中我们可以看出:折扣的变化点都是250的倍数。如果引进一个代表250的倍数的中间变量c,那么折扣率d与距离s的关系可以表示为:当c1时,表示s250,没有折扣;1c2时,表示250s500,折扣d=2%;2c4时,d=5%;4c8时,d=8%;8c12时,d=10%;c12时,d=15%。 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例#include void main() float p,w,d,f; int c,s; printf(inp

58、ut p,s,w=); scanf(%f,%f,%d,&p,&w,&s); if(s=3000) c=12; else c=s/250; 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例 switch(c) case 0: d=0; break; case 1: d=0.02; break; case 2: case 3: d=0.05; break; case 4: case 5: case 6: case 7: d=0.08; break; case 8: case 9: case 10: case 11: d=0.10; brea

59、k; case 12: d=0.15; f=p*s*w*(1-d); printf(f=%10.2fn,f); 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例例5.18 四则运算程序。用户输入两个运算量及一个运算符,输出运算结果。 首先输入参加运算的两个数和一个运算符号,然后根据运算符号来做相应的运算,但是在做除法运算时,应判别除数是否为0,如果为0,运算非法,给出错误提示。如果运算符号不是+、-、*、/,则同样是非法的,也给出错误提示。其他情况,输出运算的结果。 #include void main( ) float a,b,res

60、ult; int flag; char ch; flag=0; /*运算合法的标志,置0为合法,置1为非法*/ printf(input expressin: a +(-,*,/) bn); scanf(%f %c %f,&a,&ch,&b);56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例 switch(ch) /* 根据运算符来进行相关的运算 */ case +: result=a+b; /* 加法运算 */ break; case -: result=a-b; /* 减法运算 */ break; case *: result=a*

61、b; /* 乘法运算 */ break; case /: if(!b) printf(divisor is zero!n); /* 显示除数为0 */ flag=1; /* 置为运算非法标志 */ else result=a/b; /* 除法运算 */ break; default: printf(input error!n); /* 显示非法运算符 */ flag=1; /* 置为运算非法标志 */ if(!flag) printf(%f %c %f=%fn,a,ch,b,result); 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序

62、举例程序运行结果:input expressin: a +(-,*,/) b3+53.000000 + 5.000000=8.000000input expressin: a +(-,*,/) b9/0divisor is zero!input expressin: a +(-,*,/) b55!66input error! 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例例 5.19 编写根据输入的学生成绩判断等级的程序,即从键盘上输入一个学生的百分制成绩赋值给变量score,按下列要求输出其等级。 score90 等级为A 80sc

63、ore90 等级为B 70score80 等级为C 60score70 等级为D score60 等级为E 此问题可以用else if语句编程解决,在这里用switch语句来编程解决。根据题目要求,若score90,score可能是90,91,92,98,99,100,把这些值都列出来过于繁杂,可以利用两个整数相除,结果自动取整的方法,即0score100时,score/10只有10和9两种情况,这样用switch语句来解决便简便了。 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例#include void main( ) int s

64、core,grade; printf(input a score(0-100):); scanf(%d,&score); grade=score/10; 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例switch(grade) case 10: case 9: printf(%d: An,score); break; /* score90,等级为A */ case 8: printf(%d: Bn,score); break; /* 80score9,等级为B */ case 7: printf(%d: Cn,score); brea

65、k; /* 70score80,等级为C */ case 6: printf(%d: Dn,score); break; /* 60score70,等级为D */ case 5: case 4: case 3: case 2: case 1: case 0: printf(%d: En,score); break; /* score60,等级为E */ default: printf(input error!n); /* 显示输入错误信息 */ 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材5.7 5.7 程序举例程序举例程序运行结果:input a score(0

66、-100):5595:Ainput a score(0-100):5555:Einput a score(0-100):=input error! 56-普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材本本 章章 小小 结结 本章的重点是if语句的使用,要熟练掌握if语句的几种形式,还要理解关系运算符和关系表达式、逻辑运算符以及逻辑表达式。在使用switch语句时,一定要注意,在没有使用break语句的情况下,case语句的各个语句是逐句执行的,而不是执行一条语句就跳出switch语句。 选择结构是结构化程序设计的一个基本结构。它根据输入的数据或中间结果的情况,选择一组语句执行(在不同的情况下,选择不同的语句组执行)。在编程序时,必须将所有的情况都考虑进去,并写出在各种情况下所对应的语句组。56-

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号