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

下载本文档

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

文档简介

循环结构程序设计,宁波大学信息科学与工程学院 计算机系,循环结构程序设计,程序中的重复 while语句 do-while语句 for语句 退出循环 循环的嵌套 实例研究,程序中的重复,程序中的重复,计数循环:可在循环执行前确定重复的次数。如明确告知需要处理n个数据等。 标记控制循环:用一个正常情况下不会出现在数据中的值来作为循环结束的标记。如输入学生成绩时以负数作为结束标记。 条件循环:重复操作直到期望的条件满足。如累加的和达到某一数值,或者计算的精度达到某一数值。 文件结束控制循环:用EOF来判断输入是否结束。,while语句,1.计数循环,【例4-1】学生成绩求和。编写程序,从键盘输入10位同学的成绩, 计算他们的总分。 int sum=0; int i=0; int x; printf(“Input 10 score:n“); while(i10) /*判断循环条件*/ scanf(“%d“, ,while语句,【例4-2】累加运算。计算1+2+3+100 int sum,i; sum=0; /*设置累加值的初始值*/ i=1; /*设置循环控制变量的初始值*/ while(i=100) sum=sum+i; /*累加*/ i+; ,while语句,【例4-3】累乘运算。 本题计算1*2*3*4*5. int power,i; power=1; /*设置乘积的初始值*/ i=1; /*设置循环控制变量的初始值*/ while(i=5) power=power*i; /*累乘*/ i+; ,while语句,2.标记控制循环 【例4-4】学生成绩求平均。编写程序,从键盘输入若干同学的成绩,计算他们的平均分。 float sum=0,ave=0; float score; float n=0; scanf(“%f“, /*读取下一个数据*/ ,while语句,【例4-5】从键盘输入若干字符,统计其中字母、数字以及其他字符的个数。用换行符结束输入 char ch; int letter=0,digit=0,other=0; ch=getchar(); /*读取一个字符*/ while(ch!=n) /*若没有遇到标记值(换行符n)*/ /*则执行循环*/ if(ch=a /*读取下一个字符*/ ,while语句,3.条件循环 【例4-7】 int sign; float n,t,pi; pi=0; t=1; n=1.0; sign=1; /*分数项的符号,初值为正*/ while(fabs(t)=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“, /*对原数除以10取整,相当于截断末位数*/ ,while语句,【例4-6】scanf函数的返回值。 int num1,num2,num3; int a,b; a=scanf(“%d“,while语句,4.文件结束控制循环 【例4-9】输入一些整数,求出它们的平均值。 int x,sum=0; int n=0; /*统计实际输入的数据个数*/ while(scanf(“%d“,while语句,【例4-10】输入两个整数,比较它们的大小关系 int a,b; while(scanf(“%d%d“, ,do-while语句,【例4-11】用do-while语句求 1+2+100. int sum,i; sum=0; i=1; do sum=sum+i; i+; while(i=100);,do-while语句,do-while语句,【例4-13】计算整数的位数。读入一个整数,判断它是几位数,如367是一个3位数。 int digit=0,num,n; scanf(“%d“,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项。这个数列有如下特点:第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可以是任何类型的表达式,它们之间用分号间隔。 (2)表达式1只被执行一次,通常用来给循环变量赋初值,也允许在for语句外给循环变量赋初值,此时可以省略该表达式,但分号不能省略。 (3)表达式3通常用来修改循环控制变量的值,表明循环控制变量每次变化的数值。,关于for语句的用法以下几点值得注意:,for语句与while语句比较,循环包括:初值、循环条件、循环体和步长 for(表达式1;表达式2;表达式3)语句 等价为 表达式1; while(表达式2) 语句 表达式3; ,如果循环次数不确定,循环的控制需要结合其它条件并且条件较为明确的情况下,可以使用while语句;如果指定了循环次数,则用for语句会使程序显得简洁、清晰。,break continue 和goto语句,C语言提供了break,while语句中break执行流程图,do-while语句中break执行流程图,for语句中break执行流程图,break语句举例,#include void main() int a,n,i=1,sum=0; printf(“请输入累加求和数的个数,遇到负数将退出!n“); scanf(“%d“, ,【例4-18】为迎接一年一度的校运会,需要排练一个团体操,列队时发现每行3个人的话还多出1位同学,每行5个人的话多出2人,每行7个人的话多出5人,每行9个人的话多出7人,请问至少有多少同学来参加排练。 for(n=1;n+) if(n%3=1,break语句举例,【例4-19】判断整数m是否为素数。 for(i=2;im;i+) if(m%i=0) break; /*只要找到一个因子,循环就可提前终止*/,break语句举例,C语言continue,while语句,do-while语句,for语句,注意:与break语句完全终止循环不同,continue语句是终止本次循环,continue语句举例,输入一个整数n,编写程序在屏幕上以每行10个数输出100200之间能被n整除的数。,#include void main() int i,n,count=0; printf(“请输入100到200之间的整数n:“); scanf(“%d“, ,#include void main() int i,n,count=0; printf(“请输入100到200之间的整数n:“); scanf(“%d“,【例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个自然数之和 #include 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=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控制输出每行中有多 少个等式*/ 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 ,实例研究,【例4-26】输入正整数n,求1!+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个)列出所有的组合. 用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 %3dn”100-2*j-5*k,j,k); ,“百钱百鸡”问题,一只公鸡,值5钱;一只母鸡,值3钱;一只小鸡,值1/3钱。用百钱买百鸡,问可买公鸡,母鸡,小鸡各多少只? #include void 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=10

温馨提示

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

最新文档

评论

0/150

提交评论