南昌工程学院C语言程序设计基础课件第5讲循环结构.ppt

上传人:鲁** 文档编号:568227805 上传时间:2024-07-23 格式:PPT 页数:58 大小:564.50KB
返回 下载 相关 举报
南昌工程学院C语言程序设计基础课件第5讲循环结构.ppt_第1页
第1页 / 共58页
南昌工程学院C语言程序设计基础课件第5讲循环结构.ppt_第2页
第2页 / 共58页
南昌工程学院C语言程序设计基础课件第5讲循环结构.ppt_第3页
第3页 / 共58页
南昌工程学院C语言程序设计基础课件第5讲循环结构.ppt_第4页
第4页 / 共58页
南昌工程学院C语言程序设计基础课件第5讲循环结构.ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《南昌工程学院C语言程序设计基础课件第5讲循环结构.ppt》由会员分享,可在线阅读,更多相关《南昌工程学院C语言程序设计基础课件第5讲循环结构.ppt(58页珍藏版)》请在金锄头文库上搜索。

1、循环结构循环结构 第四章第四章 循环结构循环结构 在人们所需处理的运算任务中在人们所需处理的运算任务中,常常需要用到循环结构常常需要用到循环结构,所谓所谓循环是指对同一个程序段重复执行若干次。被重复执行的部分循环是指对同一个程序段重复执行若干次。被重复执行的部分(由若干语句组成)称为由若干语句组成)称为循环体循环体。循环结构又称重复结构。循环结构又称重复结构。 本章主要内容本章主要内容 1 while 循环语句循环语句 2 dowhile 循环语句循环语句 3 for 循环语句循环语句 4 循环嵌套及注意的问题循环嵌套及注意的问题 循环结构循环结构 问题问题输出整数输出整数1-10输出整数输出

2、整数1-100输出整数输出整数1-nprintf(“%d”,1);printf(“%d”,2);printf(“%d”,n);i=1;printf(“%d”,i);i+;printf(“%d”,i); i+;printf(“%d”,i); i+;i=1;while(i=10) printf(“%d”,i); i+;循环结构循环结构 while 语句语句语法:语法:while(表达式表达式) 循环体循环体说明说明(1)(1)whilewhile是关键字。是关键字。(2)(2)循环体是多条语句循环体是多条语句, ,用用。非非0 while(表达式表达式)表达式表达式表达式表达式循环体循环体0循环结

3、构循环结构 while 语句语句非非0 while(表达式表达式)表达式表达式表达式表达式循环体循环体0i=1;while(i=10); printf(“%d”,i); i+;循环条件循环条件改变循环条件改变循环条件思考:如果没有思考:如果没有i+,程序如何执行?程序如何执行?循环结构循环结构 10 求求sum=i i=1sum=0sumsum+1sum sum+2sum sum+3 .sum sum+10sum=sum+?1找循环不变式找循环不变式2考虑问号考虑问号 3循环条件循环条件int sum=0,i=1;while(i=10) sum=sum+i; i+; 循环结构循环结构 例例1

4、main() int i=0; while(i=10) printf(“*”); i+;例例2main() int i=1,sum=0; while(i=100) sum=sum+i; i+; printf(“sum=%d”,sum);循环结构循环结构 例例3 3一个班有学生一个班有学生50人,统计该班学生语文成绩中高于人,统计该班学生语文成绩中高于80分的人数分的人数。把统计结果在屏幕上输出。把统计结果在屏幕上输出。 int m=1,n=0; float x; while(m=80) n+; /* 累加大于累加大于80 分的人数分的人数*/ m+; printf(“大于大于80分的学生人数为

5、分的学生人数为%d个个n“,n); 分析:成绩要通过键盘输入,设为分析:成绩要通过键盘输入,设为x,高于高于80分的人数为分的人数为n,总人数为总人数为m。 从键盘输入从键盘输入5 5个学生的语文、数学、英语个学生的语文、数学、英语3 3门成绩门成绩, ,输出输出每个学生的总分与平均成绩。每个学生的总分与平均成绩。循环结构循环结构 从键盘输入从键盘输入5 5个学生的语文、数学、英语个学生的语文、数学、英语3 3门成绩门成绩, ,输出输出每个学生的总分与平均成绩每个学生的总分与平均成绩。int j=1;float a,b,c,sum,aver;while(j=5) printf(“输入第输入第

6、%d 个学生三门成绩个学生三门成绩n”,j); scanf(“%f%f%f“,&a,&b,&c); sum=a+b+c; aver=sum/3; printf(“第第%d个学生总分个学生总分=%f,平均平均=%f”,j,sum,aver); j+; 循环结构循环结构 1如何确定循环条件?如何确定循环条件? 题目中有明确的提示!从键盘输入题目中有明确的提示!从键盘输入5个个学生的学生的2 如何确定循环体?如何确定循环体?重复执行的语句!重复执行的语句! 从键盘输入从键盘输入5个学生的语文、数学、英语个学生的语文、数学、英语3门成绩门成绩,输出输出每个学生的总分与平均成绩。每个学生的总分与平均成绩

7、。等价于:等价于: (1)输入)输入1个学生的语文、数学、英语个学生的语文、数学、英语3门成绩;门成绩; (2)计算总分与平均分)计算总分与平均分 (3)输出总分与平均成绩。)输出总分与平均成绩。循环结构循环结构 #include main() int n,i=1,sum=1; printf(“please input nn”) scanf(“%d”,&n) while(i=n) sum=sum*i; i+; printf(“sum=%d”,sum); 例例4 以下程序从键盘输入以下程序从键盘输入5,结果是多少?结果是多少?循环结构循环结构 do-while语句语句语法:语法:语法:语法: d

8、o do 循环体循环体循环体循环体 while(while(表达式表达式表达式表达式) );注意注意:1 1先执行循环体,再判断循环条件,先执行循环体,再判断循环条件,循环至少执行一次。循环至少执行一次。 2 2while()()后的后的分号不能省略。分号不能省略。非非0 while(表达式表达式)循环体循环体0i=1;while(i=10) printf(“%d”,i); i+; dowhile(i=10);循环结构循环结构 例例1: main() int i=1; do printf(“ * ”); i+; while(i=10);例例2:main() int i=1,s=0; do s=

9、s+i; i+=2; while(i=100); printf(“s=%d”,s);循环结构循环结构 统计某班级中计算机课程中成绩高于统计某班级中计算机课程中成绩高于95分的学生人数。分的学生人数。假定(假定(10人)人)1 1 算法分析算法分析 将该班每人计算机课程成绩输入计算机,每输入一个成绩,将该班每人计算机课程成绩输入计算机,每输入一个成绩,就与就与95进行比较,如果大于进行比较,如果大于95,计数器加,计数器加1,直到输完,直到输完10个人成绩个人成绩为止。最后显示出统计的人数。为止。最后显示出统计的人数。 2 2 数据结构数据结构 用用fs存放输入的数据,用变量存放输入的数据,用变

10、量j记录输入数据的个数,数据输记录输入数据的个数,数据输完成时完成时j=10,用变用变i统计高于统计高于95分学生的人数。当成绩输完后,输分学生的人数。当成绩输完后,输出出i 累加后的结果。累加后的结果。循环结构循环结构 int i=0,j=1; float fs; while( j95) i+; j+; printf( “95分人为分人为%d“,i);循环结构循环结构 int i=0,j=1; float fs; do printf(“输入第输入第 %d 个数个数”,j) scanf(%f,&fs); if ( fs 95) i+; j+; while( j=10); printf( “95

11、分人为分人为%d“,i);循环结构循环结构 while和和do-whilewhile(表达式表达式) 循环体循环体do 循环体循环体while(表达式表达式) ;非非0 while(表达式表达式)表达式表达式表达式表达式循环体循环体0非非0 while(表达式表达式)循环体循环体0先判断先判断后循环后循环先循环先循环后判断后判断循环结构循环结构 一般情况一般情况两者差不多两者差不多-进入循环结构执行若干次后结束循环进入循环结构执行若干次后结束循环;极端情况极端情况(1)死循环死循环(2) 无法进入循环无法进入循环i=100,while(i10)循环结构循环结构 for 循环语句循环语句(功能强

12、功能强)语法:语法: for(表达式表达式1; 表达式表达式2; 表达式表达式3) 循环体循环体 执行过程执行过程:1 先运算表达式先运算表达式12 再运算表达式再运算表达式2,真真执行循环体执行循环体 3 再运算表达式再运算表达式3,判断循环条件,判断循环条件 表达式表达式1循环体循环体表达式表达式3表达式表达式2TF若表达式若表达式2为假为假不执行循环体不执行循环体注意:注意:注意:注意:(1 1)表达式)表达式)表达式)表达式1 1在不在循环里?执行几次?在不在循环里?执行几次?在不在循环里?执行几次?在不在循环里?执行几次?(2 2)先做循环,再运算表达式)先做循环,再运算表达式)先做

13、循环,再运算表达式)先做循环,再运算表达式3 3! 若表达式若表达式若表达式若表达式2 2为假,表达式为假,表达式为假,表达式为假,表达式3 3如何运算?如何运算?如何运算?如何运算?(3 3)循环体包含那些?)循环体包含那些?)循环体包含那些?)循环体包含那些?循环结构循环结构 while和和for表达式表达式1循环体循环体表达式表达式3表达式表达式2TFfor(表达式表达式1; 表达式表达式2; 表达式表达式3) 循环体循环体 while(表达式表达式) 循环体循环体非非0 while(表达式表达式)表达式表达式表达式表达式循环体循环体0如何用如何用while写写for结构结构?while

14、( ?) ?表达式;表达式;while( 表达式表达式) 循环体;循环体;表达式表达式3;结论:结论:for语句书写结构更清晰语句书写结构更清晰循环结构循环结构 while 语句语句 while(while(表达式表达式表达式表达式) ) 循环体循环体循环体循环体 dowhile 语句语句 dodo 循环体循环体循环体循环体 while(while(表达式表达式表达式表达式););for 循环语句循环语句for(for(表达式表达式表达式表达式1;1;表达式表达式表达式表达式2;2;表达式表达式表达式表达式3) 3) 循环体循环体循环体循环体 1. .三种循环可用来处理同一问题,一般情况可互相

15、代替三种循环可用来处理同一问题,一般情况可互相代替三种循环可用来处理同一问题,一般情况可互相代替三种循环可用来处理同一问题,一般情况可互相代替 2.2.do whiledo while语句至少执行一次循环。语句至少执行一次循环。语句至少执行一次循环。语句至少执行一次循环。3.3.while while 与与与与forfor可能一次也不执行。可能一次也不执行。可能一次也不执行。可能一次也不执行。 几种循环的比较几种循环的比较循环结构循环结构 for(表达式表达式1; 表达式表达式2;表达式表达式3) 循循 环环 体体 控制循环是否结束改变循环条件改变循环条件二、说明:二、说明:二、说明:二、说明

16、: 1、表达式、表达式1可以是逗号表达式,可省略可以是逗号表达式,可省略,但其后的分号不能省;但其后的分号不能省; 2、表达式、表达式2也可省略,此时循环为无穷循环;也可省略,此时循环为无穷循环; 3、表达式、表达式3也可省略。也可省略。sum=0;for(i=1;i=10;i+) sum=sum+i;int sum=0,i=1;while(i=10) sum=sum+i; i+; sum=0;for(i=1;i=10;i+) sum=sum+i; i+;结果是什么?循环结构循环结构 例例 4.54.5 统计某班级中计算机课程中考试成绩高于统计某班级中计算机课程中考试成绩高于8080分的人数分

17、的人数(10(10人),用人),用for for 循环循环语句写该程序语句写该程序。 int fs, j,i=0; for (j=1; j80) i+; printf(“i=%dn“,i);循环结构循环结构 例例2:说明以下循环语句的循环次数。:说明以下循环语句的循环次数。(1)for (i=0; i=0; i-); 答:答:(3)(3) i=1; while (in) +i; 答:答:(4)(4) i=4; do i-; while(i0); 答:答:(5)(5) m=5;while(mj;i+,j-); 答:答:n-1次n+1次n-1次1次0次0次循环结构循环结构 求数列求数列 s=1+2

18、+3. n程序段:程序段:s=0;for(i=1;1=n;i+) s=s+i;算法算法:循环的条件循环的条件:i=n重复做的重复做的:s=s+t;t+(加法运算加法运算)循环的控制循环的控制:i+等价等价t+循环结构循环结构 求数列求数列 s=1+1/2+1/3.1/n程序段:程序段:s=0;for(i=1;i=n;i+) s=s+1.0/i;算法算法:循环的条件循环的条件:i=n重复做的重复做的:s=s+t (t是什么?是什么?)循环的控制循环的控制:i+t=1.0/is=s+1.0/i循环结构循环结构 int i,n; float s=0; printf(“please input n:“

19、); scanf(“%d”,&n); for(i=1;i=n;i+) s=s+1.0/i; printf(“s=%f”,s);循环结构循环结构 练习:求数列练习:求数列练习:求数列练习:求数列 s=1/1s=1/12 2+1/2+1/22 2+1/3+1/32 2.1/n.1/n2 2的和的和的和的和int n, i;float s;printf(“ input n:“);scanf(“%d”,&n);for(i=1;i=n;i+)s=s+1.0/(i*i);printf(“s=%f”,s);循环结构循环结构 3求数列求数列 s=1-1/2+1/3-1/4.1/n程序段:程序段:s=0;m=1

20、for(i=1;i=n;i+) s=s+1.0/i*m; m=-m; 循环结构循环结构 练习练习 求数列求数列 s=1-1/3+1/5-1/7+1/91/(2n-1)的和的和 int n,i=1,m=1; float s=0; printf(“input n:“); scanf(“%d”,&n); while(i=1e-10;i+) s=s+1.0/(i*i);printf(%fn, sqrt(s*6);循环结构循环结构 5 5 求数列 的和。程序 int i; float sum=0; for(i=0;i=1&c=9循环结构循环结构 计算并输出计算并输出n(包括包括n)以内能被以内能被5或或

21、9整除的所有整除的所有自然数的倒数之和。自然数的倒数之和。 循环结构循环结构 long int i,n,t=1; printf(“please input n:”); scanf(“%d”,&n); for(i=1;i=n;i+) t=t*i; printf(“n!=%ldn”,t);7 求求 n!循环结构循环结构 long int i,n,t=1,s=0; printf(“please input n:”); scanf(“%d”,&n); for(i=1;i=n;i+) if(i%2) t=t*i; s=s+t; printf(“s=%ldn”,s);练习练习: s=1!+3! +5!.循

22、环结构循环结构 long int i,n,x,t=1; printf(please input x and n:); scanf(%d%d,&x,&n); for(i=1;i=n;i+) t=t*x; printf(t=%ldn,t);8 求求 xn循环结构循环结构 计算并输出给定整数计算并输出给定整数n的所有因子的所有因子(不包括不包括1与与自身自身)之和。规定之和。规定n的值不大于的值不大于1000。 循环结构循环结构 break break 和和 continue continue 语句语句int n=1,s=0; while(n=10) s=s+n; break; n+; printf

23、(“%d”,s); break使流程跳出使流程跳出本层本层循环体循环体continue跳跳过过本本次次循循环环中中余余尚尚未未执执行行的的语语句句,接接着着去去执执行行下一个循环下一个循环int s=0,n=1;while(n20) n+; continue; s=s+n; printf(“%d”,s); 退出循环体退出循环体跳过循环体中未执行的语句跳过循环体中未执行的语句循环结构循环结构 break break 和和 continue continue 语句语句例例1 以下程序输出结果以下程序输出结果 int s=0,n=1; while(n=10) if(n=4) break; s=s+n

24、; n+; printf(“%d”,s); 例例2 以下程序输出结果以下程序输出结果int n=1; while(n3) continue; n+; printf(“%d”,n); 6 死循环死循环,无输出无输出!循环结构循环结构 int n=2; while(n10) if(n3) continue; if(n= =5) break; n+; printf(“%d”,n);A 10 B 9 C 5 D 死循环死循环 int a=1,b=1; while(a=9) break; if(b%3=1) b+=3; a+; printf(“%d”,a); A2 B3 C4 D5循环结构循环结构 输入

25、输入m,判断判断m是否是素数是否是素数算法:除了和算法:除了和m,不能被其他数整除不能被其他数整除m %2 %3 %4 %.%(m-1)不是素数不是素数| =0 =0 =0 =0 是素数是素数 & !=0 !=0 !=0 !=0 程序:程序:for(i=;im;i+) if(m%i=0) break;if(i=m) printf(“是素数是素数”);elseprintf(“不是素数不是素数”);循环结构循环结构 循环的嵌套循环的嵌套 循环体内再包含循环语句循环体内再包含循环语句 while(表达式表达式) 循环体循环体 内循环内循环 for或或 do while 循环体循环体 for(式1;式

26、2;式3) 外循环外循环内循环内循环注意注意 外循环条件满足时进入内循环;外循环条件满足时进入内循环; 只有当内循环循环完毕后只有当内循环循环完毕后,才会回到外循环才会回到外循环.while(表达式表达式) 循环体循环体 循环结构循环结构 程序 int i; for(i=1;i=10;i+) printf(“*”); 输出:输出:*如要输出如下图形如要输出如下图形:循环结构循环结构 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

27、 * *循环结构循环结构 计算并输出计算并输出3到到n(大于大于2)之间所有素数的平方根之和之间所有素数的平方根之和 int n,m,k i;double s=0.0;scanf(“%d”,&n); for(m=3;m=n;m+) for(i=2;i=m;i+) if(m%i=0) break; if(i=m) s+=sqrt(m); printf(“s=%f”,s);循环结构循环结构 #includemain() int t=0,n=1,s=0; while(n=7) _1_; s=s+_2_; n+; printf(“s=%dn”,s);t=t*10+3t或或t=1/3*(pow(10,n

28、)-1)计算计算3+33+333+33333333333(7个个3)的和的和,请填空。请填空。循环结构循环结构 习题习题4 计算计算:1+22+333+4444+.前前7项项(p87) int t=0,n=1,s=0; while(n=7) t=n*(pow(10,n)-1)/9); s=s+t; n+; 习题习题5 计算计算:1+12+123+1234+.前前7项项循环结构循环结构 下面程序的功能是完成用一元人民币换成一分下面程序的功能是完成用一元人民币换成一分、两分五分、两分五分的所有兑换方案,请填空的所有兑换方案,请填空。int i1,i2,i5;for(i5=0;i5=20;i5+)

29、for(i2=0;i2=0循环结构循环结构 下面程序是从三个红球、五个白球、六个黑球取出八下面程序是从三个红球、五个白球、六个黑球取出八个球,且中必须有白球,输出所有可能的方案。请填空。个球,且中必须有白球,输出所有可能的方案。请填空。 int i,j,k,sum=0; for(i=0;i=3;i+) for(1;j=0&k=6循环结构循环结构 int n,a,b,c;for(n=100;n=999;n+) a=n/100; b=n/10%10; c=n%10; if(a*a*a+b*b*b+c*c*c=n) printf(“%d”,n); 6请请找找出出这这样样一一些些三三位位数数整整数数,

30、其其本本身身恰恰好好等等于于其其各各位位数的立方和,如数的立方和,如153=13+53+33循环结构循环结构 下面程序是求下面程序是求10001000以内的完全数以内的完全数( (一个数如果恰好一个数如果恰好等于它的因子之和,则称该数为完全数等于它的因子之和,则称该数为完全数, ,如如:6=1+2+3,:6=1+2+3,再如再如:28=1+2+4+7+14:28=1+2+4+7+14)。)。int a,i,m;for(a=1;a=1000;a+) for (1;i=a/2;i+) if(a%i=0) 2; if(m=a) printf(“%dn”,a); m=0,i=1m=m+i循环结构循环结

31、构 搜索搜索(穷举求解穷举求解)中国剩余定理:中国剩余定理:“有物不知几何,三三数余一,五五数有物不知几何,三三数余一,五五数余二,七七数余三,问:物有几何?余二,七七数余三,问:物有几何?”。编程求。编程求1000以以内所有解。内所有解。 int m,count=0; for(m=1;m=1000;m+) if(m%3=1&m%5=2&m%7=3) printf(“%5d”,m); count+; if(count%5=0) printf(“n”); 循环结构循环结构 例例3:“鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁母雏各几何

32、?值钱一,百钱买百鸡,问翁母雏各几何?” (引自张引自张邱建算经,公元五世纪邱建算经,公元五世纪)分析:设分析:设x,y,z分别表示鸡翁,鸡母,鸡雏的数目,则分别表示鸡翁,鸡母,鸡雏的数目,则有有 x: 020 y: 033 z: 0300x+y+z=1005x+3y+z/3=100上述方程属于不定方程,解并不唯一,因此,上述方程属于不定方程,解并不唯一,因此,只能用搜索法对只能用搜索法对x,y,z的所有组合情况,测试满足的所有组合情况,测试满足条件的解。条件的解。循环结构循环结构 int x,y,z; printf(“ Cock Hen chickenn”); for(x=0;x=20;x+

33、) for(y=0;y=0&x+y+z=100) printf(“%8d%8d%8dn”,x,y,z); 循环结构循环结构 搜索求解练习搜索求解练习有有30个男女小孩同在一家小饭馆进餐,共花个男女小孩同在一家小饭馆进餐,共花了了50先令,其中每位男宾先令,其中每位男宾3先令,每位女宾先令,每位女宾2先令,先令,每位小孩每位小孩1先令,问男女小孩各多少?(马先令,问男女小孩各多少?(马克思数学手稿)克思数学手稿)循环结构循环结构 int i,j,k;for(i=0;i=16;i+)for(j=0;j=0&i+j+k=30) printf(%5d%5d%5d,i,j,k); 循环结构循环结构 #include main() int i,j,k; for (i=1;i=28;i+) for(j=1;j=28;j+) for(k=1;k=28;k+) if(3*i+2*j+k=50&i+k+j=30) printf(%5d%5d%5dn,i,j,k);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号