《C语言程序设计基础与实训教程》第4章:选择结构程序设计.ppt

上传人:夏** 文档编号:569954214 上传时间:2024-08-01 格式:PPT 页数:42 大小:360.01KB
返回 下载 相关 举报
《C语言程序设计基础与实训教程》第4章:选择结构程序设计.ppt_第1页
第1页 / 共42页
《C语言程序设计基础与实训教程》第4章:选择结构程序设计.ppt_第2页
第2页 / 共42页
《C语言程序设计基础与实训教程》第4章:选择结构程序设计.ppt_第3页
第3页 / 共42页
《C语言程序设计基础与实训教程》第4章:选择结构程序设计.ppt_第4页
第4页 / 共42页
《C语言程序设计基础与实训教程》第4章:选择结构程序设计.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《《C语言程序设计基础与实训教程》第4章:选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《《C语言程序设计基础与实训教程》第4章:选择结构程序设计.ppt(42页珍藏版)》请在金锄头文库上搜索。

1、http:/ (时间:4次课,8学时)http:/ 选择结构程序设计 学习目的与要求:通过前面章节的学习,已经看到了,语句的执行是按照书写的顺序执行的,这种结构称为“顺序结构”。但程序的执行并不一定是按照语句序列的书写顺序执行的。结构化程序设计方法规定程序的基本结构有三种,即顺序结构、选择结构和循环结构。在大多数的程序中都会遇到根据给定的条件来决定是否执行、如何执行等情况,这就涉及到使用选择结构设计程序。本章主要介绍关系运算符和关系表达式、逻辑运算符和逻辑表达式、if语句、switch语句。要求掌握关系运算符和关系表达式的定义和使用;掌握逻辑运算符和逻辑表达式的定义和使用;掌握if语句和swi

2、tch语句的定义和使用。 http:/ 选择结构程序设计 n4.1 关系运算符和关系表达式 n4.2逻辑运算符和逻辑表达式 n4.3 if语句 n4.4 switch语句 n4.5 程序举例 n4.6上机实训 http:/ 关系运算符和关系表达式 所谓“关系运算”实际上就是“比较运算”,即将两个数据进行比较,判定两个数据是否符合给定的关系。例如,“a b”中的“”表示一个大于关系运算。如果a的值是5,b的值是3,则大于关系运算“”的结果为“真”,即条件成立;如果a的值是2,b的值是3,则大于关系运算“”的结果为“假”,即条件不成立。 http:/ 关系运算符 在程序中经常需要比较两个量的大小关

3、系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。在C语言中有以下关系运算符: 小于 大于= 大于或等于= = 等于!= 不等于关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,=的优先级相同,高于= =和!=,= =和!=的优先级相同。 注意 在语言中,“等于”关系运算符是双等号“= =”,而不是单等 号“=”(赋值运算符)。http:/ 关系表达式 关系表达式的一般形式为: 表达式 关系运算符 表达式 例如:a+bc-d,x3/2,a+1(bc),a!=(c= =d)等。由于语言没有逻辑型数据,所以用整数“”表示

4、“逻辑真”,用整数“”表示“逻辑假”。如:50的值为“真”,即为1。(a=3)(b=5)由于35不成立,故其值为假,即为0。例如,假设num1=3,num2=4,num3=5,则:(1)num1num2的值=0。(2)(num1num2)!=num3的值=1。(3)num1num2num3的值=1。(4)(num1num2)+num3的值=6,因为num1num2的值=1,1+5=6。 http:/ 关系表达式 【例4.1】main( )char c=k;int i=1,j=2,k=3;float x=3e+5,y=0.85;printf(%d,%dn,a+5=k+1);printf(%d,%

5、dn,1j5,x-5.25=0”。如果需要描述“x=0”、同时“x=0) & (x10) ,(x5),! (x= =0),(year%4= =0)&(year%100!=0)|(year%400= =0)与运算符&和或运算符|均为双目运算符。具有左结合性。非运算符!为单目运算符,具有右结合性。逻辑运算符和其它运算符优先级的关系可表示如下:!(非) &(与) |(或)! 算术运算 关系运算 & | 赋值运算按照运算符的优先顺序可以得出:ab & cd等价于(ab) & (cd)!b= =c|da等价于(!b)= =c)|(dc & x+yc) & (x+y)0 & 42,由于50为真,42也为真

6、,相与的结果也为真。(2)或运算| 参与运算的两个量只要有一个为真,结果就为真。两个量都为假时,结果为假。例如:50|58,由于50为真,相或的结果也就为真。(3)非运算! 参与运算量为真时,结果为假;参与运算量为假时,结果为真。例如:!(50)的结果为假。虽然C编译在给出逻辑运算值时,以“1”代表“真”,“0 ”代表“假”。但反过来在判断一个量是为“真”还是为“假”时,以“0”代表“假”,以非“0”的数值作为“真”。例如:由于5和3均为非“0”,因此5&3的值为“真”,即为1。又如:5|0的值为“真”,即为1。http:/ 逻辑表达式 逻辑表达式的一般形式为:表达式 逻辑运算符 表达式其中的

7、表达式可以又是逻辑表达式,从而组成了嵌套的情形。例如:(a&b)&c根据逻辑运算符的左结合性,上式也可写为:a&b&c 逻辑表达式的值是式中各种逻辑运算的最后值,以“1”和“0”分别代表“真”和“假”。例如,(year%4=0)&(year%100!=0)|(year%400=0)就是一个判断一个年份是否是闰年的逻辑表达式。在计算逻辑表达式时,只有在必须执行下一个表达式才能求解时,才求解该表达式(即并不是所有的表达式都被求解)。换句话说:(1)对于逻辑”与”运算,如果第一个操作数被判定为“假”,系统不再判定或求解第二操作数。(2)对于逻辑”或”运算,如果第一个操作数被判定为“真”,系统不再判定

8、或求解第二操作数。例如,假设n1、n2、n3、n4、x、y的值分别为1、2、3、4、1、1,则求解表达式“(x=n1n2)&(y=n3n4)”后,x的值变为,而y的值不变,仍等于1。http:/ 逻辑表达式 【例4.2】main( )char c=k;int i=1,j=2,k=3;float x=3e+5,y=0.85;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,1http:/ 逻辑表达式 本例中!x和!y分别为0,!x*!y也

9、为0,故其输出值为0。由于x为非0,故!x的逻辑值为0。对x| i & j-3式,先计算j-3的值为非0,再求i & j-3的逻辑值为1,故x|i&j-3的逻辑值为 1。对ij&xy式,由于ij的值为1,而x0) printf(x=%f, x); 如果x0,输出x。(2)if(a=b) printf(%s,a=b);如果a等于b, 输出a=b。说明:(1)条件表达式必须用小括号括起,同时注意区分作为条件的表达式与作为数值的表达式。(2)if语句中要选择执行的语句称为选择体,选择体从语法上只能是一条语句,如果选择体需多条语句描述,必须采用复合语句。http:/ if语句 【例【例4.34.3】输

10、入两个整数,输出其中的大数。】输入两个整数,输出其中的大数。main( )main( ) int a,b,max;int a,b,max;printf(n input two numbers: );printf(n input two numbers: );scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);max=a;max=a;if (maxb) max=b;if (max0x0,输出输出x x大于大于0 0,否则输出,否则输出x x小于等于小于等于0 0。ifif(x0) printfx0) printf(x x大于大于0 0););else printfelse p

11、rintf(x x小于等于小于等于0 0););http:/ if语句 (2 2)如果)如果a a等于等于b, b, 输出输出a a等于等于b, b, 否则输出否则输出a a不等于不等于b b。ifif(a= =ba= =b) printf printf(a a等于等于b b););else printfelse printf(“a a不等于不等于b b););(3 3)求两个数求两个数x x、y y的最大值的最大值maxmax。ifif(xyxy) max=x max=x;else max=yelse max=y;(4 4)判断整数判断整数i i的奇偶性。的奇偶性。ifif(i%2= =0i

12、%2= =0) printf printf(偶数偶数 n n););else printfelse printf(奇数奇数 n n););http:/ if语句 说明:说明:(1 1)if-elseif-else语语句句形形式式上上相相当当于于ifif语语句句扩扩展展elseelse分分支支而而来来,elseelse分分支支称为称为elseelse子句,子句,elseelse子句不能单独存在。子句不能单独存在。(2 2)在在其其它它高高级级语语言言中中特特别别强强调调elseelse子子句句前前不不能能有有分分号号,C C语语言言中中elseelse子句前必有分号。子句前必有分号。(3 3)选

13、择体如为多条语句同样必须采用复合语句。)选择体如为多条语句同样必须采用复合语句。(4 4)ifif语语句句可可认认为为是是if-elseif-else语语句句缺缺省省elseelse子子句句的的特特殊殊情情况况,一一条条if-if-elseelse语句可用两条单分支语句可用两条单分支ifif语句实现。语句实现。例如,前例中三条例如,前例中三条if-elseif-else语句改用语句改用ifif语句实现:语句实现: if if (x0x0) printf printf(x x大于大于0 0);); if if (x=0) printfxyxy) max=x max=x; if if(x=yx=y

14、) max=y max=y;http:/ if语句 3 3if-else-ifif-else-if语句语句格式:格式:if(if(表达式表达式1)1)语句语句1 1;else if(else if(表达式表达式2)2)语句语句2 2;else if(else if(表达式表达式3)3)语句语句3 3;else if(else if(表达式表达式m)m)语句语句m m;elseelse语句语句n n;功功能能:依依次次判判断断表表达达式式的的值值,当当出出现现某某个个值值为为真真时时,则则执执行行其其对对应应的的语语句句。然然后后跳跳到到整整个个ifif语语句句之之外外继继续续执执行行程程序序。

15、如如果果所所有有的的表表达达式式均均为为假假,则执行语句则执行语句n n。然后继续执行后续程序。然后继续执行后续程序。http:/ g”,输出显示它为小写字符。输出显示它为小写字符。可可以以根根据据输输入入字字符符的的ASCIIASCII码码来来判判别别类类型型。由由ASCIIASCII码码表表可可知知ASCIIASCII值值小小于于3232的的为为控控制制字字符符。在在“0 0”和和“9 9”之之间间的的为为数数字字,在在“A A”和和“Z Z”之之间间为为大大写写字字母母,在在“a a”和和“z z”之间为小写字母,其余则为其它字符。之间为小写字母,其余则为其它字符。# #includes

16、tdio.hincludestdio.hmain( )main( )char c;char c;printf(input a character: );printf(input a character: );c=getchar();c=getchar();if(c32)if(c=0&c=0&c=A&c=A&c=a&c=a&c=90)ch=A;elseif(cj=80)ch=B;elseif(cj=70)ch=C;elseif(cj=60)ch=D;elsech=E;说明:说明:(1)在嵌套内的)在嵌套内的if语句可能又是语句可能又是if-else型的,这将会出现多个型的,这将会出现多个if和多

17、个和多个else重叠的情况,这时要特别注意重叠的情况,这时要特别注意if和和else的配对问题的配对问题 http:/ (2)通通过过加加花花括括号号、加加注注释释来来明明确确else与与if的的配配套套关关系。系。(3)if语句的嵌套可用多条语句的嵌套可用多条if、if-else语句等价实现。语句等价实现。如上例:如上例:if(cj=90)ch=A;if(cj=80&cj=70&cj=60&cj70)ch=D;if(cj60)ch=E;http:/ 【例【例4.6】求求main()floatx;floaty;printf(Inputx:);scanf(%f,&x);if(x0)y=-1;el

18、seif(x=0)y=0;elsey=1;printf(x=%8.4f,y=%5.2fn,x,y);http:/ 上述上述if语句的嵌套也可以用以下语句的嵌套也可以用以下if语句代替:语句代替:if(x0)y=1;因因此此,在在一一般般情情况况下下较较少少使使用用if语语句句的的嵌嵌套套结结构构。以以使使程程序更便于阅读理解。序更便于阅读理解。http:/ 如如果果在在条条件件语语句句中中,只只执执行行单单个个的的赋赋值值语语句句时时,常常可可使使用用条条件表达式来实现。不但使程序简洁,也提高了运行效率。件表达式来实现。不但使程序简洁,也提高了运行效率。条条件件运运算算符符为为?和和:,它它是

19、是一一个个三三目目运运算算符符,即即有有三三个个参参与与运运算算的量。由条件运算符组成条件表达式的一般形式为:的量。由条件运算符组成条件表达式的一般形式为: 表达式表达式1?表达式表达式2:表达式表达式3其其求求值值规规则则为为:如如果果表表达达式式1的的值值为为真真,则则以以表表达达式式2的的值值作作为为条条件件表表达达式式的的值值,否否则则以以表表达达式式2的的值值作作为为整整个个条条件件表表达达式式的的值。条件表达式通常用于赋值语句之中。值。条件表达式通常用于赋值语句之中。http:/ 例如条件语句:例如条件语句:if(ab)max=a;elsemax=b;可用条件表达式写为可用条件表达

20、式写为max=(ab)?a:b;执行该语句的语义是:如执行该语句的语义是:如ab为真,则把为真,则把a赋予赋予max,否则把否则把b赋予赋予max。使用条件表达式时,还应注意以下几点:使用条件表达式时,还应注意以下几点:(1)条件运算符的运算优先级低于关系运算符和算术运算符,)条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此但高于赋值符。因此max=(ab)?a:b可以去掉括号而写为可以去掉括号而写为max=ab?a:b(2)条件运算符条件运算符?和:是一对运算符,不能分开单独使用。和:是一对运算符,不能分开单独使用。(3)条件运算符的结合方向是自右至左。)条件运算符的结合

21、方向是自右至左。http:/ 例如:例如:ab?a:cd?c:d应应理理解解为为ab?a:(cd?c:d),这这也也就就是是条条件件表表达达式式嵌套的情形,即其中的表达式嵌套的情形,即其中的表达式3又是一个条件表达式。又是一个条件表达式。【例【例4.7】用条件表达式输出两个数中的大数。】用条件表达式输出两个数中的大数。main()inta,b,max;printf(ninputtwonumbers:);scanf(%d%d,&a,&b);printf(max=%d,ab?a:b);http:/ switch语句称为开关语句,用于多分支选择的一种特殊情况的语句称为开关语句,用于多分支选择的一种特

22、殊情况的处理,即每个分支、每种情况通过一个表达式取不同的值处理,即每个分支、每种情况通过一个表达式取不同的值(选择常量、情况常量)来描述,相当于(选择常量、情况常量)来描述,相当于PASCAL语言中的语言中的CASE语句。语句。格式:格式:switch(选择表达式)选择表达式)case常量常量1:语句语句1;case常量常量2:语句语句2;case常量常量n:语句语句n;default:语句语句n+1;http:/ 功能:计算选择表达式的值,当表达式的值与某一功能:计算选择表达式的值,当表达式的值与某一 个个case后面的常量相等、相匹配时,就执行此后面的常量相等、相匹配时,就执行此 case

23、后面的处理语句。执行完一个后面的处理语句。执行完一个case后面的后面的 语句后,流程控制转移到下一个语句后,流程控制转移到下一个case处继续执处继续执 行。若所有行。若所有case中的常量都不与选择表达式的中的常量都不与选择表达式的 值相匹配,就执行值相匹配,就执行default后面的语句。后面的语句。http:/ 【例【例4.84.8】输入一个数字,输出相应星期的英文单词。】输入一个数字,输出相应星期的英文单词。main( )main( ) int a; int a; printf(input integer number: ); printf(input integer number:

24、 ); scanf(%d,&a); scanf(%d,&a); switch (a) switch (a) case 1:printf(Mondayn); case 1:printf(Mondayn); case 2:printf(Tuesdayn); case 2:printf(Tuesdayn); case 3:printf(Wednesdayn); case 3:printf(Wednesdayn); case 4:printf(Thursdayn); case 4:printf(Thursdayn); case 5:printf(Fridayn); case 5:printf(Frid

25、ayn); case 6:printf(Saturdayn); case 6:printf(Saturdayn); case 7:printf(Sundayn); case 7:printf(Sundayn); default:printf(errorn); default:printf(errorn); http:/ 但是当输入但是当输入3 3之后,却执行了之后,却执行了case3case3以及以后的所有语句,以及以后的所有语句,输出了输出了WednesdayWednesday及以后的所有单词。这当然是不希望的。为及以后的所有单词。这当然是不希望的。为什么会出现这种情况呢什么会出现这种情况呢

26、? ?这恰恰反应了这恰恰反应了switchswitch语句的一个特语句的一个特点。在点。在switchswitch语句中,语句中,“case case 常量表达式常量表达式”只相当于一个语只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个能在执行完该标号的语句后自动跳出整个switch switch 语句,所以语句,所以出现了继续执行所有后面出现了继续执行所有后面casecase语句的情况。这是与前面介绍语句的情况。这是与前面介绍的的ifif语句完全不同的,应特别注意。为了避免上述情况,语句

27、完全不同的,应特别注意。为了避免上述情况,语言还提供了一种语言还提供了一种breakbreak语句,专用于跳出语句,专用于跳出switchswitch语句,语句,breakbreak语句只有关键字语句只有关键字breakbreak,没有参数。修改例题的程序,没有参数。修改例题的程序,在每一在每一casecase语句之后增加语句之后增加break break 语句,使每一次执行之后均语句,使每一次执行之后均可跳出可跳出switchswitch语句,从而避免输出不应有的结果。语句,从而避免输出不应有的结果。http:/ 说明:说明:(1 1)选择表达式可以是任何表达式,一般为整型、字符型、枚举型表

28、达式)选择表达式可以是任何表达式,一般为整型、字符型、枚举型表达式. .(2 2)选择表达式必须用小括号括起。)选择表达式必须用小括号括起。 (3 3)casecase后后可可以以是是常常量量表表达达式式,每每一一个个casecase后后的的值值必必须须互互不不相相同同,否否则则会会出出现现二义性。二义性。(4 4)一一种种情情况况处处理理完完后后,一一般般应应使使程程序序的的执执行行流流程程跳跳出出switchswitch结结构构,终终止止switchswitch语句的执行,这可借助语句的执行,这可借助breakbreak语句完成。语句完成。一般使用的一般使用的switchswitch语句形

29、式为:语句形式为:switchswitch(选择表达式)选择表达式) case case 常量常量1: 1: 语句语句1 1break;break;case case 常量常量2: 2: 语句语句2 2break;break;case case 常量常量n: n: 语句语句n nbreak;break;default: default: 语句语句n+1n+1 http:/ (5(5)在上述在上述switchswitch语句的一般使用形式下,语句的一般使用形式下,casecase出现的次序不影出现的次序不影 响执行结果。响执行结果。(6 6)当多个常量代表一种情况时,出现在前面)当多个常量代表一

30、种情况时,出现在前面casecase中的情况处中的情况处 理无语句,这实际上也是多个理无语句,这实际上也是多个casecase共用一组执行语句。共用一组执行语句。(7 7)可以没有)可以没有defaultdefault子句。子句。(8 8)switchswitch语句描述的是多分支选择的一种特殊情况,可用语句描述的是多分支选择的一种特殊情况,可用ifif 语句等价实现语句等价实现 http:/ 【例【例4.94.9】求三个数的最大值。】求三个数的最大值。程序一:程序一:main( )main( )float x, y, z;float x, y, z;float max;float max;c

31、lrscr( ); clrscr( ); printfprintf(Please Input x, y, z: Please Input x, y, z: ); ;scanfscanf(%f, %f, %f%f, %f, %f, &x, &y, &z, &x, &y, &z); ;if (xy) &if (xy) &(xzxz) max=x; max=x;if (yx) &if (yx) &(yzyz) max=y; max=y;if (zx) &if (zx) &(zyzy) max=z; max=z;printfprintf(x=%5.2f, y=%5.2f, z=%5.2f, max=%

32、5.2fnx=%5.2f, y=%5.2f, z=%5.2f, max=%5.2fn, x, y, z, max, x, y, z, max); ; http:/ 程序二:程序二:main( )main( ) float x, y, z;float x, y, z;float max;float max;clrscr( ); clrscr( ); printfprintf(Please Input x, y, z: Please Input x, y, z: ); ;scanfscanf(%f, %f, %f%f, %f, %f, &x, &y, &z, &x, &y, &z); ;max=x

33、;max=x;ifif(ymaxymax)max=y;max=y;ifif(zmaxzmax)max=z;max=z;printfprintf(x=%5.2f, y=%5.2f, z=%5.2f, max=%5.2fnx=%5.2f, y=%5.2f, z=%5.2f, max=%5.2fn, x, y, z, max, x, y, z, max); ; http:/ 【例【例4.134.13】两个数的】两个数的+ +、 - -、 * *、 / /简易计算器程序。简易计算器程序。main( )main( )float x, y;float x, y;char op;char op;printf

34、printf(输入两个数输入两个数: : ); ;scanfscanf(%f, %f%f, %f, &x, &y);, &x, &y);printfprintf(输入运算符输入运算符: : ); ;scanfscanf(%c%c, &op);, &op);switch switch (opop)case case + +: j=x+y; printf: j=x+y; printf(结果结果=%9.4=%9.4fnfn, j, j); break; break;case case - -: j=x-y; printf: j=x-y; printf(结果结果=%9.4=%9.4fnfn, j, j

35、); break; break;case case * *: j=x*y; printf: j=x*y; printf(结果结果=%9.4=%9.4fnfn, j, j); break; break;case case / /: if : if (y! =0y! =0) j=x+y; printf j=x+y; printf(结果结果=%9.4=%9.4fnfn, j, j); ; else printfelse printf(除数为零除数为零 n n); ;http:/ 实验目的实验目的l l熟练掌握熟练掌握ifif语句和语句和switchswitch语句;语句;l l学会使用合适的关系和逻

36、辑表达式描述问题;学会使用合适的关系和逻辑表达式描述问题;实验内容实验内容实训实训1 1给给学学生生写写评评语语,若若学学生生成成绩绩在在60-6960-69则则打打印印“及及格格”,70708989“良良好好”,9090100100“优秀优秀”,6060以及以及“不及格不及格”。要求:分别用要求:分别用if-elseif-else语句和语句和switchswitch语句编程语句编程http:/ 实训实训2 2 输入和运行以下程序。输入和运行以下程序。include include main( )main( ) void dummy( );void dummy( );char ch;char

37、ch;printf(printf(1. 1. 输入记录输入记录 n n); ); printf(printf(2. 2. 记录列表记录列表 n n); ); printf(printf(3. 3. 删除记录删除记录 n n); ); printf(printf(4. 4. 修改记录修改记录 n n); ); printf(printf(请输入选择:请输入选择: n n); ); http:/ ch=getchar( ); ch=getchar( ); switch(ch)switch(ch)case case 1 1: printf(: printf(输入记录输入记录 n n); ); dum

38、my( ); break; dummy( ); break; case case 2 2:printf(:printf(记录列表记录列表 n n); ); dummy( ); break;dummy( ); break; case case 3 3: printf(: printf(删除记录删除记录 n n); ); dummy( ); break; dummy( ); break; case case 4 4: printf(: printf(修改记录修改记录 n n); ); dummy( ); break; dummy( ); break; default: printf(default: printf(选择错选择错!n n); ); void dummy()void dummy() http:/ 从键盘分别键入从键盘分别键入1 1、2 2、3 3、4 4后,分析显示结果。后,分析显示结果。然后输入其他字符,分析显示结果。然后输入其他字符,分析显示结果。实验总结实验总结通通过过本本章章的的上上机机实实训训,学学生生应应该该能能够够掌掌握握ifif语语句句和和switchswitch语语句句,通通过选择语句的使用来解决实际问题,进一步提高编写程序的能力。过选择语句的使用来解决实际问题,进一步提高编写程序的能力。

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

最新文档


当前位置:首页 > 高等教育 > 研究生课件

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