《C语言循环结构》PPT课件.ppt_第1页
《C语言循环结构》PPT课件.ppt_第2页
《C语言循环结构》PPT课件.ppt_第3页
《C语言循环结构》PPT课件.ppt_第4页
《C语言循环结构》PPT课件.ppt_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

循环程序设计(2),1.break语句,break语句和continue,(1) 语句形式: break;,(2)作用: 结束break所在的 switch语句。 结束当前循环,跳出break所在的循 环结构。,【例7:】 求300以内能被17整除的最大的数。,【例8】 求300以内能被17整除的所有整数。,#include “stdio.h“ void main() int x; for(x=1;x=300;x+) if(x%17!=0) continue; printf(“%dt“,x); ,while(x=300) if(x%17!=0)x+; continue; printf(“%dt“,x); x+; ,(1)语句形式: continue;,(2)语句作用: 结束本次循环。,2、continue 语句,(3)语句执行流程: continue语句可以结束本次循环,即不再执行循环体中continue 语句之后的语句,转入下一次循环条件的判断与执行。,#include “stdio.h“ void main() int a, b; for(a=1,b=1; a=10) break; if(b%3=1) b+=3; continue; printf(“%dn“,a); ,【练习:】 分析以下程序的运行结果。,程序运行结果: 4,循环程序设计(循环嵌套),例7:打印如下所示等腰三角形() * * * * *,循环程序设计(循环嵌套),* * * * *,例8 : 如何打印: *,NEXT,在循环体语句中又包含有另一个完整的循环结构的形式,称为循环的嵌套。如果内部的循环体中又有嵌套的循环语句,则构成多重循环。,while 、do-while、for三种循环都可以互相嵌套。,循环嵌套,循环语句之间的关系,菱形图案程序如下:,#include “stdio.h“ void main() int i,j,k; for(j=1;j=0;j-) /下三角 for(k=1;k=4-j;k+) printf(“ “); for(i=1;i=2*j+1;i+) printf(“*“); printf(“n“); ,循环嵌套,枚举或穷举算法:按问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能解是否是问题的真正解,若是,我们采纳这个解,否则抛弃它。对于所列举的值,既不能遗漏也不能重复。,循环嵌套,例9 :百钱买百鸡。(鸡翁一值钱五,鸡母一值钱3,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?,Cocks hens chicks,1,1,98,2,97,33,66,2,1,2,33,97,96,65,20,1,2,33,#include “stdio.h“ void main() int x,y,z; for(x=1;x=20;x+) for(y=1;y=33;y+) z=100-x-y; if (5*x+3*y+z/3 =100) ,循环嵌套,例 、搬砖问题:36块砖,36人搬,男搬4,女搬3,两个小孩抬一块砖。要求一次全搬完,问男、女、小孩各若干?,解:据题意: men的值:19 women的值:112 children的值:36-men-women,循环程序设计,使用枚举法,主要掌握两条原则: 1、确定搜索范围。 2、选择搜索策略。 搜索策略选择得好坏,直接决定程序的工作量的大小。,循环程序设计,请思考下面程序的功能,并思考怎样改变搜索策略或搜索范围,可以提高程序的效率。 main() int m,n,I; m=7;n=5;i=1; do if(i%m=0) if(i%n=0) printf(“%dn”,i); break; i+; while (i!=0); ,例10:求最小公倍数 # include void main() int x,y,z,t; printf(“Please input x,y:“); scanf(“%d%d“, ,for(z=x;z%y!=0;z+=x);,枚举法求2个整数的最大公约数,# include void main() int x,y,z,t; printf(“Please input x,y:“); scanf(“%d%d“, ,例11 判断m是否素数。 算法: 素数:除了1和自身外不能被其他数整除。 判断方法:测试m能否被2到根号m整除。 为什么不是2到m-1,而是根号m? 一个数m,如果它有约数的话,约数肯定要成对出现,必然有一个大于根号m,另一个小于根号m(显然如果都大于根号m,那相乘结果会大于m)。 根号m的计算方法:利用求平方根的函数sqrt,循环程序设计,循环变量:定义为i(整型) 循环变量的范围: 2k ,k=sqrt(m) (k为整型) 即:i的初值为2,循环执行条件为i=k 循环变量的变化:i+ 重复执行的操作: 如果m能被i整除,则说明m不是素数,也就不需要进行后面的判断,应退出循环结构(用break语句);否则,继续判断。 结果的输出: 如果循环是中途退出的,则i=k,输出m不是素数;否则,m是一个素数。,例11 程序 #include #include main( ) int i,m,k; scanf(“%d“, ,#include #include main( ) int i,m,k,flag; flag=1; scanf(“%d“, ,输出100以内的所有素数(5个一行输出),#include #include main( ) int i,k,j,n; n=0; for (j=2;jk) /是素数 printf(“%5d“,j); n+; if(n%5=0) printf(“n“); ,循环程序设计,算法2:迭代。 不断用新值取代变量的旧值或由旧值递推出变量的新值的过程。,分析:设现有人口数为M,则第一年后人口变为:M=M*(1+0.02),第二年后,把上述赋值表达式再执行一次,要计算10年后的人口,就是把上述表达式执行10次。可以用循环来实现。,例如:人口增长问题: 现有12亿人,按年2%的增长速度,10年后将有多少人?,循环程序设计,迭代与下列因素有关:,初值;,迭代公式;,迭代次数,例12 : 兔子繁殖问题: 设有一对新生兔子,从第三个月开始每个月都生一对兔子,按此规律,并假设没有兔子死亡,一年后共有多少兔子?(请同学们写出每月兔子对数,找出规律),每月兔子呈如下规律:1,1,2,3,5,8,13,21,34,找出迭代规律:,f1=f2=1; f3=f1+f2;f4=f2+f3; fn+1=fn+fn-1,程序代码如下: #include “stdio.h“ void main() int i,f1,f2,f3; f1=f2=1; for(i=3;i13;i+) f3=f1+f2; printf(“%6d“,f3); f1=f2; /用新值取代旧值 f2=f3; /用新值取代旧值 ,循环程序设计,例13 求2个非负整数的最大公约数。,u=55 v=15,r=u%v=10,r=u%v=5,r=u%v=0,求2个非负整数的最大公约数程序代码。,#include “stdio.h“ void main() int u, v, r; scanf(“%d%d“, ,例14猴子吃桃子问题(迭代法,递推法) (教材P141-12),#include void main() int x,y,i; /i表示天数, y表示某天, x表示其前一天 y=1; /第10天的桃子数 for(i=9;i0;i-) x=2*(y+1); /计算前一天的桃子数 y=x; printf(“%d“,x); ,x=2*(x+1),例15: 输出所有水仙花数。所谓水仙花数是指一个3位数,其各位数字的立方和等于该数本身。例:15313+53+33 (枚举法),编程思路: (1) 循环变量的初值:m=100 循环条件:m=999 循环变量的增量:m+ (2) 循环体:判断m是否是水仙花数,是,则输出该数。,程序代码如下: #include void main() int m,bai,shi,ge;/ bai、shi、ge分别对应百位、十位和个位 for(m=100;m=999;m+) bai=m/100; shi= m/10 %10; ge=m%10; if(m=bai*bai*bai+shi*shi*shi+ge*ge*ge) printf(“%d “,m); ,程序运行结果如下: 153 370 371 407,例16:已知abc+cba=1333;其中a、b、c均为一位数,编程求出满足条件的a,b,c的所有组合。 【解析】可以用三重循环穷举所有的解。 程序代码如下: #include void main() int a,b,c; for(a=0;a=9;a+) for(b=0;b=9;b+) for(c=0;c=9;c+) /把 abc cba 连接起来变成整数判断 if(a*100+b*10+c)+(c*100+b*10+a)=1333) printf(“a=%d,b=%d,c=%dn“,a,b,c); ,例17. 完数,即完美数,一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=123(6的因子是1,2,3),6即完数。试求1000内所有完数并输出。,程序代码如下: #include void main() int n=1000, j,i,/i表示要判断的数,j表示i的因子 int s; for(i=1;in; i+) s = 0; /对某个数进行测试前先将和置0 for(j=1;ji;j+) /j表示因子 if(i%j = 0) s = s + j; if(s= i) printf(“%d是完数n“, i); ,累加和问题 例17计算:s=1+12+123+1234+12345 分析:累加和问题关键是写出通项的表达式 用i表示累加的项数,i=5 t表示通项,其规律为后项是前项乘10加i,即t=t*10+i; t,s的初始值都设为0 void main() int t=0,s=0,i; for( i=1; i=5; i+) t=t*10+i; s=s+t; printf(“s=%dn“,s); ,例18输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。,程序代码如下: #include void main() char c; int letters=0,space=0,digit=0,others=0; printf(“please input some charactersn“); while(c=getchar()!=n) if(c=a,1.下面有关for循环的正确描述是( ) A)for循环只能用于循环次数已经确定的情况 B)for循环是先执行循环体语句,后判断表达式 C)在for循环中,不能用break语句跳出循环体 D) for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 答案D 2.对for(表达式1; ; 表达式3)可理解为( ) A) for(表达式1; 0 ; 表达式3) ; B)for(表达式1; 1 ; 表达式3); C)for(表达式1;表达式1;表达式3);D) for(表达式1;表达式3 ;表达式3); 答案B 3. 下面程序的运行结果是 #include main() int y=10; doy-;while(-y); printf(“%dn“,y-); -1 B) 1 C) 8 D) 0,答案D,4. 下面程序段的运行结果是 for(y=1;y10;) y=(x=3*y,x+1),x-1); printf(“x=%d,y=%d“,x,y); A) x=27,y=27 B) x=12,y=13 C) x=15,y=14 D) x=y=27 答案C 5. 语句while(!E);中的表达式!E等价于_ A) E=0 B) E!=1 C) E!=0 D) E=1 答案A,6. 下面程序的运行结果是 #include main() int a=1,b=10; do b-=a;a+;while(b-0); printf(“a=%d,b=%dn“,a,b); a=3,b=11 B) a=2,b=8 C) a=1,b=-1 D) a=4,b=9 答案B 7. 以下程序段_ x=-1; do x=x*x; while(!x); A) 是死循环 B) 循环执行二次 C) 循环执行一次 D) 有语法错误 答案C,8. 有以下程序 #include main() int i, j=4; for (i=j;i=2*j; i+) switch (i/j) case 0: case 1: printf(“*“); break; case 2: printf(“#“); 程序的运行结果是(*#) 9. 以下程序的输出结果是( ) main( ) int i; for(i=1;i6;i+) if(i%2)printf(“#“);continue; printf(“*“); printf(“n“); A) #*#*# B) # C) * D) *#*#* 【答案】A,10. 请读程序 #include main() int num=0; while(num=2) num+; printf(“%dn“,num); 上面程序的输出结果是 A) 1 B) 1 C) 1 D) 1 2 2 2 3 3 4 【答案】 B 11. 执行for(m=1;m+5;);后,变量m的值为() A)5 B)6 C)7 D)8 【答案】 B,12. 以下程序的输出结果是( )。 main() int s,i; for(s=0,i=1;i main() int n=2,k=0; while(k+ A) 0 2 B) 1 3 C) 5 7 D) 1 2 【答案】D,14. 下面程序的输出是( ) main() int y=9; for( ; y0; y-) if(y%3=0) prin

温馨提示

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

评论

0/150

提交评论