《第11讲 break语句和continue语句 循环结构程序举例》由会员分享,可在线阅读,更多相关《第11讲 break语句和continue语句 循环结构程序举例(22页珍藏版)》请在金锄头文库上搜索。
1、第11讲break语句和continue语句 循环结构程序举例。 5.6 break语句和语句和continue语句语句 为了使循环控制更加灵活,语言还为了使循环控制更加灵活,语言还提供了提供了break语句和语句和continue语句。语句。 break语句语句在循环控制中的作用是在循环控制中的作用是强强行结束行结束该语句所在的该语句所在的整个循环结构整个循环结构,转,转向执行循环体语句后的下一条语句。向执行循环体语句后的下一条语句。 continue语句语句的作用是的作用是提前结束提前结束多次多次循环中的循环中的某一次循环某一次循环,即跳过循环体语,即跳过循环体语句中位于句中位于conti
2、nue语句之后的其余语句,语句之后的其余语句,从而进入下一次循环。从而进入下一次循环。 1. break语句语句 在第四章中已经介绍过,用在第四章中已经介绍过,用break语句语句可以使流程可以使流程跳出跳出由由switch语句语句构构成的多分支成的多分支结构结构。 当当break语句语句用在用在do-while、for或或while循环语句中时循环语句中时, 也可以也可以使程序终使程序终止循环,跳出循环结构止循环,跳出循环结构。通常通常break语句总是语句总是与与if语句语句配合使用配合使用,即当满,即当满足某个给定的条件要求时便跳出循环。足某个给定的条件要求时便跳出循环。 例例5.6 在
3、循环体中使用在循环体中使用break语句。语句。 main()int i, s; s=0; for(i=1; i5) break; printf(s=%dn, s); 程序的输出结果如下:程序的输出结果如下: s=1 s=3 注意注意 只能只能在在do-while、for、while循环语句或循环语句或switch语句体内语句体内使用使用break语句语句,其其作用作用是使程序是使程序提前终止提前终止它所在的语句结构它所在的语句结构,转去,转去执行下一条语句执行下一条语句;若若程序程序中中有有上述四种结构语句的上述四种结构语句的嵌套使用嵌套使用,则,则break语句语句只能终止只能终止它所在的
4、它所在的最内层最内层的语句结构的语句结构。 2. continue语句语句 例例5.7 在循环体中使用在循环体中使用continue语句。语句。 main() int i, s=0; for(i=1; i=8; i+) s= s+i; printf(ni=%d , i); if(i%2=0) continue; printf(s=%dn, s); continuecontinue语句语句只能在只能在do-whiledo-while、forfor和和whilewhile循环循环语句中使用,其语句中使用,其作用作用是是提前结束提前结束多次循环中的多次循环中的某一某一次循环次循环。运行结果:运行结果
5、:i=1 s=1i=2 i=3 s=6i=4 i=5 s=15i=6 i=7 s=28i=8 在执行的在执行的8 8次次循环中,当循环中,当i i的值为的值为偶数偶数时,时,执行执行continuecontinue语句语句,其作用是其作用是跳过跳过printfprintf(“s=%(“s=%dn”, s); dn”, s); 语句语句,继续继续执执行行下一次循环下一次循环。 5.7 选择结构程序举例选择结构程序举例 许多实际应用的程序都要用到循环处许多实际应用的程序都要用到循环处理,在学习了本章的基本内容之后,我理,在学习了本章的基本内容之后,我们在这里着重们在这里着重介绍两个最基本、最常用介
6、绍两个最基本、最常用的循环处理算法的循环处理算法-穷举法穷举法和和递推法递推法。1. 1. 穷举法穷举法 “穷举法穷举法”也称为也称为“枚举法枚举法”或或“试试凑法凑法”, 即即采用循环结构采用循环结构将将所有可能所有可能出出现的情况现的情况一一进行测试一一进行测试,判断,判断是否满足是否满足给定的给定的条件条件。 例例5.8 求求n!。即计算即计算123n的值。的值。 程序如下:程序如下: main() int i, n; long s=1; printf(Enter n: ); scanf(%d,&n); for(i=1; i=n; i+ ) s=s*i; printf(%d!=%ldn,
7、 n,s); 运行结果如下:运行结果如下:Enter n: 66!=720分析:把每一个参与乘积的数用循环变量一一分析:把每一个参与乘积的数用循环变量一一列举出来,并相乘。列举出来,并相乘。 题目题目:从键盘从键盘输入全班的学输入全班的学习成绩,统计习成绩,统计出最高分、最出最高分、最低分和平均分。低分和平均分。 分析分析:由于由于不不知道学生人数知道学生人数,程序中用一个程序中用一个负数负数来作为来作为结结束输入成绩的束输入成绩的标志标志。例例5.9 极值问题极值问题 main() int x, max, min, n; float sum=0; printf(Enter x(-1 to e
8、nd): ); scanf(%d,&x); max=x; min=x; n=0; while(x=0) sum = sum + x; n= n+1; if(xmax) max = x; if(x0) printf(max=%d, min=%d, aver=%fn, max, min, sum/n); 运行结果如下:运行结果如下:Enter x(-1 to end): 87 76 53 99 58 -1max=99, min=53, aver=74.599998 例例5.10素数问题素数问题 程序如下:main()intm,i,flag;printf(Enterainteger:);scanf(
9、%d,&m);flag=1;/*先假定m是素数*/for(i=2;i=m-1;i+)if(m%i=0)flag=0;break;printf(%d:,m);if(flag)printf(YES!n);elseprintf(NO!n);素数是一个大于2,且只能被1和它自己整除的整数。试编程求输入的某个正整数是否为素数。若是,输出YES,若不是,输出NO。分析:判别某数m是否为素数的最简单方法是:穷举出所有可能的除数2、3、4、一直到m-1,分别判定m能否被它们整除,只要有一个能整除,m就不是素数;只有全部都不能整除时,m才是素数。运行结果如下:运行结果如下:Enter a integer : 1
10、57 157: YES! 实际上只要试除到实际上只要试除到m/2或或sqrt(m)就就足够了。足够了。例例5.11 百钱买百鸡问题百钱买百鸡问题 “鸡翁一,值钱三;鸡母一,值钱五;鸡雏三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”。分析:设鸡翁x只、鸡母y只、鸡雏z只。解题的思路是:鸡翁数x的值可能是0,33中的任何一个值;鸡母数y的值可能是0,20中的任何一个值;将所有可能出现的情况都一一进行测试,若满足要求就把这种情况输出,作为可能的一个解。main()intx,y,z;for(x=0;x=33;x+)for(y=0;y=20;y+)z=100-x-y;if(x*3.0+y*5.0+
11、z/3.0=100.0)printf(x=%d,y=%d,z=%dn,x,y,z); 该程序能从该程序能从七百多种七百多种可能的组合情况可能的组合情况中中挑选出挑选出四种四种满足要求的答案。运行结满足要求的答案。运行结果如下:果如下: x=4, y=12, z=84x=11, y=8, z=81x=18, y=4, z=78 x=25, y=0, z=75 例例5.12 长材料截取短料的最优化方法长材料截取短料的最优化方法题目题目:有一根长度为323米的钢材料,要将它截取成两种规格a、b的长度分别为17米和27米的短料,每种至少1段,问分隔成a,b各多少段后,剩余的残料r最少?分析:规格a的钢
12、材料的个数na可能为:1、2、3、(321-27)/17。main()intna,nb,a,b,r,rmin;na=1;nb=1;rmin=323-17-27;for(na=1;na=(323-27)/17;na+)nb=(323-na*17)/27;r=323-na*17-nb*27;if(r=1;n=n-1)tao=(tao+1)*2;printf(tao(1)=%dn,tao);程序执行后输出结果如下:tao(1)=382例例5.14 斐波那契数列斐波那契数列:1,1,2,3,5,8 此数列的第一项和第二项为1,从第三项开始,每一项的值是前两项的值之和;编程输出该数列的前15项。每行输出
13、5个数。分析:斐波那契数列的递推公式递推公式为:fn=fn-1+fn-2,用第1项和第2项的值求出第3项的值以后,再用第2项和第3项的值求出第4项的值,main()inti,f1=1,f2=1,f3;printf(n%5d%5d,f1,f2);for(i=3;i=0.0001)pi=pi+t;n+=2;s=-1*s;t=s/n;/*递推出下一项的值*/printf(pi=%fn,pi*4);程序执行后输出以下结果。程序执行后输出以下结果。pi=3.141397pi/4=1-1/3+1/5-1/7+1/9分析:求最大公约数的迭代步骤如下:(1)输入两个正整数m,n;(2)用m除以n得到一个余数r
14、;(3)若r=0,则n为最大公约数,程序结束;否则用n取代m,用r取代n,转去执行第(2)步。例例5.16 求两个正整数的最大公约数求两个正整数的最大公约数程序如下:main()intm,n,r;printf(Enterm,n:);scanf(%d,%d,&m,&n);r=m%n;while(r!=0)m=n;n=r;r=m%n;printf(gcd=%dn,n);程序执行后输出结果如下:程序执行后输出结果如下:Enter m,n:14,8gcd=2分析:两个数的最大公约数肯定不会比其中的小者大。用穷举法求最大公约数用穷举法求最大公约数main()intm,n,r;printf(Enterm,
15、n:);scanf(%d,%d,&m,&n);r=m1)if(m%r=0&n%r=0)break;/*找到r即为最大公约数,中止循环。*/r=r-1;/*从大到小穷举出所有可能的数*/printf(gcd(%d,%d)=%dn,m,n,r);例例5.17 高次方程求根。高次方程求根。 本例介绍其中较简单的二分法,其递推方法如下:(1)输入两个点的x坐标值a,b,使f(a)* f(b)0);doc=(a+b)/2; fc=3*c*c*c-4*c*c-5*c+13; if(fa*fc0)a=c;elseb=c;while(fabs(fc)0.0001);printf(3*x*x*x-4*x*x-5*x+13=0nx=%f,y=%fn,c,fc);例例5.17 求高次方程求高次方程3x3- 4x2- 5x+13=0的根的根 程序执行后输出结果如下:程序执行后输出结果如下:Enter a,b:1,8Enter a,b:-5,83*x*x*x-4*x*x-5*x+13=0x=-1.548908,f=0.000039 第五章第五章 作业作业教材教材P67 P67 习题二习题二 一、二、三大题全做一、二、三大题全做四大题四大题1 1、3 3、6 6小题小题