《第4章程序流程控制》由会员分享,可在线阅读,更多相关《第4章程序流程控制(19页珍藏版)》请在金锄头文库上搜索。
1、第4章程序流程控制Stillwatersrundeep.流静水深流静水深,人静心深人静心深Wherethereislife,thereishope。有生命必有希望。有生命必有希望内容提要n本章主要介绍C语言提供的各种程序流程控制结构n包括选择结构n循环结构n其他转移控制语句。通过本章学习n重点进行程序设计能力的训练,能编制完整的较为复杂的程序。结构化程序设计的概念n结构化程序设计方法就是只采用3种基本的程序控制结构来编制程序,从而使程序具有好的结构。这3种基本结构就是顺序结构、选择结构和循环结构,见图4-1。顺序结构n如图4-1(a)所示,S1和S2是一条语句或一个语句序列。在顺序结构中,S1
2、和S2被依次执行,即只有当S1执行完成之后才执行S2。n前3章中编制的简单程序,采用的都是顺序结构。这些程序在执行时,总是从第一个语句开始,顺序执行各个语句,直到所有的语句都执行完,程序运行结束。选择结构n如图4-1(b)所示。程序执行到选择结构时,首先对条件进行判断,当条件成立或不成立时分别执行S1或S2,二者择其一。n不管执行哪一个语句序列,执行结束后,控制都转移到同一出口的地方。采用选择结构,可以使程序不是仅解决某一个问题,而是可解决某一类问题,编制这样的通用程序,可以收到事半功倍的效果。循环结构n如图4-1(c)所示。程序执行到循环结构时,将会判断循环的条件是否成立。如果循环条件成立,
3、将反复执行语句序列S1(也称循环体),直到条件不成立时终止循环,控制转移到循环体外,继续执行后续的部分。n采用循环结构,可以大大减少编程的复杂性和工作量,用较短的程序完成大量的处理工作。计算机算法的一个重要特点,就是将一个复杂的问题变成简单问题的多次重复。选择结构n用if-else语句构成二分支选择结构n用if-else语句构成多分支选择结构n用条件表达式实现的选择结构n用switch语句构成多分支选择结构n用switch和break联合构成多分支选择结构循环结构nfor循环nwhile循环ndo-while循环n循环的嵌套转移控制语句nbreak语句ncontinue语句在循环结构中的作用n
4、goto语句和标号本章总结n本章应掌握结构化程序设计的3种基本程序控制结构。n在深入理解各种选择结构和循环结构执行流程的基础上,正确使用if语句组织二分支选择结构;用嵌套if、if-elseif-else或switch语句组织多分支选择结构n用for语句、while语句、do-while语句及其嵌套形式组织循环结构,并解决一些简单的实际问题。n本章的难点是:选择结构和循环结构中测试表达式的正确构造和使用;选择结构和循环结构中空语句和复合语句的使用;switch选择结构和各种循环结构中转移控制语句break和continue的使用。本章习题n一、选择题n1.结构化程序设计使用的基本程序控制结构为
5、_。nA.模块结构、选择结构和递归结构B.条件结构、顺序结构和过程结构nC.顺序结构、选择结构和循环结构D.转移结构、嵌套结构和递归结构n2.若要求在if后一对圆括号中表示a不等于0的关系,下列能正确表示这一关系的表达式是_。nA.a0B.!aC.a=0D.an3.下面的程序_。nmain()nintx=3,y=0,z=0;nif(x=y+z)printf(*);nelseprintf(#);nnA.有语法错误,不能通过编译nB.输出*nC.可以通过编译,但不能通过连接,因而不能运行nD.输出#本章习题n4.下面的程序运行时,若从键盘输入3和4,则输出为_。nmain()ninta,b,s;n
6、scanf(%d%d,&a,&b);ns=a;nif(s5)printf(%dn,a);nelseprintf(%dn,a-);nnA.7B.6C.5D.4本章习题n6.若所有变量均已正确定义,下列程序段运行后x的值是_。na=b=c=0;x=35;nif(!a)x-;nelseif(b);nif(c)x=3;nelsex=4;nA.34B.4C.35D.3n7.若所有变量均已正确定义,下面的程序段所表示的数学函数关系是_。ny=-1;nif(x!=0)nif(x0)y=1;nelsey=0;nn1(x0)1(x0)nA.y=0(x=0)B.y=1(x=0)n1(x0)0(x0)nn0(x0)
7、1(x0)nC.y=1(x=0)D.y=1(x=0)n1(x0)0(x0)本章习题n8.下列与y=(x0?1:x0)y=1;B.if(x)nelseif(x0)y=1;nelsey=0;elseif(x=0)nif(x0)y=1;if(x0)y=1;nelseif(x=0)y=0;elsey=1;nelsey=1;本章习题n9.若定义:floatx;inta,b;,则下列4组switch语句中正确的是_。nA.switch(x)B.switch(x)ncase1.0:printf(*n);case1,2:printf(*n);ncase2.0:printf(*n);case3:printf(*
8、n);nnC.switch(a+b)D.switch(a+b);ncase1:printf(*n);case1:printf(*n);ncase1+2:printf(*n);case2:printf(*n);n本章习题n10.以下程序的输出结果是_。nmain()ninta=0,i;nfor(i=1;i5;i+)nswitch(i)ncase0:ncase3:a+=2;ncase1:ncase2:a+=5;ndefault:a+=5;nnnprintf(%dn,a);nnA.37B.13C.10D.20本章习题n二、填空题n1.以下两条if语句可合并成一条if语句为_。nif(ab)print
9、f(*y=%dn,y);nelseprintf(#x=%dn,x);本章习题n2.以下程序的功能是:从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。请填空。nmain()nfloatx,amax,amin;nscanf(%f,&x);namax=x;namin=x;nwhile()nif(xamax)amax=x;nif(_)amin=x;nscanf(%f,&x);nnprintf(namax=%fnamin=%fn,amax,amin);n本章习题n三、编程题n1.从键盘输入100个整数,从中找出最大数和最小数。n2.编一个程序计算4个已知数的最小公倍数。n3.试编程计算1!+2!+20!。n4.请编制程序打印出100以内的所有素数。n5.李先生岁数的平方与他的夫人的岁数之和是1053,而他的夫人岁数的平方与他的岁数之和是873,请编程计算李先生及其夫人的岁数各是多少。