循环结构市公开课一等奖省赛课获奖课件_第1页
循环结构市公开课一等奖省赛课获奖课件_第2页
循环结构市公开课一等奖省赛课获奖课件_第3页
循环结构市公开课一等奖省赛课获奖课件_第4页
循环结构市公开课一等奖省赛课获奖课件_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

第11讲break语句和continue语句循环结构程序举例。循环结构第1页循环结构第2页5.6break语句和continue语句为了使循环控制愈加灵活,C语言还提供了break语句和continue语句。

break语句在循环控制中作用是强行结束该语句所在整个循环结构,转向执行循环体语句后下一条语句。

continue语句作用是提前结束屡次循环中某一次循环,即跳过循环体语句中位于continue语句之后其余语句,从而进入下一次循环。循环结构第3页1.break语句在第四章中已经介绍过,用break语句能够使流程跳出由switch语句组成多分支结构。当break语句用在do-while、for或while循环语句中时,也能够使程序终止循环,跳出循环结构。通常break语句总是与if语句配合使用,即当满足某个给定条件要求时便跳出循环。循环结构第4页例5.6在循环体中使用break语句。main(){inti,s;s=0;for(i=1;i<=10;i++)

{s=s+i;if(s>5)

break;printf("s=%d\n",s);

}}程序输出结果以下:s=1s=3

注意

只能在do-while、for、while循环语句或switch语句体内使用break语句,其作用是使程序提前终止它所在语句结构,转去执行下一条语句;若程序中有上述四种结构语句嵌套使用,则break语句只能终止它所在最内层语句结构。循环结构第5页2.continue语句例5.7在循环体中使用continue语句。main(){inti,s=0;for(i=1;i<=8;i++){s=s+i;printf("\ni=%d",i);if(i%2==0)

continue;printf("s=%d\n",s);

}}continue语句只能在do-while、for和while循环语句中使用,其作用是提前结束屡次循环中某一次循环。运行结果:i=1s=1i=2i=3s=6i=4i=5s=15i=6i=7s=28i=8

在执行8次循环中,当i值为偶数时,执行continue语句,其作用是跳过printf(“s=%d\n”,s);语句,继续执行下一次循环。循环结构第6页5.7选择结构程序举例

许多实际应用程序都要用到循环处理,在学习了本章基本内容之后,我们在这里着重介绍两个最基本、最惯用循环处理算法----穷举法和递推法。1.穷举法

“穷举法”也称为“枚举法”或“试凑法”,即采取循环结构将全部可能出现情况一一进行测试,判断是否满足给定条件。循环结构第7页例5.8求n!。即计算1×2×3×…×n值。程序以下:main(){inti,n;longs=1;printf("Entern:");scanf("%d",&n);for(i=1;i<=n;i++)

s=s*i;printf("%d!=%ld\n",n,s);}运行结果以下:Entern:6<CR>6!=720分析:把每一个参加乘积数用循环变量一一列举出来,并相乘。循环结构第8页

题目:从键盘输入全班学习成绩,统计出最高分、最低分和平均分。

分析:因为不知道学生人数,程序中用一个负数来作为结束输入成绩标志。例5.9极值问题main(){intx,max,min,n;

float

sum=0;printf("Enterx(-1toend):");scanf("%d",&x);

max=x;min=x;n=0;while(x>=0){sum=sum+x;n=n+1;if(x>max)max=x;if(x<min)min=x;scanf("%d",&x);

}if(max>0)printf("max=%d,min=%d,aver=%f\n",max,min,sum/n);}运行结果以下:Enterx(-1toend):8776539958-1<CR>max=99,min=53,aver=74.599998循环结构第9页例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("NO!\n");}

素数是一个大于2,且只能被1和它自己整除整数。试编程求输入某个正整数是否为素数。若是,输出YES,若不是,输出NO。

分析:判别某数m是否为素数最简单方法是:穷举出全部可能除数2、3、4、…一直到m-1,分别判定m能否被它们整除,只要有一个能整除,m就不是素数;只有全部都不能整除时,m才是素数。运行结果以下:Enterainteger:157<CR>157:YES!实际上只要试除到m/2或sqrt(m)就足够了。循环结构第10页例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+z/3.0==100.0)

printf("x=%d,y=%d,z=%d\n",x,y,z);}}该程序能从七百各种可能组合情况中挑选出四种满足要求答案。运行结果以下:x=4,y=12,z=84x=11,y=8,z=81x=18,y=4,z=78x=25,y=0,z=75循环结构第11页例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-na*17-nb*27;if(r<rmin){rmin=r;a=na;b=nb;}}printf("a=%d,b=%d,min=%d\n",a,b,rmin);}运行结果以下:a=11,b=5,min=1循环结构第12页2.递推法“递推法”又称为“迭代法”,其基本思想是把一个复杂计算过程转化为简单过程屡次重复。例5.13猴子吃桃问题:小猴在某天摘桃若干个,当日吃掉二分之一,以为还不过瘾,又多吃了一个。第二天吃了剩下桃子二分之一又多一个;以后天天都这么吃下去,直到第8天要吃时只剩下一个桃子了,问小猴子第一天共摘下了多少个桃子?

分析:这是一个“递推”问题,先从最终一天桃子数推出倒数第二天桃子数,再从倒数第二天桃子数推出倒数第三天桃子数……。设第n天桃子为xn,那么它是前一天桃子数xn-1二分之一减1,递推公式为:xn=xn-1/2–1。即:xn-1=(xn+1)×2。循环结构第13页例5.13猴子吃桃问题程序main(){inttao,n;tao=1;/*已知第8天桃子数*/for(n=7;n>=1;n=n-1)

tao=(tao+1)*2;printf("tao(1)=%d\n",tao);}程序执行后输出结果以下:tao(1)=382循环结构第14页例5.15求pi近似值

分析:本题递推公式比上面两个例子复杂,只能将分子和分母分别递推出新值后再做除法运算。其递推方法和求解步骤以下:1.分母n初值为1,递推公式:n=n+2;2.分子s初值为1.0,递推公式:s=(-1)*s;3.公式中某项值为:t=s/n。从以上求pi公式来看,不能决定n最终值应该是多少;但能够用最终一项t=s/n绝对值小于0.0001来作为循环结束条件。题目:用公式pi/4=1-1/3+1/5-1/7…求pi近似值,直到最终一项绝对值小于10-4为止。循环结构第15页#include"math.h"

main(){intn;floatt,s,pi;pi=0;/*变量pi用来存放累加和*/n=1;/*第一项分母值为1*/s=1.0;/*第一项分子值为+1*/t=s/n;/*先求出第一项值*/while(fabs(t)>=0.0001)

{pi=pi+t;

n+=2;s=-1*s;t=s/n;/*递推出下一项值*/

}

printf("pi=%f\n",pi*4);}程序执行后输出以下结果。pi=3.141397pi/4=1-1/3+1/5-1/7+1/9……循环结构第16页

分析:求最大条约数迭代步骤以下:(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);

r=m%n;while(r!=0){m=n;n=r;r=m%n;}printf("gcd=%d\n",n);}程序执行后输出结果以下:Enterm,n:14,8<CR>gcd=2循环结构第17页分析:两个数最大条约数必定不会比其中小者大。用穷举法求最大条约数main(){intm,n,r;printf("Enterm,n:");scanf("%d,%d",&m,&n);

r=m<n?m:n;

/*取m,n中小者*/while(r>1){if(m%r==0&&n%r==0)

break;

/*找到r即为最大条约数,中止循环。*/

r=r-1;/*从大到小穷举出全部可能数*/}printf("gcd(%d,%d)=%d\n",m,n,r);}循环结构第18页例5.17高次方程求根。本例介绍其中较简单二分法,其递推方法以下:(1)输入两个点x坐标值a,b,使f(a)*f(b)<0,即确保在区间[a,b]内有一根。(2)求区间[a,b]中点c=(a+b)/2。(3)计算f(c)值,若该值小于给定精度要求,则c为求得近似根,程序结束;不然执行步骤(4)。(4)若f(a)与f(c)同号,则[a,c]无根,用c代替a;不然[c,b]无根,用c代替b;使求根区间缩小二分之一,并

温馨提示

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

评论

0/150

提交评论