某高校循环程序设计基础系 .ppt_第1页
某高校循环程序设计基础系 .ppt_第2页
某高校循环程序设计基础系 .ppt_第3页
某高校循环程序设计基础系 .ppt_第4页
某高校循环程序设计基础系 .ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

5,第五章,循环程序设计,2020年6月7日星期日,2,重庆理工大学计算机学院基础教研室,在C语言中可用以下语句构成循环:ifgotowhiledowhilefor其中ifgoto是通过编程技巧(if语句和goto语句组合)构成循环功能。而且goto语句将影响程序流程的模块化,使程序可读性变差,所以结构化程序设计主张限制goto语句的使用。其他三种语句是C语言提供的循环结构专用语句。,2020年6月7日星期日,3,重庆理工大学计算机学院基础教研室,循环结构两大要素:循环条件p结束循环的条件表达式循环体A循环执行的语句或语句组设置循环条件要特别注意确定:循环变量的初值循环变量的终值循环变量的变化规律,名词解释无限循环死循环,名词解释空循环,2020年6月7日星期日,4,重庆理工大学计算机学院基础教研室,【例二】main()intn=0,sum=0;loop:if(sum=10000)gotoend;sum+=n;+n;gotoloop;end:printf(“n=%dn”,n);,直到型,当型,1、ifgoto语句循环结构,【例一】main()intn=0,sum=0;loop:sum+=n;+n;if(sum=10000)gotoloop;printf(“n=%dn”,n);,2020年6月7日星期日,5,重庆理工大学计算机学院基础教研室,2、while语句循环结构,【例三】main()intn=0,sum=0;while(sum=10000)sum+=n;+n;printf(“n=%dn”,n);,当型,一般形式while(条件表达式)循环体;用于构成当型循环:先判断后执行/条件为真继续循环,直到条件为假时结束循环。【注意】条件表达式或循环体内应有改变条件使循环结束的语句,否则可能陷入“死循环”。,2020年6月7日星期日,6,重庆理工大学计算机学院基础教研室,3、dowhile语句循环结构,【例四】main()intn=0,sum=0;dosum+=n;+n;while(sum=10000)printf(“n=%dn”,n);,一般形式do循环语句(组)while(条件表达式);用于构成直到型循环:先执行后判断/条件为真继续循环,直到条件为假时结束循环。【注意】条件表达式或循环体内同样应有改变条件使循环结束的语句,否则可能陷入“死循环”。,直到型,直到sum超过10000为止,2020年6月7日星期日,7,重庆理工大学计算机学院基础教研室,【例五】从键盘输入一个整数12456,分析以下程序运行结果。,main()intnum,c;printf(“请输入一个整数:“);scanf(“%d”,/*取得num的个位数*/,/*输出num的个位数*/,/*直到num/10为0*/,结果:65421将各位数字反序显示出来,3、dowhile语句循环结构示例,2020年6月7日星期日,8,重庆理工大学计算机学院基础教研室,4、for语句循环结构,一般形式for(表达式1;条件表达式;表达式3)循环语句(组);用于构成计数型当型循环:先判断后执行/条件为真继续循环,直到条件为假时结束循环。表达式1:整个循环中只执行1次,常用来对循环变量设置初值条件表达式(表达式2):其值为真(非0)时继续执行循环语句(组),否则结束循环表达式3:常用于循环变量值的更新(循环体的一部分每次循环语句组执行完后执行一次),【例六】求i=1+2+3+4+99+100(i=1100)main()inti,s=0;for(i=1;i50)break;while(a=14);printf(a=%d,y=%dn,a,y);,结果:a=16,y=60,变量跟踪ay100121214+212+16=2814+216+28=4414+216+44=60,变量跟踪分析法,break结束循环在switch中退出switch结构;在循环中结束循环。continue结束本次循环循环“短路”(跳过循环体后面的语句,开始下一轮循环)。goto跳转跳到循环体外指定标号处。【注意】goto语句只能从循环内向外跳转,反之不可!基础系,2020年6月7日星期日,10,重庆理工大学计算机学院基础教研室,5、其他循环控制结构,break结束循环在switch中退出switch结构;在循环中结束循环。continue结束本次循环循环“短路”(跳过循环体后面的语句,开始下一轮循环)。goto跳转跳到循环体外指定标号处。【注意】goto语句只能从循环内向外跳转,反之不可!基础系,求以下程序段执行后x和i的值。inti,x;for(i=1,x=1;i=10)break;if(x%2=1)x+=5;continue;x-=3;,结果:x的值为10,i的值为6,变量跟踪ix11626333848555106,2020年6月7日星期日,11,重庆理工大学计算机学院基础教研室,5、其他循环控制结构,break结束循环在switch中退出switch结构;在循环中结束循环。continue结束本次循环循环“短路”(跳过循环体后面的语句,开始下一轮循环)。goto跳转跳到循环体外指定标号处。【注意】goto语句只能从循环内向外跳转,反之不可!,main()inti=1;while(i=15)if(+i%3!=2)continue;elseprintf(%d,i);printf(n);,结果:2581114,变量跟踪i+i%3输出i12222303414525560,2020年6月7日星期日,12,重庆理工大学计算机学院基础教研室,5、其他循环控制结构,break结束循环在switch中退出switch结构;在循环中结束循环。continue结束本次循环循环“短路”(跳过循环体后面的语句,开始下一轮循环)。goto跳转跳到循环体外指定标号处。【注意】goto语句只能从循环内向外跳转,反之不可!,main()inti,k=0;for(i=1;i+)k+;while(ki*i)k+;if(k%3=0)gotoloop;loop:printf(%d,%d,i,k);,结果:2,3,2020年6月7日星期日,13,重庆理工大学计算机学院基础教研室,循环常用算法,1、枚举法(穷举法)“笨人之法”:把所有可能的情况一一测试,筛选出符合条件的各种结果进行输出。【例一】百元买百鸡:用一百元钱买一百只鸡。已知公鸡5元/只,母鸡3元/只,小鸡1元/3只。分析:这是个不定方程三元一次方程组问题(三个变量,两个方程)xyz=1005x3yz/3=100设公鸡为x只,母鸡为y只,小鸡为z只。,2020年6月7日星期日,14,重庆理工大学计算机学院基础教研室,百元买百鸡问题分析,2020年6月7日星期日,15,重庆理工大学计算机学院基础教研室,main()intx,y,z;for(x=0;x=100;x+)for(y=0;y=100;y+)for(z=0;z=100;z+)if(x+y+z=100,结果:x=0,y=25,z=75x=4,y=18,z=78x=8,y=11,z=81x=12,y=4,z=84,【讨论此为“最笨”之法要进行101101101=1030301次(100多万次)运算。,百元买百鸡问题分析,2020年6月7日星期日,16,重庆理工大学计算机学院基础教研室,百元买百鸡问题分析,main()intx,y,z;for(x=0;x=100;x+)for(y=0;y=100;y+)z=100-x-y;if(5*x+3*y+z/3.0=100)printf(“cocks=%d,hens=%d,chickens=%dn,x,y,z);,【讨论】令z=100-x-y只进行101101=10201次运算(前者的1%),取x=19,y=33只进行2034=680次运算(第1种运算的6.7%),2020年6月7日星期日,17,重庆理工大学计算机学院基础教研室,【例二】雨水淋湿了算术书的一道题,8个数字只能看清3个,第一个数字虽然看不清,但可看出不是1。编程求其余数字是什么?(3)2=89,分析设分别用A、B、C、D、E五个变量表示自左到右五个未知的数字。其中A的取值范围为29,其余取值范围为09。条件表达式即为给定算式。,2020年6月7日星期日,18,重庆理工大学计算机学院基础教研室,main()intA,B,C,D,E;for(A=2;A=9;A+)for(B=0;B=9;B+)for(C=0;C=9;C+)for(D=0;D=9;D+)for(E=0;E=9;E+)if(A*(B*10+3+C)*A*(B*10+3+C)=8009+D*100+E*10)printf(“%2d%2d%2d%2d%2dn”,A,B,C,D,E);,结果:32864,【例二】雨水淋湿了算术书的一道题,8个数字只能看清3个,第一个数字虽然看不清,但可看出不是1。编程求其余数字是什么?(3)2=89,2020年6月7日星期日,19,重庆理工大学计算机学院基础教研室,【例三】求100200之间不能被3整除也不能被7整除的数。,分析:求某区间内符合某一要求的数,可用一个变量“穷举”。所以可用一个独立变量x,取值范围100200。,for(x=100;x=200;x+)if(x%3!=0,如果是求指定条件的奇数呢?,如果是求指定条件的偶数呢?,x=101;x=200;x=x+2,x=100;x=200;x=x+2,2020年6月7日星期日,20,重庆理工大学计算机学院基础教研室,2、归纳法(递推法)“智人之法”:通过分析归纳,找出从变量旧值出发求新值的规律。,【例一】编程求i=1+2+3+4+99+100(i=0100),分析i=0S0=0(初值)i=1S1=0+1=S0+1i=2S2=1+2=S1+2i=3S3=1+2+3=S2+3i=4S4=1+2+3+4=S3+4i=nSn=1+2+3+4+n=Sn-1+n,2020年6月7日星期日,21,重庆理工大学计算机学院基础教研室,【例一】编程求i=1+2+3+4+n(n100),程序:main()inti,n,s=0;printf(n=);scanf(%d,运行结果:n=100Sum=5050,如果是i=1+1/2+1/3+1/n呢?,2020年6月7日星期日,22,重庆理工大学计算机学院基础教研室,算法类型小结:累加型,【累加型】类型诸如+求其前n项之和的编程题。,累加型算法若设i为循环变量,s为前n项累加之和,则程序的基本结构为:s=0;for(i=1;i=n;i+)s=s+;,2020年6月7日星期日,23,重庆理工大学计算机学院基础教研室,【例二】编程求11/2+1/31/4+1/5+1/991/100,分母为奇数时,相加分母为偶数时,相减,法1:从变化规律分析,程序:main()inti;floats=0;for(i=1;i=100;i+)if(i%2)s=s+1/i;elses=s-1/i;printf(Sum=%fn,s);,运行结果:Sum=1.000000,错在哪里?,2020年6月7日星期日,24,重庆理工大学计算机学院基础教研室,【例二】编程求11/2+1/31/4+1/5+1/991/100,法2:这是个累加型算法的编程题,程序:#includemain();inti;floats=0;for(i=1;i=100;i+)s=s+pow(-1,i+1)/i;printf(Sum=%fn,s);,程序:#includemain()inti,k=1;floats=0;for(i=1;i=100;i+)s=s+k/i;k=-k;printf(Sum=%fn,s);,累加型算法程序基本结构为:s=0;for(i=1;i=n;i+)s=s+;,错在哪里?(如何检查程序错误?),运行结果:Sum=0.688172,运行结果:Sum=1.000000,2020年6月7日星期日,25,重庆理工大学计算机学院基础教研室,【例三】编程求n!(n由键盘输入),分析i=0S0=1=S0(初值)i=1S1=01=S01i=2S2=12=S12i=3S3=123=S23i=4S4=1234=S34i=nSn=1234n=Sn-1n,2020年6月7日星期日,26,重庆理工大学计算机学院基础教研室,【例三】编程求n!(n由键盘输入),程序:main()inti,n,s=1;printf(n=);scanf(%d,运行结果:n=5Sum=120,运行结果:n=8Sum=-25216,Why?,2020年6月7日星期日,27,重庆理工大学计算机学院基础教研室,算法类型小结:阶乘型,【阶乘型】类型诸如求其前n项之积的编程题。,阶乘型算法若设i为循环变量,s为前n项相乘之积,则程序的基本结构为:s=1;for(i=1;i=n;i+)s=s*;,2020年6月7日星期日,28,重庆理工大学计算机学院基础教研室,【例四】编程求i!=1!+2!+3!+n!(n由键盘输入),外循环为累加型内循环为阶乘型,法1:从变化规律分析,程序:main()inti,j,n;floats,s1;printf(请输入n=);scanf(%d,运行结果:n=5Sum=153,/*如果n值较大,可改为printf(“Sum=%en”,s);*/,2020年6月7日星期日,29,重庆理工大学计算机学院基础教研室,【例四】编程求n!=1!+2!+3!+n!(n由键盘输入),在同一个循环中先阶乘,后累加,法2:通过单循环实现,程序:main()inti,n;floats,s1;printf(请输入n=);scanf(%d,运行结果:n=5Sum=153,2020年6月7日星期日,30,重庆理工大学计算机学院基础教研室,【例五】兔子繁殖问题(斐波那契数列问题)著名意大利数学家斐波那契(Fibonacci)1202年提出一个有趣的问题。某人想知道一年内一对兔子可以生几对兔子。他筑了一道围墙,把一对大兔关在其中。已知每对大兔每个月可以生一对小兔,而每对小兔出生后第三个月即可成为“大兔”再生小兔。问一对小兔一年能繁殖几对小兔?,分析:表示大兔,表示小兔,由分析可以推出,每月新增兔子数Fn=1,1,2,3,5,8,13,21,34,(斐波那契数列)月份n兔子数Fn1F1=12F2=13F3=2=F1+F24F4=3=F2+F35F5=5=F3+F4nFn=Fn-1+Fn-2,2020年6月7日星期日,31,重庆理工大学计算机学院基础教研室,【例五】例5.12兔子繁殖问题(斐波那契数列问题),main()intf1=1,f2=1,f,i,s,n;clrscr();printf(请输入月数:);scanf(%d,2020年6月7日星期日,32,重庆理工大学计算机学院基础教研室,【例六】编程显示以下图形(共N行,N由键盘输入)。*,此类题目分析的要点是:通过分析,找出每行空格、*与行号i、列号j及总行数N的关系。其循环结构可用右图表示。,分析:(设N=5)第1行4个空格=5-1

温馨提示

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

评论

0/150

提交评论