第六章循环结构优秀PPT.ppt

上传人:石*** 文档编号:82699572 上传时间:2023-03-26 格式:PPT 页数:48 大小:2.52MB
返回 下载 相关 举报
第六章循环结构优秀PPT.ppt_第1页
第1页 / 共48页
第六章循环结构优秀PPT.ppt_第2页
第2页 / 共48页
点击查看更多>>
资源描述

《第六章循环结构优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第六章循环结构优秀PPT.ppt(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第六章循环结构第一页,本课件共有48页6.1概述概述在实际问题中在实际问题中,我们常常遇到需要重复处理的工作我们常常遇到需要重复处理的工作例如例如:求求1100的和的和,或求一个班英语成绩的平均或求一个班英语成绩的平均分分一般来说循环控制方法分两种一般来说循环控制方法分两种:(1)条件循环条件循环(while循环循环和和dowhile循环循环)条件满足时执行循环条件满足时执行循环,条件不满足时结束循环条件不满足时结束循环(2)计数循环计数循环(for循环循环)先确定循环次数先确定循环次数,然后执行循环然后执行循环,完成循环次数完成循环次数后结束后结束第二页,本课件共有48页6.3while语句

2、语句2.执行过程执行过程:(先判断后执行)(先判断后执行)先计算表达式的值先计算表达式的值,值为真值为真(非零非零)时执行循环体时执行循环体,值为假时结束循环值为假时结束循环1.格式格式:while(表达式表达式)2.循环体语句循环体语句3.注意注意:(1)表达式必须用表达式必须用()括起来括起来(2)循环体语句为多条语句时循环体语句为多条语句时,必须用必须用把它们括起来把它们括起来(3)循环体语句中必须有使循环趋向结束的语句循环体语句中必须有使循环趋向结束的语句A当当P成立成立AP成立成立不成立不成立第三页,本课件共有48页例:在屏幕上打印例:在屏幕上打印7行星花行星花(此问题是简单重复(此

3、问题是简单重复7次格式输出操作)次格式输出操作)main(int i;i=1;whlie(i=7)printf(“n*”);i+;运行结果为:运行结果为:*第四页,本课件共有48页例例:求求1100的和的和1+2+3+99+100=i(1=i=100)#includevoidmain()inti,sum;sum=0;i=1;while(i=100)sum=sum+i;i+;printf(“sum=%dn”,sum);分析分析:需要几个变量需要几个变量?输入输入,输出分别是什么输出分别是什么?程序大体可分为几个步骤程序大体可分为几个步骤?sum=0i=1i=100?sum=sum+ii=i+1输

4、出输出sum的值的值第五页,本课件共有48页例例:求求1n的和的和,n为任意正整数为任意正整数i(1=i=n)sum=0i=1i=n?sum=sum+ii=i+1输出输出sum的值的值输入输入n#includevoidmain()inti,sum,n;sum=0;i=1;scanf(“%d”,&n);while(i=n)sum=sum+i;i+;printf(“sum=%dn”,sum);第六页,本课件共有48页例:计算例:计算x=1+3+5+7+9+n#includemain()ints;intn,i,x;scanf(“%d”,&n);i=1;x=0;while(i=n)x=x+i;i=i+

5、2;printf(“x=%dn”,x);分析分析:题目是累加求和,只不过其累加题目是累加求和,只不过其累加项为等差递增的奇数序列。项为等差递增的奇数序列。第七页,本课件共有48页例例:求某个班英语成绩的平均分求某个班英语成绩的平均分,该班学生人数和每个该班学生人数和每个学生的成绩由键盘输入学生的成绩由键盘输入sum=0i=1i=n?sum=sum+si=i+1输出输出ave的值的值输入输入n(n表示学生人数表示学生人数)输入输入s(s表示成绩表示成绩)ave=sum/n#includevoidmain()inti,n;floats,sum,ave;sum=0;i=1;scanf(“%d”,&n

6、);while(i=n)scanf(“%f”,&s);sum=sum+s;i+;ave=sum/n;printf(“ave=%6.2fn”,ave);思路:先求所有学生的总成思路:先求所有学生的总成绩,再除以学生个数绩,再除以学生个数n,得学,得学生的平均成绩。生的平均成绩。第八页,本课件共有48页例:计算例:计算x=1+1/3+1/5+1/7+1/9当相加项的绝对值小于当相加项的绝对值小于0.000001(即即106)时停止计算时停止计算#includemain()ints;floatn,t,x;n=1;t=1;x=0;while(t=1e-6)x=x+t;n=n+2;t=1/n;print

7、f(“x=%10.6fn”,x);分析分析:题目仍可以看成是累加求和,只题目仍可以看成是累加求和,只不过其累加项为分母等差递增的不过其累加项为分母等差递增的分数。分数。第九页,本课件共有48页例例:编程求编程求的近似值的近似值,公式公式/41-1/3+1/5-1/7+1/9-分析分析:题目仍可以看成是累加求和题目仍可以看成是累加求和不同的是不同的是,相加的每一项正负相间相加的每一项正负相间,公式是无穷的公式是无穷的,所以我们规定当所以我们规定当相加项的绝对值小于相加项的绝对值小于0.000001(即即106)时停止计算时停止计算#include#includevoidmain()ints;fl

8、oatn,t,pi;s=1;n=1;t=1;pi=0;while(fabs(t)=1e-6)pi=pi+t;n=n+2;s=-s;t=s/n;pi=4*pi;printf(“pi=%10.6fn”,pi);tpins11-13-1/31010.671/551第十页,本课件共有48页6.4do-while语句语句不成立不成立AP成立成立当当P成立成立A1.格式格式:do循环体语句循环体语句while(表达式表达式);2.执行过程执行过程:(先执行后判断)先执行后判断)先执行循环体先执行循环体,然后计算表达式然后计算表达式的值的值,若值为真则重复执行循环体若值为真则重复执行循环体,若值为假则结束循

9、环若值为假则结束循环3.注意注意:(1)表达式必须用表达式必须用()括起来括起来(2)循环体语句为多条语句时循环体语句为多条语句时,必须用必须用把它们括起来把它们括起来(3)循环体语句中必须有使循环趋向结束的语句循环体语句中必须有使循环趋向结束的语句第十一页,本课件共有48页例例:求求1100的和的和#includevoidmain()inti,sum;sum=0;i=1;dosum=sum+i;i+;while(i=100);printf(“sum=%dn”,sum);sum=0i=1i=100?sum=sum+ii=i+1输出输出sum的值的值第十二页,本课件共有48页4.while循环和

10、循环和do-while循环的比较循环的比较 while do-whilewhile do-while(1)(1)先判断条件再执行循环体先判断条件再执行循环体 先执行循环体再判断条件先执行循环体再判断条件(2)(2)循环体可能一次也不执行循环体可能一次也不执行 至少执行一次循环体至少执行一次循环体#includevoidmian()intsum=0,i;scanf(“%d”,&i);while(i=10)sum=sum+i;i+;printf(”%dn”,sum);#includevoidmian()intsum=0,i;scanf(“%d”,&i);dosum=sum+i;i+;while(i

11、=10);printf(”%dn”,sum);若输入的若输入的i小于等于小于等于10,则两种循环的次数和结果一样。若输,则两种循环的次数和结果一样。若输入的入的i大于大于10,则第一种情况一次循环也不执行,但是第二种情,则第一种情况一次循环也不执行,但是第二种情况会执行一次循环。况会执行一次循环。第十三页,本课件共有48页6.5for语句语句1.格式格式:for(表达式表达式1;表达式表达式2;表达式表达式3)循环体语句循环体语句2.执行过程执行过程:(1)计算表达式计算表达式1(2)计算表达式计算表达式2,若值为真则执行循环体若值为真则执行循环体,再执行第再执行第(3)步步;若值为假则结束循

12、环若值为假则结束循环(3)计算表达式计算表达式3,再重复执行第再重复执行第(2)步步sum=0;i=1;while(i=100)sum=sum+i;i+;sum=0;for(i=1;i=100;i+)sum=sum+i;例例:将将1100求和的求和的while循环转换为用循环转换为用for循环实现循环实现第十四页,本课件共有48页3.说明说明(1)可以省略表达式可以省略表达式1sum=0;for(i=1;i=100;i+)sum=sum+i;i=1;(2)可以省略表达式可以省略表达式3sum=0;for(i=1;i=100;i+)sum=sum+i;i+;(3)同时省略表达式同时省略表达式1和

13、表达式和表达式3sum=0;i=1;for(;i=100;)sum=sum+i;i+;第十五页,本课件共有48页(4)表达式表达式1,表达式表达式3还可以是逗号表达式还可以是逗号表达式for(sum=0,i=1;i=100;sum=sum+i,i+);(5)表达式表达式1,表达式表达式3可以是与循环控制无关的其他表达式可以是与循环控制无关的其他表达式i=1;for(sum=0;i=100;sum=sum+i)i+;空语句空语句(6)表达式表达式2一般不会省略一般不会省略,若省略表达式若省略表达式2循环将不能停止,产循环将不能停止,产生死循环。生死循环。sum=0;for(i=1;i+)sum=

14、sum+i;sum=0;i=1;for(;)sum=sum+i;i+;i=1;while(1)sum=sum+i;i+;第十六页,本课件共有48页例例:求某个班英语成绩的平均分求某个班英语成绩的平均分#includevoidmain()inti,n;floats,sum,ave;sum=0;i=1;scanf(“%d”,&n);while(i=n)scanf(“%d”,&s);sum=sum+s;i+;ave=sum/n;printf(“%6.2fn”,ave);#includevoidmain()inti,n;floats,sum,ave;sum=0;scanf(“%d”,&n);for(i

15、=1;i=3)迭代公式迭代公式用用C语言来描述为:语言来描述为:fib1=fib2=1;/*初始化初始化fib1,fib2的值的值*/i=3;fib=fib1+fib2;/*当当3=i=12时循环执行时循环执行*/fib1=fib2;fib2=fib;i+;第十九页,本课件共有48页例例:求求Fibonacci数列的前数列的前12个数个数Fibonacci数列数列:1,1,2,3,5,8,13#includevoidmain()inti,f1,f2,f3;f1=1;f2=1;printf(“%8d%8d”,f1,f2);for(i=3;i=12;i+)f3=f1+f2;f1=f2;f2=f3;

16、printf(“%8d”,f3);if(i%4=0)putchar(n);分析数列的规律分析数列的规律:从第从第3个数开始个数开始,每个数是每个数是其前两个数之和其前两个数之和f1f2f3112231235+第二十页,本课件共有48页6.6循环的嵌套循环的嵌套1.循环的嵌套循环的嵌套:一个循环体内包含另一个完整的循环结构一个循环体内包含另一个完整的循环结构2.按循环嵌套的层数分别称为二重循环按循环嵌套的层数分别称为二重循环,三重循环三重循环3.C语言中语言中while,dowhile,for循环可以互相嵌套循环可以互相嵌套例例:输出由输出由*组成的如图所示的矩形组成的如图所示的矩形*#incl

17、udevoidmain()printf(“*n”);printf(“*n”);printf(“*n”);printf(“*n”);第二十一页,本课件共有48页#includevoidmain()inti,j;i=1;while(i=4)j=1;while(j=3)putchar(*);j+;putchar(n);i+;#includevoidmain()inti,j;i=1;while(i=4)for(j=1;j=3;j+)putchar(*);putchar(n);i+;注意注意:内外层循环的控制变量不能重名内外层循环的控制变量不能重名,但并列循环的控制变量无此限制但并列循环的控制变量无此限

18、制第二十二页,本课件共有48页#includevoidmain()inti,j;for(i=1;i=4;i+)for(j=1;j=3;j+)putchar(*);putchar(n);例例:输出如图所示的直角三角形输出如图所示的直角三角形*特点特点:第第i行有行有i个星号个星号(左对齐)(左对齐)#includevoidmain()inti,j;for(i=1;i=4;i+)for(j=1;j=i;j+)putchar(*);putchar(n);第二十三页,本课件共有48页例例:输出如图所示的直角三角形输出如图所示的直角三角形*特点特点:第第i行有行有5-i个星号个星号(左对齐)(左对齐)#

19、includevoidmain()inti,j;for(i=1;i=4;i+)for(j=1;j=5-i;j+)putchar(*);putchar(n);第二十四页,本课件共有48页例例:输出如图所示的直角三角形输出如图所示的直角三角形*特点特点:第第i行有行有i个星号个星号(右对齐)(右对齐)#includevoidmain()inti,j;for(i=1;i=4;i+)for(j=1;j=4-i;j+)putchar();for(j=1;j=i;j+)putchar(*);putchar(n);第二十五页,本课件共有48页例例:输出如图所示的直角三角形输出如图所示的直角三角形*特点特点:

20、第第i行有行有5-i个星号个星号(右对齐)(右对齐)#includevoidmain()inti,j;for(i=1;i=4;i+)for(j=1;j=i-1;j+)putchar();for(j=1;j=5-i;j+)putchar(*);putchar(n);第二十六页,本课件共有48页例例:输出如图所示的等腰三角形输出如图所示的等腰三角形特点特点:第第i行有行有2*i-1个星号个星号#includevoidmain()inti,j,k;for(i=1;i=4;i+)for(j=1;j=i-1;j+)putchar();for(k=1;k=5-i;k+)putchar(*);putchar

21、(n);*第二十七页,本课件共有48页例例:输出如图所示的菱形输出如图所示的菱形*分析分析:将图形分为上下将图形分为上下两个部分分别输出两个部分分别输出上半部分上半部分(前前4行行)每行的星号个数是每行的星号个数是1,3,5,7,每行的空格个数是每行的空格个数是3,2,1,0下半部分(后四行)下半部分(后四行)每行的星号个数是每行的星号个数是5,3,1每行的空格个数是每行的空格个数是1,2,3#includevoidmain()inti,j,k;for(i=1;i=4;i+)for(j=1;j=4-i;j+)putchar();for(k=1;k=1;i-)for(j=1;j=4-i;j+)p

22、utchar();for(k=1;k=2*i-1;k+)putchar(*);putchar(n);第二十八页,本课件共有48页例:白钱买白鸡例:白钱买白鸡一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱。问一一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱。问一百钱买一百只鸡,其中公鸡、母鸡以及小鸡各多少只?百钱买一百只鸡,其中公鸡、母鸡以及小鸡各多少只?定义变量公鸡为定义变量公鸡为cocks,母鸡为,母鸡为hens,小鸡为,小鸡为chicks,有下面公式成立,有下面公式成立:cocks+hens+chicks=100;5*cocks+3*hens+chicks/3=100由于由于100只鸡共花

23、去只鸡共花去100钱,所以公鸡的个数不会超过钱,所以公鸡的个数不会超过19只,只,母鸡的个数不会超过母鸡的个数不会超过33只,小鸡的个数不会超过只,小鸡的个数不会超过100只。只。第二十九页,本课件共有48页main()intcocks,hens,chicks;cocks=0;while(cocks=19)hens=0;while(hens=33)chicks=100cockshens;if(5.0*cocks+3.0*hens+chicks/3=100.0)printf(“%d%d%dn”,cocks,hens,chicks);hens+;cocks+;第三十页,本课件共有48页main()

24、intcocks,hens,chicks;for(cocks=0;cocks=19;cocks+)for(hens=0;hens=33;hens+)chicks=100cockshens;if(5.0*cocks+3.0*hens+chicks/3=100.0)printf(“%d%d%dn”,cocks,hens,chicks);第三十一页,本课件共有48页例:判断一个数例:判断一个数m是否为素数。是否为素数。解题思路:解题思路:让让m被被2到到m之间的任一整数除,之间的任一整数除,如果如果m能被能被2m之中的任何一个整数整除,则之中的任何一个整数整除,则m不是不是素数,提前结束循环,此时素

25、数,提前结束循环,此时i必然小于或等于必然小于或等于m;如果如果m不能被不能被2m之间的任一整数整除,则完成最后一次之间的任一整数整除,则完成最后一次循环,此时循环,此时i=m+1。在循环之后判别在循环之后判别i的值是否大于或等于的值是否大于或等于m+1,若是,则表,若是,则表明未曾被明未曾被2m之间的任一整数整除过,因此是素数,之间的任一整数整除过,因此是素数,输出结果。输出结果。例如例如m=17,让,让i=2开始,被开始,被m除,若能整除,则除,若能整除,则m一定不一定不是素数;否则是素数;否则i加加1,再被再被m除,若能整除,则除,若能整除,则m一定不是素一定不是素数;否则再数;否则再i

26、加加1,直到直到i=17=4为止,若都不能被为止,若都不能被m整除,整除,则则m是素数,否则是素数,否则m不是素数。不是素数。第三十二页,本课件共有48页#include/*程序实现程序实现*/main()intm,i,k;printf(ninputanumber:);scanf(%d,&m);k=sqrt(m);i=2;while(i=k+1)printf(%disaprimenumber,m);elseprintf(%disnotaprimenumber,m);第三十三页,本课件共有48页例:求例:求100200之间的全部素数。之间的全部素数。在上面例题的基础上,加一个在上面例题的基础上,

27、加一个for循环即可。循环即可。#includemain()intm,i,k,n=0;for(m=100;m=200;m+)k=sqrt(m);i=2;while(i=k+1)printf(%d,m);n+;if(n%10=0)/*输出十个数换行输出十个数换行*/printf(n);第三十五页,本课件共有48页6.8break语句和语句和continue语句语句1.break语句语句:中止循环或中止循环或switch结构结构2.continue语句语句:结束本次循环结束本次循环,然后再根据是否满足然后再根据是否满足条件来决定是否执行下次循环条件来决定是否执行下次循环P1真真假假语句语句1语句语

28、句2P2真真break;假假P1真真假假语句语句1语句语句2P2真真continue;假假第三十六页,本课件共有48页for(r=1;r100&s200)break;printf(“s=%6.2fn”,s);for(r=1;r100&s200)continue;printf(“s=%6.2fn”,s);s=3.14s=12.56s=28.26s=50.24s=78.50输出输出:s=3.14s=12.56s=28.26s=50.24s=78.50s=200.96s=254.34s=314.00输出输出:例:求半径例:求半径r从从1到到10的圆的面积,但不显示面积值在的圆的面积,但不显示面积值在

29、100200之间的数。之间的数。第三十七页,本课件共有48页#include/*循环中用循环中用break语句判断语句判断m是否是素数是否是素数*/main()intm,i,k;printf(“ninputanumber:”);scanf(“%d”,&m);k=sqrt(m);for(i=2;i=k+1)printf(“%disaprimenumber”,m);elseprintf(“%disnotaprimenumber”,m);第三十八页,本课件共有48页作业:作业:P120习题习题6.46.66.86.10思考题:思考题:1、若一头小母牛,从第四个年头开始每年生一、若一头小母牛,从第四个

30、年头开始每年生一头母牛。按此规律,第头母牛。按此规律,第n年时总共有多少头母牛年时总共有多少头母牛?2、有、有100匹马,驮匹马,驮100担货,大马驮担货,大马驮3担,中马担,中马驮驮2担,两匹小马驮担,两匹小马驮1担,问有大、中、小马各多少担,问有大、中、小马各多少匹?匹?第三十九页,本课件共有48页思考题思考题1:人们发现每年牛的个数形成如下数列:人们发现每年牛的个数形成如下数列:1,1,1,2,3,4,6,9,13,19,28,42,观察一下数列可以发现这样一个规律:观察一下数列可以发现这样一个规律:从第从第4个数开始,个数开始,每一个数都是其上个数和上上上个数之和每一个数都是其上个数和

31、上上上个数之和。1+1=2;1+2=3;1+3=4;2+4=6;3+6=9;.这是因为,在没有死亡的情况下,每年牛的个数由两这是因为,在没有死亡的情况下,每年牛的个数由两部分组成:去年的牛数部分组成:去年的牛数+今年新生的牛数。今年新生的牛数。去年的牛数去年的牛数=其前一个数;其前一个数;今年新生的牛数今年新生的牛数=大前年的牛数,即上上上个数。大前年的牛数,即上上上个数。因为去年的母牛中有一部分到今年还不能生小牛,只有大前因为去年的母牛中有一部分到今年还不能生小牛,只有大前年已有的牛才能生小牛。年已有的牛才能生小牛。第四十页,本课件共有48页C语言描述为:语言描述为:n1=n2=n3=1;从

32、第四年开始重复执行下面语句:从第四年开始重复执行下面语句:n4=n3+n1;今年的牛数今年的牛数=去年的牛数去年的牛数+大前年的牛数大前年的牛数n3=n4;n2=n3;n1=n2;1,1,1,2,3,4,6,9,13,19,28,42,n1n2n3n4n1n2n3n4n1n2n3n4n1n2n3n4n1n2n3n4n1n2n3n4n1n2n3n4i=4时,时,n4=n1+n3=1+1=2;i=5时,时,n4=n1+n3=1+2=3;i=6时,时,n4=n1+n3=1+3=4;i=7时,时,n4=n1+n3=2+4=6;第四十一页,本课件共有48页main()intn1,n2,n3,n4,i,n

33、;/*定义变量定义变量*/n1=1;n2=1;n3=1;/*给变量赋初值给变量赋初值*/printf(“ninputn”);/*显示提示语句显示提示语句*/scanf(“%d”,&n);/*从键盘读入所求年数从键盘读入所求年数*/printf(“%8d”,n1);/*将第一、二、三年的牛的将第一、二、三年的牛的printf(“%8d”,n2);个数显示在屏幕上个数显示在屏幕上*/printf(%8d,n3);程序实现:程序实现:第四十二页,本课件共有48页for(i=4;i=n;i+)/*从第四年开始循环计算从第四年开始循环计算n4=n1+n3;每年牛的个数每年牛的个数*/printf(“%8

34、d”,n4);if(i%4=0)/*四年为一行显示四年为一行显示*/printf(“n”);n3=n4;/*将将n1,n2,n3的值改变的值改变*/n2=n3;n1=n2;第四十三页,本课件共有48页main()inti=0,j,k,s,t;doubler,p;printf(“bigmiddlesmalln”);while(i33)j=0;while(j=(50i)k=100ij;if(3*i+2*j+0.5*k=100)printf(“%8d%10d%10dn”,i,j,k);j+;i+;第四十四页,本课件共有48页6.4、求、求1!+2!+3!+4!+20!main()inti,j;lon

35、gn,sum=0;for(i=1;i=20;i+)n=1;for(j=1;j=i;j+)n=n*j;/*这个这个For循环用来求循环用来求i!*/sum=sum+n;/*sum用来存放各阶乘的累加和用来存放各阶乘的累加和*/printf(nsum=%ld,n=%ld,sum,n);printf(nsum=%ld,sum);第四十五页,本课件共有48页6.6、求、求“水仙花数水仙花数”main()inti,n1,n2,n3,n;for(i=100;i=999;i+)n=i;n1=n/100;/*n1为百位数为百位数*/n2=n/10-n1*10;/*n2为十位数,也可写为为十位数,也可写为n2=

36、(n-n1*100)/10*/n3=n-n1*100-n2*10;/*n3为个位数为个位数*/if(n1*n1*n1+n2*n2*n2+n3*n3*n3=i)printf(nthisisanumber:%d,i);第四十六页,本课件共有48页6.8、求分数序列。、求分数序列。main()inti,n=1,n1=1,n2=1,m=1,sum=0,t;for(i=1;i=20;i+)m=n;n=n1+n2;t=n/m;sum=sum+t;printf(nn=%d,m=%d,t=%d,sum=%d,n,m,t,sum);n2=n1;n1=n;printf(nsum=%d,sum);第四十七页,本课件共有48页6.10、猴子吃桃。、猴子吃桃。main()intx=1,i;for(i=1;i10;i+)x=2*(x+1);printf(nx=%d,x);printf(nthenumis:%d,x);第四十八页,本课件共有48页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 资格考试

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁