自考计算机基础与程序设计第四章 条件语句与选择结构程序设计(附本章三年内自考真题及答案)_第1页
自考计算机基础与程序设计第四章 条件语句与选择结构程序设计(附本章三年内自考真题及答案)_第2页
自考计算机基础与程序设计第四章 条件语句与选择结构程序设计(附本章三年内自考真题及答案)_第3页
自考计算机基础与程序设计第四章 条件语句与选择结构程序设计(附本章三年内自考真题及答案)_第4页
自考计算机基础与程序设计第四章 条件语句与选择结构程序设计(附本章三年内自考真题及答案)_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4章 选择结构程序设计4.1 选择结构程序设计4.2 if语句的基本形式和N-S图4.3 switch语句 4.4 选择结构程序设计综合应用第4章 选择结构程序设计2/44本章要点本章要点选择结构的特点选择结构程序设计的一般方法if语句和switch语句的使用方法第4章 选择结构程序设计3/444.1 选择结构概述 结构化程序设计中的选择结构,与日常生活中的“选择结构”一样,也是根据一个判断条件来决定执行哪一个分支,选择某个分支执行后其他分支不再执行,选择结构的特点是根据判断条件,有选择地执行其中一个分支,要且只要执行其中一个分支。 对于选择结构程序设计,首先要确定选择的条件,然后找出判断条

2、件有多少种可能,即该条件有多少种情况(值),最后再确定每种可能情况所要进行的处理。选择结构程序就是根据条件,选择程序若干个流向中的一个,因此也叫分支结构。 C语言选择结构中的“条件”实际上是一个表达式,它可以是算术表达式、关系表达式、逻辑表达式等,所有可以求值的表达式都是允许的。程序执行的流向是根据表达式的值是0还是非0来决定的。非0代表条件成立,0代表条件不成立,所以条件只有两个状态,程序执行的流向也只可能有两种选择。第4章 选择结构程序设计4/444.2 if语句 在C语言中,提供了if语句和switch语句来实现选择结构程序设计。if语句可以构成分支结构。它根据给定的条件进行判断,以决定

3、执行某个分支程序段。if语句有三种书写形式。同时,在一个if语句中还可以包含另一个if语句,称为if语句的嵌套。4.2.1 单分支选择if语句 单分支选择if语句的一般格式: if(条件表达式) 语句 说明:第4章 选择结构程序设计5/44 (1) 其中()中的条件表达式一般为逻辑表达式或关系表达式,但也可以是算术表达式、赋值表达式或字符表达式,甚至可以是一个变量,这正是C语言灵活性的具体表现。需要特别注意的是,条件表达式外边的括号不能省。 (2)条件表达式后面的语句,可以是简单语句,也可以是复合语句,但只能是一个语句。如果包含多个简单语句,则一定要用大括号括起来组成复合语句,否则得不到预期值

4、。比较以下两段程序的输出结果(见表4-1)。第4章 选择结构程序设计6/44(3) if语句的简单形式只能处理一种可能情况(不满足条件时不处理)。(4) 执行过程:首先计算条件表达式的值,如果条件表达式的值为真(非零),则执行其后的语句;否则不执行其后的语句。执行过程的N-S图4.1所示。图4.1 if语句的N-S图条件成立不成立语句第4章 选择结构程序设计7/44 【例4-1】 输入三角形的三边,如果构成三角形则求三角形的面积。 三角形的判断条件是任意两边之和应大于第三边。已知三角形的三边长求面积的计算公式为: 分析: 任意两边之和大于第三边,有三种组合,而且这三种组合必须同时成立。所以,判

5、断三边长是否构成三角形可用以下判断条件: a+bc&b+ca&a+cbareas(sa)(sb)(sc)abcs2第4章 选择结构程序设计8/44 程序代码:include /*求平方根函数sqrt包含在math.h头文件中*/main() float a,b,c,area,s; scanf(%f,%f,%f,&a,&b,&c); if(a+bc&b+ca&a+cb) /*任意两边之和大于第三边*/ /*包含多个简单语句时,一定要加构成复语句*/ s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c); pr

6、intf(The area=%.2f,area); 思考:如果去掉构成复合语句的大括号,程序运行结果如何?第4章 选择结构程序设计9/444.2.2 双分支选择if语句 双分支选择if语句的一般格式:if(条件表达式) 语句1; else 语句2; 说明: (1)其中,条件表达式和语句的要求,与if语句简单形式的条件表达式和语句的要求相同。 (2)if语句的标准形式能处理有两种可能的情况,它与if语句简单形式相比,多了一个else(否则)部分,这部分用来处理条件不成立时所要进行的操作。第4章 选择结构程序设计10/44 (3)执行过程:先计算后面圆括号中条件表达式的值,若结果为真,执行语句1而

7、不执行语句2,否则执行语句2而不执行语句1,即在此类型结构中,只执行语句1和语句2两者中的一个。执行过程的N-S图如图4.2所示。图4.2 if语句的标准形式的N-S图(4)语句1和语句2后面都必须有分号“;”。条件成立不成立语句1语句2第4章 选择结构程序设计11/44【例4-2】 输入三角形的三边,如果构成三角形则求三角形的面积,否则提示数据错误。includemain() float a,b,c,area,s; scanf(%f%f%f,&a,&b,&c); if(a+bc&b+ca&a+cb) s=(a+b+c)/2; area=sqrt(s*(

8、s-a)*(s-b)*(s-c); printf(The area=%.2f,area); else printf(data error!n); 第4章 选择结构程序设计12/444.2.3 多分支选择if语句块if语句形式的一般格式:if(表达式1) 语句1; else if(条件表达式2)语句2; else if(条件表达式3)语句3; else if(条件表达式n)语句n; else 语句n+1; 第4章 选择结构程序设计13/44说明:(1) 其中,条件表达式和语句的要求,与单分支选择if语句的条件表达式和语句的要求相同。(2) 多分支选择if语句中,有多个条件,能处理有多种可能的情况

9、。(3) 执行过程:首先判断条件表达式1的值,如果条件表达式1的值为真,则执行完其后的语句,然后结束if语句,继续执行if语句的后继语句。如果条件表达式1的值为假,则继续判断条件表达式2的值,如果条件表达式2的值为真,则执行完其后的语句,然后结束if语句,继续执行if语句的后继语句。如果条件表达式2的值为假,则继续判断条件表达式3,依此类推,直到找到条件表达式的值为真或判断完所有条件表达式。当所有条件表达式的值均为假,如果有else部分则执行else后的语句,否则不执行任何操作,结束整个if语句。执行的N-S图如图4.3所示。 对于这种多条件的if语句,最关键的问题是如何科学合理地确定各个条件

10、表达式。一个简单的方法,是先将所有情况划分为两个情况,一个是非常简单且不能再分的情况,另一个是较复杂的情况,然后按同样的方法将较复杂的情况再进行分解,直到每个情况都是非常简单不能再分为止。 第4章 选择结构程序设计14/44 在具体划分时,可将肯定情况作为简单情况,如例4-3,也可以将否定情况作为简单情况,如例4-4,一般建议将肯定情况作为简单情况处理,可方便程序代码的编写。 图4.3 多分支选择if语句形式的N-S图表达式1表达式2表达式3语句1语句2语句3语句n语句n+1表达式n成立成立成立成立不成立不成立不成立不成立第4章 选择结构程序设计15/44【例4-3】 编写程序判断一个数的符号

11、,1表示正数,0表示0,-1表示负数,即当x0时,y=1;当x=0时,y=0;当x0,当x为正数即条件成立时,是一个简单条件,可以直接确定y=1;当条件不成立时,y还有两个可能值,需要进一步划分,可再设置条件2为x=0,当条件2成立时,y的值为0,当条件2不成立时,y的值为-1。本例的判断条件划分如图4.4所示,本例属于将否定情况继续划分。第4章 选择结构程序设计16/44程序代码:main()int x,y;scanf(%d,&x);if(x0)y=1;else if(x=0) y=0;elsey=-1;printf(y=%dn,y); 第4章 选择结构程序设计17/444.2.4

12、if语句的嵌套 在一个if语句中又包含一个或多个if语句时,称为if语句的嵌套。在C语言中允许多层嵌套。if语句的嵌套形式比较多,使用比较灵活,较难掌握。 if语句简单嵌套形式的一般格式为: if(表达式)if(表达式1) 语句1else 语句2elseif(表达式2) 语句3else 语句4第4章 选择结构程序设计18/44说明:(1) 在嵌套的if语句中,经常会出现多个if和多个else重叠的情况,要特别注意if和else的配套问题,else要和对应的if语句匹配,每一个else和离它(向前)最近且尚未匹配的if相匹配,有时if可以没有相配对的else,但建议每个if都配一个else。(2

13、) 内嵌的if语句,可以放在外层if语句的if子句中,也可放在else子句中,还可在两个地方同时嵌套if语句。(3) 在嵌套的多个条件中,应尽量将求值为真概率最大的条件,放在前面优先判断,这样可以提高if语句的效率。(4) 在内嵌的if语句中,还可以嵌套别的if语句。(5) 执行过程:首先判断表达式,如果其值为真,则执行条件表达式的if子句;如果if子句中又嵌套有另外的if语句,则继续判断条件表达式1,如果条件表达式1的值为真则执行该内嵌if语句的if子句即语句1,如果条件表达式1的值为假且该内嵌if语句配有else子句,则执行该else子句即语句2,若没有则不执行任何操作,结束if子句的内嵌

14、if语句返回外层的if语句;如果条件表达式 的值为假,则执行外层if语句的else子句,如果else子句中又嵌套有另外的if语句,则继续判断条件表达式2,如果条件表达式2的值为真,则执行该内嵌if语句的if子句即语句3,如果条件表达式2的值为假且该内嵌if语句配有else子句,则执行该else子句即语句4,若没有则不执行任何操作,结束if子句的内嵌if语句返回外层的if语句。具体过程如图4.6所示。 第4章 选择结构程序设计19/44【例4-6】 将例4-2改用嵌套的if语句来实现。main()int x,y;scanf(%d,&x);if(x0)y=1;图4.6 if语句简嵌套形式的

15、N-S图表达式表达式1表达式2成立成立成立不成立不成立不成立语句1语句2语句3语句4第4章 选择结构程序设计20/44else /*此时x=0,它与外层的if语句匹配*/if(x=0)y=0;else /*此时xb)?a:b ; 条件运算符的结合方向是自右至左,它的运算优先级低于关系运算符和算术运算符,但高于赋值运算符。条件运算符相当于一个标准形式的if 语句。例如:max=(ab)?a:b;可转换为:if(ab) max=a;else max=b;用条件运算符实现选择结构书写简洁,执行效率高。 第4章 选择结构程序设计22/444.3 switch语句switch语句的一般格式:switch

16、(表达式) case 判断值1: 语句(组)1 break;case 判断值2: 语句(组)2 break; case 判断值n: 语句(组) n; break;default : 语句(组) n+1 第4章 选择结构程序设计23/44说明:(1) 执行过程:首先计算表达式的值,并用其结果值与其后各case语句的判断值逐个比较。当其与某个case子句的判断值相同时,则执行case后的语句组。执行完该case子句后所有语句后,如果没有break语句,则不再进行判断,继续逐个执行后继的各个case子句对应的语句组,直至遇到break语句或执行完switch语句的最后一个语句组;如果有break语句

17、则直接结束switch语句的执行,转去执行switch语句后的语句。如果表达式的值与所有case后的判断值均不相同时,则执行default子句下的语句组。(2) swicth语句后的条件表达式一定要用圆括号括起来,且其取值必须是整型或字符型,同时swicth的各个case子句(包括default子句)必须包含在一对大括号之中。(3) 每个判断值是一个常数值,而不是一个范围,这点与if语句的条件有很大的区别。第4章 选择结构程序设计24/44(4) 每个case后的判断值应互异。(5)各个case子句和default子句的放置位置不限,它们的出现顺序不会影响程序执行的结果。(6)break语句用

18、来结束switch语句的执行。它一般位于各个case 语句组的最后,确保每个case子句执行完后,不用执行别的case子句对应的语句组。有时部分case语句组后不用break语句,则说明它要与其后的case子句共用一组执行语句,即多个case共用同一语句组。第4章 选择结构程序设计25/44 【例4-10】 将例4-5反过来转换,即输入一个整型成绩分数,显示它的等级,转换规则:90100为A等,8089为B等,7079为C等,6069为D等,059为 E等。 分析: case子句后的判断值只能为单个值,101个整型成绩值要对应一百多个case子句,程序很长,而且重复太多效率低。所以得先将分数值

19、进行适当处理。 仔细观察B等的成绩,将成绩除以(整除)10后它们的商相等,因此可以先将成绩除以(整除)10。 经转换后,10、9对应A等,8对应B等,7对应C等,6对应D等,05对应E等。 注意,转换后值10,它可能是正确成绩值100分对应的值,也可能是101109这段错误分数对应值,在程序设计时,要将这两种情况区分开来,本例采用先进行分数有效性判断,再进行等级判断的解决办法。第4章 选择结构程序设计26/44程序代码:main()char grade;int score,temp;scanf(%d,&score);if(score100 |scoregrade:%cn, score,

20、 grade);第4章 选择结构程序设计28/444.4 选择结构程序设计综合应用【例4-11】 输入3个整数,按从小到大的顺序输出。 分析: 可以先比较前两个数x和y的大小,将小数放在变量x中,大数放在变量y中,前两个数排序结束;然后再比较y和z的大小,同样将这两个数中的小数放在变量y中,大数放在变量z中,后两个数排序结束;至此,可以肯定3个数中最大值已存放在变量z中,说明3个数中最大值的位置已确定,余下来的工作只要确定前两个数的排列位置,需要再次比较变量x和y的大小,将小数放在变量x中,大数放在变量y中,完成整个排序过程。 注意:很多初学者认为第三次比较应该是比较变量x和z,而不是比较变量

21、x和y,因为变量x和y已经比较过。虽然第一次比较后,变量y的值大于变量x的值,但当变量y和z比较后,变量y中存放的是y和z中的最小值,它可能是变量y原来的值,也可能是变量z原来的值,即此时的变量y可能是一个新值,需要再与变量x比较。第4章 选择结构程序设计29/44例如:若x=3,y=2,z=1,比较过程如下:(1)比较x和y,将小数放在变量x中,大数放在变量y中,完成操作后:x=2,y=3;(2)比较y和z,将小数放在变量y中,大数放在变量z中,完成操作后:y=1,z=3;此时,x=2,y=1,显然要再次交换变量x和y的值。(3)比较x和y,将小数放在变量x中,大数放在变量y中,完成操作后:

22、x=1,y=2;程序代码:main()int x,y,z,temp;scanf(%d,%d,%d,&x,&y,&z);if(xy)第4章 选择结构程序设计30/44temp=x;x=y; y=temp; if(yz)temp=y;y=z; z=temp;if(xy) /*注意此条件表达式*/temp=x;x=y;y=temp;printf(%d,%d,%d,a,b,c);第4章 选择结构程序设计31/44 【例4-13】 设计一个猜拳游戏,用1表示石头,2表示布,3表示剪刀,计算机内定一个拳值,让用户来猜,如果猜对则显示“你真棒”,如果猜错则将计算机和用户所出的拳都显示

23、出来,让用户输得心服口服。分析:计算机内定一个拳值,可直接给存放计算机拳值的变量x赋一个拳值编号,如2(表示布)。用户出拳可由用户从键盘输入一个代表拳值的编号给变量y,然后比较两个变量的值,如果相同则用户猜对,否则用户猜错。main()int x=2,y; /*计算机内定出拳为布*/printf(请出拳!提示:1表示石头,2表示布,3表示剪刀。n);scanf(%d,&x); /*用户输入拳值*/if(x=y)第4章 选择结构程序设计32/44printf(你真棒!n);else if(xy)printf(猜错!计算机出拳:布,你出拳:石头。请继续努力n)elseprintf(猜错!计

24、算机出拳:布,你出拳:剪刀。请继续努力n)思考:本游戏设计得过于简单,没有一点灵活性,有兴趣的同学可以进一步完善本程序。 第4章 选择结构程序设计33/44 【例4-14】 已知1986年是虎年,你能猜出2035年出生的人属哪个生肖吗?1923年出生的人又属哪个生肖?请编写一个程序,输入一个人的出生年份,查找出他所属的生肖。分析: 人的出生年份可能有成千上万个值,而生肖只有12个,说明很多年份的生肖是相同的,那么相同生肖的年份有哪些特点呢?1986年是虎年,按照常识,1974年、1998年等都是虎年,即每隔12年又是虎年,所以虎年的特点是年份除以12的余数相等且都为6。同样我们可以得出其他生肖

25、的特点。程序代码:#includemain()int year,x;第4章 选择结构程序设计34/44int year,x;scanf(%d,&year);if(year0)/*只处理出生年份大于0的情况*/x=year%12;switch(x)case 0:printf(猴n);break;case 1:printf(鸡n);break;case 2:printf(狗n);break;第4章 选择结构程序设计35/44 case 3:printf(猪n);break;case 4:printf(鼠n);break;case 5:printf(牛n);break;case 6:prin

26、tf(虎n);break;case 7:printf(兔n);break;第4章 选择结构程序设计36/44 case 8:printf(龙n);break;case 9:printf(蛇n);break;case 10:printf(马n);break;case 11:printf(羊n);elseprintf(请输入一个大于0的年份n);第4章 选择结构程序设计37/441下面程序段输出的结果是( ) (2013.7单选题) main() int x=5,y; if(x0)y=1; if(x= =0)y=0; y=1; printf(%d,y);A.-5 B-1 C0D.12若执行下列程序

27、时,从键盘输入数据3和4,则程序的输出结果是( )(2013.7单选题) main() int a,b,s; scanf(%d%d,&a,&b); s=a; if(aa+b) if(ab)m=a; else m=b; else if(ba) m=a; else m=b; printf(m= %dn,m); return 0;请简述程序的功能。(2013.7简答题4分)答:输入三个数,如果最后一个数比前两个数之和要大,则输出前两个数中较大的数;如果最后一个数等于或者小于前两个数之和,则输出前两个数中较小的数。 DB第4章 选择结构程序设计38/444当输入2时,请写出下面程序的运

28、行结果。(2013.7阅读分析题5分)# include stdio.hint main(void) int x,y=1; scanf( %d , &x) ; switch(x) case 1: y= y+1; printf( y= % dn , y) ; case 2: y= y+2 ; printf( y= % dn , y) ; default : y= y+5 ; printf( y= % dn ,y) ; return 0;y=3y=8第4章 选择结构程序设计39/445.下面程序段执行的结果是( )(2013.4单选题)main() int x=1,y;if(x=0) y=

29、0;else y=1;printf(“x=%d,y=%dn”,x,y);A.x=0,y=0 B.x=1,y=0 C.x=0,y=1 D.x=1,y=16当a=1,b=3,c=5,d=4时,执行下面程序段后,x的值是( )(2013.4单选题) if(ab) if(cd) x=1; else if(ac) x=2; else x=3;else x=4;A.1 B.2 C.3 D.47简述if(表达式)语句1 else 语句2 的执行过程。(2013.4简答题4分)DB答:当表达式的值为非(或满足,或为真)执行语句,然后执行结构的后续语句;如果表达式的值为,或不满足,或为假)执行语句,然后执行结构

30、的后续语句。 第4章 选择结构程序设计40/448阅读下面程序,当程序运行后从键盘上输入一个*号,写出执行结果(2013.4阅读分析题5分)#includemain() char ch; ch=getchar(); switch(ch); case +:printf(“+n”);break; case *:printf(“*n”); default:printf(“n”); case -:printf(“-“);break; case /:printf(“end”); * * * *第4章 选择结构程序设计41/449下列程序段执行后的输出结果为 (2012.7单选题)int i =-1;if(i=0) printf(* * * * n);else printf (%n); ( )A. * * * * cB. % % % %C.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论