C语言-6循环控制最新版本_第1页
C语言-6循环控制最新版本_第2页
C语言-6循环控制最新版本_第3页
C语言-6循环控制最新版本_第4页
C语言-6循环控制最新版本_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

第六章循环控制,6.1概述6.2goto语句以及用goto语句构成循环6.3while语句和do-while语句6.4for语句6.5循环的嵌套6.6break和continue语句,6.1循环控制概述,循环结构的特点:在给定条件成立时,反复执行某程序段,直到条件不成立为止。语言提供的循环结构类型如下:1)用goto语句和if语句构成循环;2)用while语句;3)用do-while语句;4)用for语句;,循环条件,循环体,6.2goto语句以及用goto语句构成循环,6.2.1形式:goto语句标号;6.2.2功能:一进入执行goto语句、立即转向去执行其后面标号所指示的语句gotojump;loop:语句1语句1语句2语句2语句n语句njump:语句n+1gotoloop;,用标识符表示,分号,冒号,冒号,6.2.3注意:结构化程序设计方法主张限制使用goto语句,一般只在下面两种结构中表示循环一、loop:if(表达式)语句gotoloop;表达式值为零时,立即停止循环二、loop:语句if(!表达式)gotoloop;表达式值非零时,立即停止循环,例:用goto语句和if语句构成循环。,例用goto语句和if语句构成循环。voidmain()inti,sum=0;i=1;loop:if(i=100)sum=sum+i;i+;gotoloop;printf(%dn,sum);运行结果:5050,i=101,形式:while(表达式)语句表达式值为零时,立即停止循环形式:do语句while(表达式);表达式值为零时,立即停止循环,至少执行一次循环语句,6.3while和dowhile语句,分号,while(表达式),do语句while(表达式);,例1.写出下面程序的运行结果,(1)voidmain()inti=1;while(i100,voidmain()inti,sum=0;i=1;运行结果:5050while(i=100)sum+=i;i+;printf(%dn,sum);voidmain()inti,sum=0;i=1;dosum+=i;i+;while(i=100);printf(%dn,sum);,注意:i和sum的初值i的终值,例3统计从键盘输入一行字符的个数。,#includevoidmain()intn=0;printf(inputastring:n);while(getchar()!=n)n+;printf(%d,n);,只要从键盘输入的字符不是回车就继续循环,完成对输入字符个数计数。,输入:ascdf输出:5,例4.计算p=123nvoidmain()inti,n;longp;scanf(”%d”,不用long会溢出,重复到n次,也可以写成i0)voidmain()inti,n;longs,t;scanf(”%d”,保证达到计算n次,t=1123S=1+12+123+,例6.计算下面二十个数的和:13.8、-65、68.9、342.987voidmain()inti=1;floatx,sum=0;while(i=20)scanf(”%f”,注:执行程序时输入13.86568.9342.987,i=40,i+=2,while语句中的表达式一般是关系表达或逻辑表达式,也可以是其它表达式,只要表达式的值为真(非0)即可继续循环。例7.voidmain()inta=0,n;printf(“ninputn:”);scanf(%d,执行n次,每执行1次,n减1。,(a*2;a+),输入:8,输出:02468101214,例8.while和do-while循环比较。voidmain()intsum=0,i;scanf(“%d”,dosum=sum+i;i+;while(i=10);,输入:8,输入:11,sum=0,sum=11,6.4for语句代替while语句,6.4.1形式:for(表达式1;表达式2;表达式3)语句要正确表达循环结构应注意三方面要求:1、循环控制变量的初始化。2、循环的条件。3、循环控制变量的值的更新,for语句在书写形式上集中体现了这三方面要求,6.4.2功能,for语句完全可以取代while语句。for(表达式1;表达式2;表达式3)语句它的执行过程如下:1)先求解表达式1。2)求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行第3)步;若其值为假(0),则结束循环,转到第5)步。3)求解表达式3。4)转回第2)步继续执行。5)循环结束,执行for语句下面的一个语句。,(用for语句改写前面的例2、例4、例5、例7),例2、求voidmain()inti,sum=0;i=1;dosum+=i;i+;while(i=100);printf(%dn,sum);voidmain()inti,sum=0;for(i=1;i=100;i+)sum+=i;printf(%dn,sum);,例4.计算p=123nvoidmain()inti,n;longp;scanf(”%d”,for(i=1,p=1;i=n;i+)P*=i;,中间用逗号,for(i=1,p=1;i0)voidmain()inti,n;longs,t;scanf(”%d”,for(i=1,t=1,s=0;i=n;i+)t*=i;s+=t;,例7.计算下面二十个数的和:13.8、-65、68.9、342.987voidmain()inti=1;floatx,sum=0;while(i=20)scanf(”%f”,for(i=1;i8;y=+i)printf(”%3d%3d”,x-,y);A10192B9876C101091D10990,表达式1只做一次,9,1,8,C,2,注意:,1)for循环中的“表达式1”、“表达式2(循环条件)”和“表达式3”可以缺省,但“;”不能缺省。2)省略了“表达式1”,表示不对循环控制变量赋初值,可在for循环里面或外面对其赋初值。例如:i=1;for(;i=20;i+)scanf(”%f”,4)省略了“表达式3(循环变量增量)”,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。例如:for(i=1;i=100;)sum=sum+i;i+;,5)省略了“表达式1”和“表达式3”。例如:for(;i=100;)sum=sum+i;i+;相当于:while(i=100)sum=sum+i;i+;,6)3个表达式都可以省略。例如:for(;)语句相当于:while(1)语句7)表达式1可以是设置循环变量的初值的赋值表达式,也可以是其他表达式。例如:for(sum=0;i=100;i+)sum=sum+i;,8)表达式1和表达式3可以是一个简单表达式也可以是逗号表达式。for(sum=0,i=1;i=100;i+)sum=sum+i;或:for(i=0,j=100;iy+z)for(k=1;k2;k+)if(a5)w=1;elseif(a=5)switch结构elsefor(s=0,n=0;n3;n+)s+=n;,6.6break语句和continue语句,switch结构中的break:提前结束该结构循环结构中的break:提前结束该结构(while循环、do-while循环、for循环)循环结构中的continue:提前结束本次循环,若在多层嵌套中使用break或continue,它只影响包含它的最内层结构,例1.写出以下程序的运行结果:voidmain()intn;for(n=1;n=10;n+)if(n%3=0)break;printf(“%4d”,n);printf(“!n”);voidmain()intn;for(n=1;n=10;n+)if(n%3=0)cotinue;printf(“%4d”,n);printf(“!n”);,结果:12!,结果:12457810!,例2.把100200之间的不能被3整除的数输出。#includevoidmain()intn;for(n=100;n=200;n+)if(n%3=0)continue;printf(”%d”,n);printf(”n”);,能被3整除,则进行下一次循环,例3.计算下面若干个数的和:13.8、-65、68.9、342.987,并统计个数(个数100)#includevoidmain()inti=1;floatx,sum=0;while(i=100)scanf(”%f”,注:执行程序时输入13.86568.9342.9871e36,求绝对值,理论上相等,实际上有误差,位置不能错,i-1,例4.voidmain()intk,j,x=0;for(k=1;k=4;k+)x+;if(k%3=0)break;for(j=k;j=5;j+)x+;x+;printf(”%dn”,x);结果?,14,程序举例,例1:输出101000中所有十位数为3的数voidmain()inti;for(i=10;i=1000;i+)if(i/10%10=3)printf(“%5d”,i);,如:i=1234i/10=123整数123%10=3,if(i/10%103)continue;printf(“%5d”,i);,例2:,voidmain()intk;for(k=2;k=10;k+=3)printf(”%4d”,k);printf(”%4d”,k);运行结果:25811,例3:,voidmain()intk,j=99;for(k=1;k=2;k+)printf(”(1)%d,5dn”,k,j);for(j=5;j=7;j+)printf(”(2)%d,5dn”,k,j);printf(”(3)%d,5dn”,k,j);printf(”(4)%d,5dn”,k,j);,例4:,voidmain()inti,j,k;printf(ijkn);for(i=0;i2;i+)for(j=0;j2;j+)for(k=0;k2;k+)printf(“%d%d%dn,i,j,k);,1,2,1,2,例5:输出100200中所有素数m是素数:m不被2、3、4、m-1中任一个整除结果:101103107109113127131137139149151157163173173179181191193197199,执行m=11;m=15;k=m-1;k=m-1;for(i=2;ikik,结束for循环,m%i=0,break,voidmain()intm,i,k;for(m=100;m=200;m+)k=m-1;for(i=2;i=k;i+)if(m%i=0)break;if(i=k)printf(“%disnotaprimenumbern”,m);elseprintf(“%disaprimenumbern”,m);,只要有一个整除,后面无需判断,强迫循环结束,此时ik说明都不能整除,改为输入一个数,判断是否为素数.,m-1,#includevoidmain()intm,i,k;scanf(“%d”,输入:3,输入:6,例6:输出所有由1、2、3组成的三位数,111211311112212312113213313121221321122222322123223323131231331132231332133233333,voidmain()inti,j,k;for(i=1;i=3;i+)for(j=1;j=3;j+)for(k=1;k=3;k+)printf(“%d%d%d,”,i,j,k);%d%d%d没有空格和逗号,起分隔符作用,上面改为不出现重复数字的三位数voidmain()inti,j,k;for(i=1;i=3;i+)for(j=1;j=3;j+)for(k=1;k=3;k+)if(i!=j,上面改为不出现重复字母的由X、Y、Z组成的三个子符的字符串voidmain()inti,j,k;for(i=X;i=Z;i+)for(j=X;j=Z;j+)for(k=X;k=Z;k+)if(i!=j,与int一样,例7:P1216.15,voidmain()甲队乙队inti,j,k;XAfor(i=X;i=Z;i+)YBfor(j=X;j=Z;j+)ZCfor(k=X;k1e-6)pi=pi+t;n=n+2;s=-s;t=s/n;pi=pi*4;printf(pi=%10.6fn,pi);,例9“斐波那契数列”是意大利中世纪数学家列昂纳多斐波那契以兔子繁殖为例子而引入的:兔子在出生两个月后,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?经过分析:经过月数:-0-1-2-3-4-5-6-7-兔子对数:-1-1-2-3-5-8-13-21-数字1,

温馨提示

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

评论

0/150

提交评论