chap循环结构程序设计PPT课件_第1页
chap循环结构程序设计PPT课件_第2页
chap循环结构程序设计PPT课件_第3页
chap循环结构程序设计PPT课件_第4页
chap循环结构程序设计PPT课件_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、循环结构程序设计循环结构程序设计宁波大学信息科学与工程学院 计算机系第1页/共40页循环结构程序设计程序中的重复while语句do-while语句for语句退出循环循环的嵌套实例研究第2页/共40页程序中的重复第3页/共40页程序中的重复计数循环:可在循环执行前确定重复的次数。如明确告知需要处理n个数据等。 标记控制循环:用一个正常情况下不会出现在数据中的值来作为循环结束的标记。如输入学生成绩时以负数作为结束标记。 条件循环:重复操作直到期望的条件满足。如累加的和达到某一数值,或者计算的精度达到某一数值。 文件结束控制循环:用EOF来判断输入是否结束。 第4页/共40页while语句1.计数循

2、环 【例4-1】学生成绩求和。编写程序,从键盘输入10位同学的成绩, 计算他们的总分。 int sum=0; int i=0; int x; printf(Input 10 score:n); while(i10) /*判断循环条件*/ scanf(%d,&x); /*读入一个成绩*/ sum+=x; i+; 第5页/共40页while语句【例4-2】累加运算。计算1+2+3+100int sum,i;sum=0; /*设置累加值的初始值*/i=1; /*设置循环控制变量的初始值*/while(i=100)sum=sum+i; /*累加*/i+;第6页/共40页while语句【例4-3

3、】累乘运算。 本题计算1*2*3*4*5.int power,i;power=1; /*设置乘积的初始值*/i=1; /*设置循环控制变量的初始值*/while(i=0) /*若没有遇到标记值(负数)*/ /*则执行循环体*/sum=sum+score; n+;scanf(%f,&score); /*读取下一个数据*/ 第8页/共40页while语句【例4-5】从键盘输入若干字符,统计其中字母、数字以及其他字符的个数。用换行符结束输入 char ch; int letter=0,digit=0,other=0; ch=getchar(); /*读取一个字符*/ while(ch!=n)

4、 /*若没有遇到标记值(换行符n)*/ /*则执行循环*/ if(ch=a&ch=A&ch=0&ch=1e-6) /*判断条件*/pi=pi+t; /*将当前分数项累加到pi上*/n=n+2; /*下一项的分母以步长2自增*/sign=-sign; /*符号求反* t=sign/n; /*构建下一个分数项*/pi=4*pi; 第10页/共40页while语句【例4-8】设计一个程序,输入任意长度的正整数,然后逆序输出。如输入3765,则输出5673。int num,i;scanf(%d,&num);while(num!=0)i=num%10; /*取当前数据的末

5、位数*/printf(%d,i); /*输出当前的末位数*/num=num/10; /*对原数除以10取整,相当于截断末位数*/第11页/共40页while语句【例4-6】scanf函数的返回值。int num1,num2,num3; int a,b;a=scanf(%d,&num1); /*/b=scanf(%d%d,&num2,&num3); /*/printf(Num1=%d,Num2=%d,Num3=%dn,num1,num2,num3);printf(a=%d,b=%dn,a,b);第12页/共40页while语句 4.文件结束控制循环【例4-9】输入一些整数

6、,求出它们的平均值。 int x,sum=0;int n=0; /*统计实际输入的数据个数*/while(scanf(%d,&x)!=EOF) /*文件结束控制循环*/ sum=sum+x; /*累加*/ n+; printf(Average=%fn,(double)sum/n);第13页/共40页while语句【例4-10】输入两个整数,比较它们的大小关系 int a,b;while(scanf(%d%d,&a,&b)!=EOF) if(ab) printf(%d%dn,a,b); else if(ab) printf(%d%dn,a,b); else printf(

7、%d=%dn,a,b);第14页/共40页do-while语句 【例4-11】用do-while语句求 1+2+100.int sum,i;sum=0; i=1; dosum=sum+i; i+;while(i0); 第17页/共40页for语句 【例4-14】用for语句求 1+2+100.int i,sum=0;for(i=1;i=100;i+)sum+=i; 第18页/共40页for语句【例4-15】使用for语句求解数列1+3+5+97+99的和。int sum,i;sum=0;for(i=1;i100;i+=2)sum=sum+i;第19页/共40页for语句 【例4-16】求Fib

8、onacci数列的前20项。这个数列有如下特点:第1、2个数都为1,从第3个数开始,每个数都是其前面两个数的和。int f,f1=1,f2=1;printf(%6d%6d,f1,f2);for(i=3;i=20;i+)f=f1+f2; /*递推公式,推出一个新值*/printf(%6d,f);if(i%5=0) printf(n); /*控制每行输出5个数*/f1=f2; f2=f; /*更新f1和f2,为下一次递推作准备*/第20页/共40页for(表达式1;表达式2;表达式3)语句(l)表达式1、表达式2、表达式3可以是任何类型的表达式,它们之间用分号间隔。(2)表达式1只被执行一次,通常

9、用来给循环变量赋初值,也允许在for语句外给循环变量赋初值,此时可以省略该表达式,但分号不能省略。(3)表达式3通常用来修改循环控制变量的值,表明循环控制变量每次变化的数值。关于for语句的用法以下几点值得注意:第21页/共40页for语句与while语句比较循环包括:初值、循环条件、循环体和步长for(表达式1;表达式2;表达式3)语句 等价为表达式1;while(表达式2) 语句 表达式3;如果循环次数不确定,循环的控制需要结合其它条件并且条件较为明确的情况下,可以使用while语句;如果指定了循环次数,则用for语句会使程序显得简洁、清晰。 第22页/共40页break continue

10、 和goto语句 C语言提供了break while语句中break执行流程图do-while语句中break执行流程图for语句中break执行流程图第23页/共40页break语句举例#includevoid main() int a,n,i=1,sum=0; printf(请输入累加求和数的个数,遇到负数将退出!n); scanf(%d,&n); /*先输入一个数*/ printf(请输入%d个整数:,n); while(i=n) /*一共要输入10个数,所以再循环9次*/ scanf(%d,&a); /*重新输入一个数*/ if(a0)break; /*遇到负数退出wh

11、ile循环*/ sum=sum+a; /*否则将输入的正数累加*/ i+; printf(此次输入的正数之和是%dn,sum);第24页/共40页 【例4-18】为迎接一年一度的校运会,需要排练一个团体操,列队时发现每行3个人的话还多出1位同学,每行5个人的话多出2人,每行7个人的话多出5人,每行9个人的话多出7人,请问至少有多少同学来参加排练。for(n=1;n+) if(n%3=1&n%5=3&n%7=5&n%9=7)break; break语句举例第25页/共40页 【例4-19】判断整数m是否为素数。for(i=2;im;i+) if(m%i=0) break;

12、 /*只要找到一个因子,循环就可提前终止*/break语句举例第26页/共40页C语言continuewhile语句 do-while语句for语句注意:与break语句完全终止循环不同,continue语句是终止本次循环 第27页/共40页continue语句举例 输入一个整数n,编写程序在屏幕上以每行10个数输出100200之间能被n整除的数。第28页/共40页#includevoid main() int i,n,count=0; printf(请输入100到200之间的整数n:); scanf(%d,&n); for(i=100;i=200;i+) if(i%n!=0) con

13、tinue; printf(%d ,i); count+; if(count%10=0) printf(n); printf(n); printf(能被%d整除的个数是:%dn,n,count); #includevoid main() int i,n,count=0; printf(请输入请输入100到到200之间之间的整数的整数n:); scanf(%d,&n); for(i=100;i=200;i+) if(i%n=0) printf(%d ,i); count+; if(count%10=0) printf(n); printf(n); printf(能被能被%d整除的个数整除

14、的个数是是:%dn,n,count); 第29页/共40页【例4-20】把100300之间不能被3整除的数输出。int n,count=0;for(n=100;n=300;n+) if(n%3=0) /*若能被3整除,则跳过本次循环*/continue; printf(%d ,n); continue语句举例第30页/共40页C语言goto控制语句 goto语句也称为无条件转移语句 一般格式:goto 语句标号; 例:用goto语句求100个自然数之和#includevoid main( ) int i=1; int sum=0; loop: sum=sum+i; i+; if(i=100)g

15、oto loop; printf(sum=%dn,sum); 第31页/共40页循环的嵌套【例4-22】有两个红球,三个黄球,四个白球,任意取四个球,其中必须有一个红球,编程输出所有可能的方案。 for(i=1;i=2;i+)for( j=0;j=0) printf(%5d%7d%8dn,i,j,k);第32页/共40页循环的嵌套【例4-23】利用双层for循环打印乘法表。int i,j;for(i=1;i=9;i+) /*i控制输出有多少行*/ for(j=1;j=i;j+) /*j控制输出每行中有多 少个等式*/printf(%d*%d=%d ,i,j,i*j); printf(n);第3

16、3页/共40页实例研究 【例4-25】投骰子游戏。模拟投骰子的过程,以6点为目标,投中目标3次为获胜,最多允许投10次。int count=0,hit=0; /*count记录投的次数,hit记录投中的次数*/int dice; /*dice记录点数*/srand(unsigned)time(NULL);while(count10&hit3) dice=1+rand()%6; /*生成16的随机数来模拟投出的点数*/count+;if(dice=6)hit+;第34页/共40页实例研究【例4-26】输入正整数n,求1!+2!+3!+n!。int i,j,n;double f,sum=0

17、; for(i=1;i=n;i+) f=1; for( j=1;j=i;j+) /*求i!,结果存储在f中*/ f=f*j; sum+=f; /*将i!加入到累加器*/ printf(Sum=%en,sum); /*以指数形式输出*/是否有更简单的方法?第35页/共40页补充编程:编写程序解决下列问题:用1分,2分,5分硬币组合成1元钱,请问分别需要几个1分,几个2分,几个5分?(每币种必须至少1个)列出所有的组合.用x,y,z分别代表1分,2分,5分,列出方程:x+2y+5z=100,x的取值范围是1100,y取值范围是150, z取值范围是120#include void main( )

18、int i,j,k; for(i=1;i=100;i+) for(j=1;j=50;j+) for(k=1;k=20;k+)if(i+2*j+5*k=100) printf(“%3d %3d %3dn”,i,j,k); 如果可以没有某种硬币,如何修改程序?第36页/共40页另外一种解法#include void main( ) int j,k; for(j=1;j=50;j+) for(k=1;k=20;k+)if(2*j+5*k100) printf(“%3d %3d %3dn”100-2*j-5*k,j,k);第37页/共40页“百钱百鸡”问题一只公鸡,值5钱;一只母鸡,值3钱;一只小鸡,值1/3钱。用百钱买百鸡,问可买公鸡,母鸡,小鸡各多少只?#includevoid main() int cock,hen,chick; for(cock=0;cock=20;cock+) for(hen=0; hen=33;hen+) chick=100-hen-cock ; if (cock*5+hen*3+chick/3=100 &chick%3=0) printf

温馨提示

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

评论

0/150

提交评论