《break语句和continue语句 循环结构程序举例.pptx》由会员分享,可在线阅读,更多相关《break语句和continue语句 循环结构程序举例.pptx(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第1页/共22页5.6 break语句和continue语句 为了使循环控制更加灵活,语言还为了使循环控制更加灵活,语言还提供了提供了break语句和语句和continue语句。语句。break语句语句在循环控制中的作用是在循环控制中的作用是强强行结束行结束该语句所在的该语句所在的整个循环结构整个循环结构,转,转向执行循环体语句后的下一条语句。向执行循环体语句后的下一条语句。continue语句语句的作用是的作用是提前结束提前结束多次多次循环中的循环中的某一次循环某一次循环,即跳过循环体语,即跳过循环体语句中位于句中位于continue语句之后的其余语句,语句之后的其余语句,从而进入下一次循环
2、。从而进入下一次循环。第2页/共22页1.break语句 在第四章中已经介绍过,用在第四章中已经介绍过,用break语句语句可以使流程可以使流程跳出跳出由由switch语句语句构构成的多分支成的多分支结构结构。当当break语句语句用在用在do-while、for或或while循环语句中时循环语句中时,也可以也可以使程序终使程序终止循环,跳出循环结构止循环,跳出循环结构。通常通常break语句总是语句总是与与if语句语句配合使用配合使用,即当满,即当满足某个给定的条件要求时便跳出循环。足某个给定的条件要求时便跳出循环。第3页/共22页例5.6 在循环体中使用break语句。main()int
3、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页/共22页2.continue语句 例例
4、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);continue continue语句语句只能在只能在do-whiledo-while、forfor和和whilewhile循环循环语句中使用,其语句中使用,其作用作用是是提前结束提前结束多次循环中的多次循环中的某一某一次循环次循环。运行结果:运行结果:i=1 s=1i=2 i=3 s=6i=4 i=5 s=15i=6 i=7 s=28i=8 在执行的在执行
5、的8 8次次循环中,当循环中,当i i的值为的值为偶数偶数时,时,执行执行continuecontinue语句语句,其作用是其作用是跳过跳过printf(printf(“s=%s=%dndn”,s);,s);语句语句,继续继续执执行行下一次循环下一次循环。第5页/共22页5.7 选择结构程序举例 许多实际应用的程序都要用到循环处许多实际应用的程序都要用到循环处理,在学习了本章的基本内容之后,我理,在学习了本章的基本内容之后,我们在这里着重们在这里着重介绍两个最基本、最常用介绍两个最基本、最常用的循环处理算法的循环处理算法-穷举法穷举法和和递推法递推法。1.1.穷举法穷举法 “穷举法穷举法”也称
6、为也称为“枚举法枚举法”或或“试试凑法凑法”,即即采用循环结构采用循环结构将将所有可能所有可能出出现的情况现的情况一一进行测试一一进行测试,判断,判断是否满足是否满足给定的给定的条件条件。第6页/共22页例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,n,s);运行结果如下:运行结果如下:Enter n:66!=720分析:把每一个参与乘积的数用循环变量一一分析:把每一个参与乘积的数用循环变量一一列举出来,
7、并相乘。列举出来,并相乘。第7页/共22页 题目题目:从键盘从键盘输入全班的学输入全班的学习成绩,统计习成绩,统计出最高分、最出最高分、最低分和平均分。低分和平均分。分析分析:由于由于不不知道学生人数知道学生人数,程序中用一个程序中用一个负数负数来作为来作为结结束输入成绩的束输入成绩的标志标志。例5.9 极值问题 main()int x,max,min,n;float sum=0;printf(Enter x(-1 to end):);scanf(%d,&x);max=x;min=x;n=0;while(x=0)sum=sum+x;n=n+1;if(xmax)max=x;if(x0)print
8、f(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 第8页/共22页例5.10素数问题 程序如下:main()intm,i,flag;printf(Enterainteger:);scanf(%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(
9、NO!n);素数是一个大于2,且只能被1和它自己整除的整数。试编程求输入的某个正整数是否为素数。若是,输出YES,若不是,输出NO。分析:判别某数m是否为素数的最简单方法是:穷举出所有可能的除数2、3、4、一直到m-1,分别判定m能否被它们整除,只要有一个能整除,m就不是素数;只有全部都不能整除时,m才是素数。运行结果如下:运行结果如下:Enter a integer:157 157:YES!实际上只要试除到实际上只要试除到m/2或或sqrt(m)就足够了。就足够了。第9页/共22页例5.11 百钱买百鸡问题“鸡翁一,值钱三;鸡母一,值钱五;鸡雏三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何
10、?”。分析:设鸡翁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+z/3.0=100.0)printf(x=%d,y=%d,z=%dn,x,y,z);该程序能从该程序能从七百多种七百多种可能的组合情况可能的组合情况中中挑选出挑选出四种四种满足要求的答案。运行结满足要求的答案。运行结果如下:果如下:
11、x=4,y=12,z=84x=11,y=8,z=81x=18,y=4,z=78 x=25,y=0,z=75 第10页/共22页例5.12 长材料截取短料的最优化方法题目题目:有一根长度为323米的钢材料,要将它截取成两种规格a、b的长度分别为17米和27米的短料,每种至少1段,问分隔成a,b各多少段后,剩余的残料r最少?分析:规格a的钢材料的个数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
12、-na*17-nb*27;if(r=1;n=n-1)tao=(tao+1)*2;printf(tao(1)=%dn,tao);程序执行后输出结果如下:tao(1)=382第13页/共22页例5.14 斐波那契数列:1,1,2,3,5,8 此数列的第一项和第二项为1,从第三项开始,每一项的值是前两项的值之和;编程输出该数列的前15项。每行输出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
13、;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第16页/共22页分析:求最大公约数的迭代步骤如下:(1)输入两个正整数m,n;(2)用m除以n得到一个余数r;(3)若r=0,则n为最大公约数,程序结束;否则用n取代m,用r取代n,转去执行第(2)步。例5.16 求两个正整数的最大公约数程序如下:main()intm,n,r;printf(Enterm,n:);scanf(%d,%d,&m,&n
14、);r=m%n;while(r!=0)m=n;n=r;r=m%n;printf(gcd=%dn,n);程序执行后输出结果如下:程序执行后输出结果如下:Enter m,n:14,8gcd=2第17页/共22页分析:两个数的最大公约数肯定不会比其中的小者大。用穷举法求最大公约数main()intm,n,r;printf(Enterm,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);第18页/共22页例5.1
15、7 高次方程求根。本例介绍其中较简单的二分法,其递推方法如下:(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=0 x=-1.548908,f=0.000039 第20页/共22页第五章第五章 作业作业教材P67 P67 习题二 一、二、三大题全做四大题1 1、3 3、6 6小题第21页/共22页感谢您的观赏!第22页/共22页