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

下载本文档

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

文档简介

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

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

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

4、er=0; ch=getchar(); /*读取一个字符*/ while(ch!=n) /*若没有遇到标记值换行符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; while语句【例4-8】设计一个程序,输入任意长度的正整数,然后逆序输出。如输入3765,则输出5673。int num,i;scanf(%d,&num

5、);while(num!=0)i=num%10; /*取当前数据的末位数*/printf(%d,i); /*输出当前的末位数*/num=num/10; /*对原数除以10取整,相当于截断末位数*/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);while语句 4.文件结束

6、控制循环【例4-9】输入一些整数,求出它们的平均值。 int x,sum=0;int n=0; /*统计实际输入的数据个数*/while(scanf(%d,&x)!=EOF) /*文件结束控制循环*/ sum=sum+x; /*累加*/ n+; printf(Average=%fn,(double)sum/n);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

7、printf(%d=%dn,a,b);do-while语句语句 【例【例4-11】用】用do-while语句求语句求 1+2+100. int sum,i; sum=0; i=1; dosum=sum+i; i+;while(i0); for语句 【例4-14】用for语句求 1+2+100. int i,sum=0; for(i=1;i=100;i+)sum+=i; for语句【例4-15】使用for语句求解数列1+3+5+97+99的和。int sum,i;sum=0;for(i=1;i100;i+=2)sum=sum+i;for语句 【例4-16】求Fibonacci数列的前20项。这个

8、数列有如下特点:第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,为下一次递推作准备*/for表达式表达式1;表达式;表达式2;表达式;表达式3语句语句(l)表达式表达式1、表达式、表达式2、表达式、表达式3可以是任何类可以是任何类型的表达式,它们之间用分号间隔。型的表达式,它们之

9、间用分号间隔。(2)表达式表达式1只被执行一次,通常用来给循环变只被执行一次,通常用来给循环变量赋初值,也允许在量赋初值,也允许在for语句外给循环变量语句外给循环变量赋初值,此时可以省略该表达式,但分号不赋初值,此时可以省略该表达式,但分号不能省略。能省略。(3)表达式表达式3通常用来修改循环控制变量的值,通常用来修改循环控制变量的值,表明循环控制变量每次变化的数值。表明循环控制变量每次变化的数值。关于关于for语句的用法以下几点值得注意:语句的用法以下几点值得注意:for语句与while语句比较循环包括:初值、循环条件、循环体和步长循环包括:初值、循环条件、循环体和步长for表达式表达式1

10、;表达式;表达式2;表达式;表达式3语句语句 等价为等价为表达式表达式1;while表达式表达式2) 语句语句 表达式表达式3;如果循环次数不确定,循如果循环次数不确定,循环的控制需要结合其它条环的控制需要结合其它条件并且条件较为明确的情件并且条件较为明确的情况下,可以使用况下,可以使用while语语句;如果指定了循环次数,句;如果指定了循环次数,则用则用for语句会使程序显语句会使程序显得简洁、明晰。得简洁、明晰。 break continue 和goto语句 C语言提供了语言提供了break while语句中语句中break执行流程图执行流程图do-while语句中语句中break执行流程

11、图执行流程图for语句中语句中break执行流程图执行流程图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; /*遇到负数退出遇到负数退

12、出while循环循环*/ sum=sum+a; /*否则将输入的正数累加否则将输入的正数累加*/ i+; printf(此次输入的正数之和是此次输入的正数之和是%dn,sum); 【例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语句举例 【例4-19】判断整数m是否为素数。 for(i=2;im;i+) if(m%i=

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

14、d,&n); for(i=100;i=200;i+) if(i%n!=0) continue; 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(c

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

16、nclude void main( ) int i=1; int sum=0; loop: sum=sum+i; i+; if(i=100)goto loop; printf(sum=%dn,sum); 循环的嵌套【例4-22】有两个红球,三个黄球,四个白球,任意取四个球,其中必须有一个红球,编程输出所有可能的方案。 for(i=1;i=2;i+)for(j=0;j=0) printf(%5d%7d%8dn,i,j,k);循环的嵌套【例4-23】利用双层for循环打印乘法表。int i,j;for(i=1;i=9;i+) /*i控制输出有多少行*/ for(j=1;j=i;j+) /*j控制输

17、出每行中有多 少个等式*/printf(%d*%d=%d ,i,j,i*j); printf(n);实例研究 【例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+;实例研究【例4-26】输入正整数n,求1!

18、+2!+3!+n!。int i,j,n;double f,sum=0; 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); /*以指数形式输出*/是否有更简单的方法?是否有更简单的方法?补充编程补充编程:编写程序解决下列问题编写程序解决下列问题:用用1分分,2分分,5分硬币组合成分硬币组合成1元元钱钱,请问分别需要几个请问分别需要几个1分分,几个几个2分分,几个几个5分分?(每币种必须至少每币种必须至少1个个)列出所有的组合列出所有的组合.用

19、用x,y,z分别代表分别代表1分分,2分分,5分分,列出方程列出方程:x+2y+5z=100,x的取值的取值范围是范围是1100,y取值范围是取值范围是150, z取值范围是取值范围是120#include void main( ) 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); 如果可以没有某种硬币,如果可以没有某种硬币,如何修改程序?如何修改程序?另外一种解法另外一种解法#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 %3dn100-2*j-5*k,j,k);“百钱百鸡问题一只公鸡,值一只公鸡,值5钱;一只母鸡,值钱;一只母鸡,值3钱;一只小鸡,值钱;一只小鸡,值1/3钱。用百钱买百鸡,问可买公鸡,母鸡,小鸡各多少只?钱。用百钱买百鸡,问可买公鸡,母鸡,小鸡各多

温馨提示

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

评论

0/150

提交评论