《第4章 循环结构.ppt》由会员分享,可在线阅读,更多相关《第4章 循环结构.ppt(54页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、循环:重复执行一段过程(语句)。循环:重复执行一段过程(语句)。其中重复执行的过程为其中重复执行的过程为循环体循环体。C中实现循环的三种语句中实现循环的三种语句:whiledo-whilefor循环循环:三种基本结构之一:三种基本结构之一形式:形式:while(表达式表达式)循环体循环体其中:其中:1)表达式表达式可是任意表达式可是任意表达式;2)循环体可以有任何语句)循环体可以有任何语句;3)当循环体为两条以上语句时,)当循环体为两条以上语句时,用用写成复合语句写成复合语句1.while语句语句执行流程:执行流程:while表达式表达式结束循环结束循环非非0循环体循环体while语句语句0注
2、注意意1.循环体循环体2句以上时,用句以上时,用括起来。括起来。2.while(i=n)后没有后没有“;”号号,否则是死循环。否则是死循环。3.当开始条件就不成立,循环体可能一次也不执行。当开始条件就不成立,循环体可能一次也不执行。4.表达式的值应最终能变为表达式的值应最终能变为0,避免死循环。,避免死循环。while语句语句intk=0;while(k10)printf(“*”);k+;#includevoidmain()inti,n,sum;i=1;sum=0;scanf(“%d”,&n);while(i=n)sum+=i;i+;printf(“sum=%dn”,sum);while语句语
3、句 例例4.24.2:求:求1+2+3+1+2+3+n+n,n为任意值为任意值while语句语句 例例4.54.5输入输入2020个数,求它们的和以及平均值。个数,求它们的和以及平均值。#includestdio.hvoidmain()inti,sum,a;sum=0;i=0;printf(请输入请输入20个整数:个整数:);while(i20)scanf(%d,&a);sum=sum+a;i+;printf(和和=%d平均值平均值=%lfn,sum,sum/20.0);形式:形式:do循环体循环体while(表达式表达式);其中:表达式和循环体的要求与其中:表达式和循环体的要求与while相
4、同。相同。do-while(表达式表达式)最后有最后有“;”号。号。2.do-while语句语句功能:功能:do-while语句语句表达式表达式结束循环结束循环0非非0循环体循环体do执行过程执行过程:先执行循环体,再判先执行循环体,再判断条件断条件(表达式表达式)是否满足,是否满足,若表达式为非若表达式为非0,再执行,再执行一遍循环体,再判断,一遍循环体,再判断,如此循环,直到表达式如此循环,直到表达式为为0,结束循环。,结束循环。#includestdio.hvoidmain()inti,sum,n;i=1;sum=0;printf(请输入一个整数:请输入一个整数:);scanf(“%d”
5、,&n);dosum=sum+I;i+;while(i=n);printf(和和=%dn,sum);例:用例:用do-whiledo-while语句求语句求1+2+3+1+2+3+n+ndo-while语句语句vwhile为先判断后执行。循环体可能为先判断后执行。循环体可能一一次不作;次不作;vdo-while先执行,后判断。先执行,后判断。循环体至少执行一次。循环体至少执行一次。while与与do-while比较:比较:while(表达式表达式)循环体循环体do循环体循环体while(表达式表达式);#include stdio.h void main()char c;printf(请输入一
6、字符串,以请输入一字符串,以$结束结束:n);c=getchar();while(c!=$)putchar(c);c=getchar();putchar(n);例例4.10把用户输入的字符照原样输出,用户输把用户输入的字符照原样输出,用户输入以入以$作为结束作为结束。while语句语句#includevoidmain()inti=1,n,f=1;scanf(“%d”,&n);while(i=n)f=f*i;i+;printf(“%d!=%dn”,n,f);求求n!,n可以是任意值可以是任意值do-while语句语句#includevoidmain()inti=1,n,f=1;scanf(“%d
7、”,&n);dof*=i;i+;while(i=n);printf(“n!=%d”,f);例:求例:求n!(n是任意正整数值,若输入错,重新输入)是任意正整数值,若输入错,重新输入)#includevoidmain()inti,n,f=1;do printf(“输入一个正整数输入一个正整数:”);scanf(“%d”,&n);while(n=0);/重新输入重新输入 i=1;dof*=i;i+;while(i=n);printf(“n!=%d”,f);while与与do-while练习:练习:例例5.2用下面的公式求用下面的公式求的近似值,直到最后一项的绝对的近似值,直到最后一项的绝对值小于值
8、小于10-6为止。为止。#include#includevoidmain()ints;floatn,t,pi;t=1.0;/t存放每项的值,初值为存放每项的值,初值为1pi=0;/pi中存放所求的中存放所求的的值,初值为的值,初值为0n=1.0/n中存放每项的分母中存放每项的分母s=1;/s为符号位,其值在为符号位,其值在1和和-1之间变化之间变化while(fabs(t)=1e-6)pi=pi+t;n+=2.0;s=-s;t=s/n;pi=pi*4;printf(“pi=%fn”,pi);求求的近似值,直到最后一项的绝对值小于的近似值,直到最后一项的绝对值小于10-6为止。为止。形式:形式:
9、for(e1;e2;e3)循环体循环体其中:其中:e1,e2,e3为表达式。为表达式。一般一般e1为赋值式;为赋值式;e2为关系或逻辑式,作为判断循环是否结束条件;为关系或逻辑式,作为判断循环是否结束条件;e3为增、减量。为增、减量。3.for语句语句执行功能:执行功能:判断判断e2结束循环结束循环0非非0循环体循环体计算计算e1计算计算e3forfor语句语句for(e1;e2;e3)循环体循环体#includevoidmain()inti,sum=0;printf(“请输入一个正整数请输入一个正整数n”);scanf(“%d”,&n);for(i=1;i=n;i+)sum+=i;print
10、f(“sum=%dn”,sum);for语句语句例:求例:求1+2+3+n循环体中:循环体中:for(i=1;i=n;i+)sum+=i;等价于:等价于:i=1;while(i=n)sum+=i;i+for语句语句for语句的等价形式:语句的等价形式:表达式表达式1;while(表达式表达式2)循环体;表达式循环体;表达式3;i=1;for(;i=100;i+)sum+=i;省省e1for(i=1;i100)break;for语句使用说明:语句使用说明:q其中的其中的e1和和e3可以使用逗号运算符。可以使用逗号运算符。例:例:for(i=1,j=10;ij;i+,j-)printf(“%d%d
11、n”,i,j);输出:输出:11029384756for语句使用说明:语句使用说明:qfor(e1;e2;e3)后边若有后边若有“;”则循环体为空语则循环体为空语句。句。例如例如:charc1;intn=0;for(;(c1=getchar()!=n;n+);省略省略e1for语句使用说明:语句使用说明:第第4章章 循环结构循环结构例题:分别输出例题:分别输出100以内奇数的和与偶数的和以内奇数的和与偶数的和#include void main()int i,sum1,sum2;sum1=sum2=0;for(i=1;i100;i+)if(i%2)sum1+=i;else sum2+=i;pr
12、intf(“sum1=%d sum2=%dn”,sum1,sum2);例题:求例题:求e的近似值公式:的近似值公式:(当当n=10时满足要求时满足要求)for语句例题:语句例题:#include void main()float e=1.0;int n=1,i;for(i=1;i11;i+)n=n*i;求求n!e=e+1.0/n;printf(“e=%fn”,e);for语句例题:语句例题:结果:结果:e=2.718223注意注意:循环体为二条以上语句时,用循环体为二条以上语句时,用.括起来,否则只执行括起来,否则只执行for(e1;e2;e3)后边后边的一条语句。的一条语句。for语句例题:
13、语句例题:用用while、do-while和和for实现同一循环实现同一循环#include void main()int i=1,sum=0;do sum+=i;i+;while(i=100);printf(“sum=%dn”,sum);#include void main()int i=1,sum=0;while(i=100)sum+=i;i+;printf(“sum=%dn”,sum);#include void main()int i=1,sum=0;for(;i=100;i+)sum+=i;printf(“sum=%dn”,sum);#include void main()int i
14、=5;do printf(“%d”,i);i=i-2;while(i!=0);#include void main()int i=5;while(i!=0);printf(“%d”,i);i=i-2;#include void main()int i;for(i=5;i!=0;i=i-2)printf(“%d”,i);以下均为设计错误而造成死循环以下均为设计错误而造成死循环以下均为设计错误而造成死循环以下均为设计错误而造成死循环(无限循环)(无限循环):嵌套嵌套:在一个循环的循环体内又出现另一:在一个循环的循环体内又出现另一个循环时,称为循环的嵌套。个循环时,称为循环的嵌套。三种循环语句可以互
15、相嵌套。三种循环语句可以互相嵌套。4.循环的嵌套:循环的嵌套:while(e1)dowhile(e);for(e1;e2;e3)while(e)for(a1;a2;a3)二二重重循循环环二二重重循循环环4.循环嵌套的形式:循环嵌套的形式:for(e1;e2;e3)for(n1;n2;n3)for(m1;m2;m3).三三重重循循环环4.循环嵌套的形式:循环嵌套的形式:每当外层循环执每当外层循环执行一次时,内层行一次时,内层循环执行一遍,循环执行一遍,.如此进行,如此进行,直到外层执行完。直到外层执行完。多重循环执行:多重循环执行:uu二重以上循环称为多重循环二重以上循环称为多重循环;uu无论那
16、种嵌套,内层必须完全套在外层的内部。无论那种嵌套,内层必须完全套在外层的内部。uu循环嵌套的书写注意缩进,使层次清晰。循环嵌套的书写注意缩进,使层次清晰。uu内外层循环的控制变量名不能相同,内外层循环的控制变量名不能相同,如下例的如下例的i、j、k。4.循环嵌套说明循环嵌套说明例如例如:for(i=1;i=5;i+)for(j=0;j10;j+)for(k=1;k6;k+)语句语句1语句语句2语句语句3.语句语句1执行执行5105=250次次语句语句2执行执行50次次语句语句3执行执行5次次4.循环嵌套说明循环嵌套说明#include void main()int i,j;for(i=1;i=
17、9;i+)for(j=1;j=i;j+)printf(%d,i);printf(n);编程序输出以下内容:编程序输出以下内容:1 22 333 4444 55555 666666 7777777 88888888 999999999程序运行结果:程序运行结果:分析以下程序运行结果分析以下程序运行结果#include void main()int i,j;for(i=1;i10;i+)j=0;while(+j=10-i)printf(“%4d”,i*j);printf(“n);1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 3 6 9 12 15 18 21 4 8
18、12 16 20 24 5 10 15 20 25 6 12 18 24 7 14 21 8 16 9 程序运行结果:程序运行结果:#includevoidmain()intm,i,j;longs=0;for(i=1;i=10;i+)n=j=1;while(j=i)n*=j;j+;s+=n;printf(“1+2!+3!+.+10!=%ldn”,s);求:求:1+2!+3!+4!+.+10!例例5.7 打印如下由星号组成的倒三角形。打印如下由星号组成的倒三角形。*#includevoidmain()inti,j,k;for(i=0;i4;i+)for(k=1;k=i;k+)printf(“”)
19、;for(j=0;j72*i;j+)printf(“*”);printf(“n”);break语句形式语句形式:break;作用:作用:switch循环语句中使用循环语句中使用功能:与循环配合使用,终止正进行的功能:与循环配合使用,终止正进行的循环,循环,跳出循环体跳出循环体,执行循环体,执行循环体后的语句。后的语句。4)辅助语句:辅助语句:(break和和continue)for(i=0;i10;i+).if(条件条件)break;.#include void main()int i,j;for(i=3;i=100;i+)for(j=2;j=i-1;j+)if(i%j=0)break;if(
20、i=j)printf(%4d,i);printf(n);例:例:求求3100之间的所有素数。之间的所有素数。第第4章章循环结构循环结构辅助语句:辅助语句:for(i=0;i10;i+).if(条件条件)continue;.#includevoid main()int i,j,s=0;printf(请输入请输入10个整数个整数:);for(i=0;i10;i+)scanf(%d,&j);if(j0)continue;s=s+j;printf(和和=%d,s);例例4.21输入输入10个整数,将正数累加个整数,将正数累加例题例题:求数列:求数列:0,1,1,2,3,5,8,13,21,34,前前4
21、0个数。个数。其中:第一、二两个数为其中:第一、二两个数为0、1,以后,以后每个数是前两个数之和。每个数是前两个数之和。循环应用循环应用#includevoidmain()intf1=0,f2=1,i,f;printf(“%d%d”,f1,f2);for(i=3;i=40;i+)f=f1+f2;printf(“%d”,f);f1=f2;f2=f;if(i%4=0)printf(“n”);输出结果:输出结果:01123581321345589144233377610用下列公式计算用下列公式计算的值的值:精度要求精度要求10-6 例题:例题:循环应用循环应用#include#include voi
22、d main()int s;float n,t,pi;t=1;n=1.0;pi=0;s=1;while(fabs(t)1e-6)pi=pi+t;n+=2;s=-s;t=s/n;pi=pi*4;printf(“pi=%10.6fn”,pi);求求:例:例:编程输出右边图案:编程输出右边图案:1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6 7 7 7 7 7 7 7 8 8 8 8 8 8 8 89 9 9 9 9 9 9 9 9#include void main()int i,j;for(i=1;i10;i+)for(j=1;j=9-i;j+)printf(
23、“);/输出每行前的空格输出每行前的空格 for(j=1;j=i;j+)/输出各行值输出各行值 printf(“%2d”,i);printf(“n”);/换行换行 第4章 循环结构上机作业:上机作业:.编程序输出200以内同时能被和整除的那些数 2.编程序求 当最后一项1e-6 时停止计算,输出s和n的值 3.用辗转相除法求两个正整数的最大公约数。*4.求sum=a+aa+aaa+aaaaa (其中a是1-9中的任意一位数)例例:求两个正整数的最大公约数。求两个正整数的最大公约数。辗转相除法辗转相除法#include void main()int m,n,r,m1,n1;printf(“输入两
24、个正整数:输入两个正整数:”);scanf(“%d%d”,&m,&n);m1=m,n1=n;r=m1%n1;while(r)m1=n1;n1=r;r=m1%n1;printf(“%d和和%d的的最大公约数最大公约数=%dn”,m,n,n1);#include void main()int i,a,t,sum;sum=0;t=0;printf(Please input an integer numbern);scanf(%d,&a);for(i=0;i 5;i+)t=t*10+a;/t存放当前项存放当前项sum+=t;/将当前项加入到和当中将当前项加入到和当中求求sum=a+aa+aaa+aaaaa(其中其中a是是1-9中的任意一位数)中的任意一位数)第4章 循环结构作业:作业:.编程序求 当最后一项1e-6时停止计算,输出s和n的值 2.编程序输出200以内同时能被和整除的那些数 3.编程序任意输入10个实数,求这10个数的和及平均值并输出 4.求sum=a+aa+aaa+aaaaa (其中a是1-9中的任意一位数)