收藏 分销(赏)

谢丽聪老师C语言-6循环控制-2009演示课件.ppt

上传人:丰**** 文档编号:9800894 上传时间:2025-04-08 格式:PPT 页数:61 大小:513.50KB
下载 相关 举报
谢丽聪老师C语言-6循环控制-2009演示课件.ppt_第1页
第1页 / 共61页
谢丽聪老师C语言-6循环控制-2009演示课件.ppt_第2页
第2页 / 共61页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第六章 循环控制,6.1,概述,6.2goto,语句以及用,goto,语句构成循环,6.3while,语句和,do-while,语句,6.4for,语句,6.5,循环的嵌套,6.6break,和,continue,语句,1,6.1,循环控制概述,循环结构的特点:在,给定条件,成立时,反复执行某,程序段,,直到条件不成立为止。,语言提供的循环结构类型如下:,1)用goto语句和if语句构成循环;,2)用while语句;,3)用do-while语句;,4)用for语句;,循环条件,循环体,2,6.2 goto,语句以及用goto 语句构成循环,6.2.1 形式:,goto 语句标号;,6.2.2 功能:,一进入执行goto 语句、立即转向去执行其后面标号所指示的语句,goto jump;loop:,语句1,语句1 语句2,语句2 ,语句n 语句n,jump:,语句n+1,goto loop;,用标识符表示,分号,冒号,冒号,3,6.2.3 注意:,结构化程序设计方法主张,限制使用goto 语句,,一般只在下面两种结构中表示循环,一、loop:if(表达式),语句,goto loop;,表达式值为零时,立即停止循环,二、loop:语句,if(,!,表达式)goto loop;,表达式值非零时,立即停止循环,语句,当表达式值,非零,语句,直到表达式值,为零,4,例:用goto语句和if语句构成循环。,例,用goto语句和if语句构成循环。,void main(),int i,sum=0;,i=1;,loop:if(i=100),sum=sum+i;,i+;,goto loop;,printf(%dn,sum);,运行结果:5050,i=101,5,形式:,while (表达式),语句,表达式值为零时,立即停止循环,形式:,do 语句,while (表达式),;,表达式值为零时,立即停止,循环,,至少执行一次循环语句,语句,当表达式值,非零,语句,直到表达式值,为零,6.3,while 和do while 语句,分号,6,while (表达式),do 语句,while (表达式),;,7,例,1.,写出下面程序的运行结果,(1)void main(),int i=1;,while(i=3),printf(”%dn”,i);i+;,(2)void main(),int i=1;,while(i=10)k=0;,while(k=1),;,printf(”sum=%dn”,sum);,改为while(k=1),死循环,sum,n,0,1,1,2,3,3,6,4,10,结果:sum=10,9,例2 用while语句和do-while语句求,传统流程图表示算法,不成立,成立,成立,不成立,10,N-S图表示算法,100,100,11,void main(),int i,sum=0;,i=1;,运行结果:5050,while(i=100),sum+=i;i+;,printf(%dn,sum);,void,main(),int i,sum=0;,i=1;,do sum+=i;i+;,while(i=100);,printf(%dn,sum);,注意:,i和sum的初值,i的终值,12,例3 统计从键盘输入一行字符的个数。,#include,void main(),int n=0;,printf(input a string:n);,while(getchar()!=n)n+;,printf(%d,n);,只要从键盘输入的字符不是回车就继续循环,完成对输入字符个数计数。,输入:ascdf,输出:5,13,例4.计算 p=123 n,void main(),int i,n;long p;,scanf(”%d”,i=1;p=1;,while(,i=n,),p*=i,;,i+,;,printf(”p=%ldn”,p);,不用long会溢出,重复到n次,也可以写成,i0),void main(),int i,n;long s,t;,scanf(”%d”,i=1;t=1;s=0;,do,t*=i;s+=t;,i+;,while(,i=n,);,printf(”s=%ldn”,s);,保证达到计算n次,t=11 2 3,S=1+1 2+1 2 3+,15,例6.计算下面二十个数的和:13.8、-65、68.9、342.987,void main(),int,i=1,;float x,sum=0;,while(i=20),scanf(”%f”,i+;,printf(”sum=%fn”,sum);,注:,执行程序时输入,13.8 65 68.9 342.987,i=40,i+=2,16,while语句中的表达式一般是,关系表达,或,逻辑表达式,,也可以是其它表达式,只要表达式的值为真(非0)即可继续循环。,例7.,void main(),int a=0,n;,printf(“n input n:”);,scanf(%d,while(n-),printf(%d ,a+*2);,执行n次,每执行1次,n减1。,(a*2;a+),等价于,输入:8,输出:0 2 4 6 8 10 12 14,17,例8.while和do-while循环比较。,void main(),int sum=0,i;,scanf(,“,%d,”,while(i=10),sum=sum+i;,i+;printf(,“,sum=%d,”,sum);,do,sum=sum+i;,i+;,while(i=10);,输入:8,sum,i,0,8,8,9,17,10,27,11,输入:11,sum=0,sum=11,18,6.4,for 语句代替while 语句,6.4.1 形式:,for(表达式1;表达式2;表达式3)语句,要正确表达循环结构应,注意,三方面要求:,1、循环控制变量的初始化。,2、循环的条件。,3、循环控制变量的值的更新,for语句在书写形式上集中体现了这三方面要求,19,6.4.2 功能,for语句,完全可以取代 while 语句,。,for(表达式1;表达式2;表达式3)语句,它的,执行过程,如下:,1)先求解表达式1。,2)求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行第3)步;若其值为假(0),则结束循环,转到第5)步。,3)求解表达式3。,4)转回第2)步继续执行。,5)循环结束,执行for语句下面的一个语句。,20,(用for语句改写前面的,例2、例4、例5、例7),计算表达式3,语句,当表达式2值非零,计算表达式1,21,例2,、求,void,main(),int i,sum=0;,i=1;,do sum+=i;i+;,while(i=100);,printf(%dn,sum);,void main(),int i,sum=0;,for(i=1;i=100;i+)sum+=i;,printf(%dn,sum);,22,例4,.计算 p=123 n,void main(),int i,n;long p;,scanf(”%d”,i=1;p=1;,while(,i=n,),p*=i,;,i+,;,printf(”p=%ldn”,p);,for(i=1,p=1;i=n;i+),P*=i;,中间用逗号,for(i=1,p=1;i0),void main(),int i,n;long s,t;,scanf(”%d”,i=1;t=1;s=0;,do,t*=i;s+=t;,i+;,while(,i=n,);,printf(”s=%ldn”,s);,for(i=1,t=1,s=0;i=n;i+),t*=i;s+=t;,24,例7,.计算下面二十个数的和:13.8、-65、68.9、342.987,void main(),int,i=1,;float x,sum=0;,while(i=20),scanf(”%f”,i+;,printf(”sum=%fn”,sum);,for(i=1;i8;y=+i),printf(”%3d%3d”,x-,y);,A 10 1 9 2,B 9 8 7 6,C 10 10 9 1,D 10 9 9 0,表达式1只做一次,x,y,10,10,9,1,8,C,2,29,注意,:,1)for循环中的,“,表达式1,”,、,“,表达式2(循环条件),”,和,“,表达式3,”,可以缺省,但,“,;,”,不能缺省。,2)省略了“表达式1,”,表示不对循环控制变量赋初值,可在for循环里面或外面对其赋初值,。,例如:,i=1;,for(;i=20;i+),scanf(”%f”,3)省略“表达式2,”,则不做其它处理时成为死循环。,例如:,for(i=1;i+)sum=sum+i;,相当于:,i=1;,while(1),sum=sum+i;,i+;,30,4)省略了“表达式3(循环变量增量),”,则不对循环控制变量进行操作,这时,可在语句体中加入修改循环控制变量的语句,。,例如:,for(i=1;i=100;),sum=sum+i;,i+;,31,5)省略了“表达式1,”,和,“,表达式3,”,。,例如:,for(;i=100;),sum=sum+i;,i+;,相当于:,while(i=100),sum=sum+i;,i+;,32,6)3个表达式都可以省略。,例如:,for(;)语句,相当于:,while(1)语句,7)表达式1可以是设置循环变量的初值的赋值表达式,也可以是其他表达式。,例如:,for(sum=0;i=100;i+)sum=sum+i;,33,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;,else,if,(a=5),switch 结构,else,for(s=0,n=0;n3;n+)s+=n;,36,6.6,break语句和continue语句,switch 结构中的 break:提前结束,该结构,循环结构中的break:提前结束,该结构,(while循环、do-while循环、for循环),循环结构中的continue:提前结束,本次循环,若在多层嵌套中使用break或continue,它只影响包含它的最内层结构,37,38,例1.写出以下程序的运行结果:,void main(),int n;,for(n=1;n=10;n+),if(n%3=0),break,;printf(“%4d”,n);,printf(“!n”);,void main(),int n;,for(n=1;n=10;n+),if(n%3=0),cotinue,;printf(“%4d”,n);,printf(“!n”);,结果:1 2!,结果:1 2 4 5 7 8 10!,39,例2.把100200之间的不能被3整除的数输出。,#include,void main(),int,n;,for(n=100;n=200;n+),if(n%3=0),continue;,printf(”%d”,n);,printf(”n”);,能被3整除,则进行下一次循环,40,例3.计算下面若干个数的和:13.8、-65、68.9、342.987,并统计个数(个数100),#include,void main(),int,i=1,;float x,sum=0;,while(i=100),scanf(”%f”,if(fabs(x-1e36)0.0001)break;,sum+=x;,i+;,printf(”sum=%f,count=%dn”,sum,);,注:执行程序时输入,13.8 65 68.9 342.987,1e36,求绝对值,理论上相等,实际上有误差,位置,不能,错,i-1,41,例4.void main(),int k,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,k,j,x,1,1,1,2,2,3,3,4,4,5,5,6,7,2,8,2,9,3,10,4,11,5,12,13,3,14,42,程序举例,43,例1:输出101000中所有十位数为3的数,void,main(),int i;,for(i=10;i=1000;i+),if(,i/10%10,=3)printf(“%5d”,i);,如:i=1234,i/10=123 整数,123%10=3,if(,i/10%10,3)continue,;,printf(“%5d”,i);,44,例2:,void main(),int k;,for(k=2;k=10;k+=3),printf(”%4d”,k);,printf(”%4d”,k);,运行结果:,2 5 8,11,45,例3:,void main(),int k,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);,第一遍,k,j,(1),1,99,(2),1,5,(2),1,6,(2),1,7,(3),1,8,第二遍,k,j,(1),2,8,(2),2,5,(2),2,6,(2),2,7,(3),2,8,(4),3,8,46,例4:,void main(),int i,j,k;,printf(i j kn);,for(i=0;i2;i+),for(j=0;j2;j+),for(k=0;k2;k+),printf(,“,%d%d%dn,i,j,k);,i,j,k,0,0,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,1,1,1,1,2,1,2,1,2,47,例5:输出100200中所有素数,m是素数:,m不被2、3、4、m-1中任一个整除,结果:,101 103 107 109 113 127 131 137 139 149,151 157 163 173 173 179 181 191 193 197,199,48,执行,m=11;m=,15,;,k=m-1;k=m-1;,for(i=2;i=k;i+)for(i=2;ik ik,结束for循环,k,i,m%i,3,2,1,3,0,m%i=0,break,49,void main(),int m,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(,“,%d is not a prime numbern,”,m);,else,printf(,“,%d is a prime numbern,”,m);,只要有一个整除,后面无需判断,强迫循环结束,此时ik,说明都不能整除,50,改为输入一个数,判断是否为素数.,m-1,51,#include,void main(),int m,i,k;,scanf(,“,%d,”,k=m-1;,for(i=2;i=k),printf(,“,%d is a prime numbern,”,m);,else,printf(,“,%d is not a prime numbern,”,m);,输入:3,输入:6,52,例6:,输出所有由1、2、3组成的三位数,111 211 311,112 212 312,113 213 313,121 221 321,122 222 322,123 223 323,131 231 331,132 231 332,133 233 333,53,void main(),int i,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没有空格和逗号,起分隔符作用,i,j,k,1,1,1,1,1,2,1,1,3,1,2,1,1,2,2,1,2,3,1,3,1,1,3,2,1,3,3,2,1,1,1,2,54,上面改为不出现重复数字的三位数,void main(),int i,j,k;,for(i=1;i=3;i+),for(j=1;j=3;j+),for(k=1;k=3;k+),if(i!=j&j!=k&k!=i),print(“,%d%d%d,”,i,j,k);,55,上面改为不出现重复字母 的由X、Y、Z组成的三个子符的字符串,void main(),int i,j,k;,for(i=X;i=Z;i+),for(j=X;j=Z;j+),for(k=X;k=Z;k+),if(i!=j&j!=k&k!=i),print(“,%c%c%c,”,i,j,k);,与int一样,56,例7:,P121 6.15,void main(),甲队 乙队,int i,j,k;,X A,for(i=X;i=Z;i+),Y B,for(j=X;j=Z;j+),Z C,for(k=X;k1e-6),pi=pi+t;,n=n+2;,s=-s;,t=s/n;,pi=pi*4;printf(pi=%10.6fn,pi);,58,例9“斐波那契数列”是意大利中世纪数学家列昂纳多斐波那契以兔子繁殖为例子而引入的:兔子在出生两个月后,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?经过分析:,经过月数:-0-1-2-3-4-5-6-7-,兔子对数:-1-1-2-3-5-8-13-21-,数字1,1,2,3,5,8,13,构成了一个数列。,59,数字1,1,2,3,5,8,13,有明显的特点:,前面相邻两项之和,构成了后一项。,我们可以得到递推公式如下:,程序运行结果为:,1 1 2 3,5 8 13 21,34 55 89 144,233 377 610 987,1597 2584 4181 6765,60,void main(),int i,x1=1,x2=1;,for(i=1;i=10;i+),/*每次生成并输出两项,所以循环10次*/,printf(”%10d%10d ”,x1,x2);,if(i%2=0)printf(”n”);,/*当i为偶数时换行,即每四个数换行*/,x1=x1+x2;,x2=x2+x1;,61,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服