收藏 分销(赏)

第4章循环语句和转移语句.ppt

上传人:s4****5z 文档编号:13996720 上传时间:2026-05-24 格式:PPT 页数:57 大小:543.50KB 下载积分:10 金币
下载 相关 举报
第4章循环语句和转移语句.ppt_第1页
第1页 / 共57页
第4章循环语句和转移语句.ppt_第2页
第2页 / 共57页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,循环语句和转移语句,第,4,章,第,4,章 循环语句和转移语句,4.1,循环的概念,4.2,for,循环,4.3,while,循环,4.4,do while,循环,4.5,多重循环,4.6,转移,语句,4.7,程序举例,4.1,循 环 的 概 念,1.,问 题 的 提 出,编写下列程序,i=1+2+3+4+5=?,i=1,5,S=0;,S=S+1;,S=S+2;,S=S+3;,S=S+4;,S=S+5;,6,条赋值语句,100?,4.1,循 环 的 概 念,2.,什 么 是 循 环,用,C,语言编写下列程序,s=1+2+3+4+5=?,S=1,5,S=0;,S=S+1;,S=S+2;,S=S+3;,S=S+4;,S=S+5;,6,条赋值语句,循环思想,:,有规律,重复执行相同操作的过程称为,循环,;,实现这种循环操作的程序称为,程序的循环结构,。,4.1,循 环 的 概 念,3.,解决循环的关键,用,C,语言编写下列程序,s=1+2+3+4+5=?,S=1,5,S=0;,S=S+1;,S=S+2;,S=S+3;,S=S+4;,S=S+5;,6,条赋值语句,确定循环的规律,(,循环条件、循环条件的修改),确定重复的内容(算法),S=0;,i=1;,S=,S+i,;,i+;,4.1,循 环 的 概 念,3.,解决循环的关键,p=1;,p=p*1;,p=p,*,2;,p=p*3;,;,p=p*20;,p=1,i=1,p*=i,i+,用,C,语言编写下列程序,p=1*2*3*4*,20=?,S=1,20,其它问题,如:,1+1/2+1/3+1/n,1-1/3+1/5-,等,4.1,循 环 的 概 念,4.,循 环 的 种 类,C,语言可实现的循环,:,for,循环,while,循环,do while,循环,用,goto,和,if,构成循环,多重循环,4.2 for,循 环,1.for,语句的一般形式,for(,表达式,1;,表达式,2;,表达式,3),循环体;,表达式,2,成立吗?,求解表达式,3,真,(,非,0),假,(0),求解表达式,1,循环体语句,执行流程,注,:,表达式,1,用于循环控制变量,赋初始值,它只能执行一次;,表达式,2,是循环条件;,表达式,3,用于对循环变量的修改,,以使循环能够结束。,2.for,语句举例,用,for,循环编写下列程序,i=1+2+3+4+5,i=1,5,#include,void main(),int,i,sum=0;,for(,i=1,;,i=5,;,i+,),sum+=i;,printf(%d,sum,);,i=5,?,ii+1,1,0,i=1,sumsum+i,打印,sum,的值,循环体,2.for,语句举例,用,for,循环编写下列程序,#include,void main(),int,i,sum=0;,for(,i=1,;,i=100,;,i+,),sum+=i;,printf(%d,sum,);,i=,100,?,i=i+1,1,0,i=1,sum=,sum+i,打印,sum,的值,3.for,语句说明,for,语句的三个表达式都可以缺省,但两个分号不能缺省;,若在,for,语句之前已经对循环控制变量赋初值,则,表达式,1,可以缺省;,例,:,i=1;,for(,;,i=5;i+),sum=sum+i;,for(i=1;i=5;i+),sum=sum+i;,3.for,语句说明,缺省,表达式,2,,即不判断循环条件,循环将无终止的执行,即认为,表达式,2,始终为真;为了结束循环,在循环体内用,if,和,break,控制循环结束。,if(,条件,),break;,for(i=1;i+),sum=,sum+i,;,for(i=1;1;i+),sum=,sum+i,;,可以把,表达式,3,改为表达式语句移到循环体的尾部,作为,循环体的一部分。,for(i=1;i=100,;,),sum=sum+i;,i+;,可以省略,表达式,1,和,表达式,3,,即只给循环条件。,如:,i=1;,for(;i=100;),sum=sum+i;,i+;,构成复合语句,简化为:,i=1;,for(;i=100;),sum=,sum+i,+;,如果循环体中没有任何语句,则应该加一个分号。,例如,:,s=0;,for(i,=1;i=3),2=1+1 3=1+2 5=2+3 8=3+5,在一次循环中计算两项,递推公式为:,F1=1 F2=1,(,初值),F1=F1+F2,F2=F2+F1,例,求,Fibonacci,数列,1,,,1,,,2,,,3,,,5,,,8,的前,16,个数,#include,void main(),long,int,f1,f2;,int,i,n,;,printf(“nInput,n:”);,scanf(“%d”,&n,);,f1=f2=1;,for(i=1;i=n/2;i+),printf(“%dt%dn”,f1,f2);,f1=f1+f2;,f2=f2+f1;,if(n%2)printf(“%dn”,f1);,Input n:,16,11,23,58,1321,3455,89144,233377,610987,前,16,个数,N,为奇数时再输出一项,小结,for,语句的 特点,1,、使用了三个表达式,2,、循环控制变量可以在循环体内使用,,也可以不使用,仅用来控制循环次数。,3,、从正常出口离开循环时,循环控制变,量会超过终值。,4.3 while,循 环,1.while,语句的一般形式,while (,表达式,),循环体;,功能:,计算并判断表达式的值;,若值为,0,,则结束循环,退出,while,执行后续语句;,若值为非,0,,则执行循环体语句;,依次往复。,特点:,先判断表达式,后执行循环体。,表达式成立吗?,循环体语句,真,(,非,0),假,(0),执行流程,2.while,语句说明,循环体有可能一次也不执行,。,循环体可为任意类型语句,,,复合语句,不能忘记。,下列情况,退出,while,循环,:,条件表达式不成立(为零);,循环体内遇,break,、,return,、,goto,;,无限循环,:,while(1),循环体语句,;,循环体中必须有使循环趋于结束的语句,如,i+,。,3.while,语句举例,用,while,循环编写下列程序,i=1+2+3+4+5,i=1,5,#include,void main(),int,s,i,;,s=0;,i=1;,while(i,=5),s=,s+i,;,i+;,printf(”Sum,=%,d”,s,);,i=5,?,ii+1,1,0,s=0,i=1,ss+i,打印,sum,的值,循环体,循环初值,循环终值,循环变量,增殖,3.while,语句举例,用,while,循环编写下列程序,i=1+2+3+4,+100,i=1,100,#include,void main(),int,s,i,;,s=0;i=1;,while(i,=,100,),s=,s+i,;,i+;,printf(”Sum,=%,d”,s,);,i=,100,?,ii+1,1,0,s=0,i=1,ss+i,打印,sum,的值,改变终值,例,:,将键盘输入复制到屏幕,直到,按下一个回车键为止,程序如下:,#include“,stdio.h,”,void main(),char c;,c=,getchar,();,while(,c,!=n,),putchar,(c);,c=,getchar,();,#include“,stdio.h,”,void main(),char c;,while(,(c,=,getchar,(),!=n),putchar,(c);,abcdef,abcdef,例,:,利用辗转相除法,,求两个正整数的最大公约数,算法:,若,J=0,,则,I,为最大公约数,若,J!=0,将,I,除以,J,,余数为,temp,I=J,;,J=temp,转,#include,void main(),int,i,j,temp,;,printf(“ntEnter,2 integers:”);,scanf(“%d%d”,&i,&j,);,while(j,),temp=,i%j,;,i=j;,j=temp;,printf(“Gcd,=%,dn”,i,);,Enter 2 integers:,12,18,Gcd,=6,分析:,ijtemp,121812,18126,1260,60,(,退出循环,),小结,while,语句的 特点,1,、循环一般由条件控制。,2,、在循环体内至少有一条语句能对循环,条件产生影响,以防止死循环。,4.4 do-while,循 环,1.do-while,语句的一般形式,do,循环体,while(,表达式,);,功能:,先执行一遍循环体,再判断表达式,,当表达式的值为,非,0,(,真,),时,返回重新执行,循环体;如此反复,直到表达式的值为,0,(,假,),时退出循环。,特点:,先执行循环体,后判断循环条件,(,表达,式,),是否成立,即循环体至少执行一次。,do,循环体,表达式成立吗?,假,(0),真,(,非,0),while,执行流程,2.do-while,语句说明,循环体,至少,能执行一次,。,循环体可为任意类型语句,,,复合语句,不能忘记。,dowhile,允许嵌套。,dowhile(,1,),表示无穷循环。,while,后必须跟,();,。,3.while,语句举例,用,do-while,循环编写下列程序,i=1+2+3+4+5,i=1,5,#include,void main(),int,s,i,;,s=0;,i=1;,do,s=,s+i,;,i+;,while(i,=5),;,printf(”Sum,=%,d”,s,);,循环体,循环初值,循环终值,循环变量,增殖,i=5,?,ii+1,1,0,s=0,i=1,ss+i,打印,sum,的值,注意“;”,例,:,从键盘输入一个字符,判别其是否为大写字母,如果是,则将其转换为小写字母并输出;否则不转换,不输出。,#include “,stdio.h,”,#include “,ctype.h,”,void main(),char,ch,answer,;,do,printf(“Enter,a letter:”);,ch,=,getchar,();,if(isupper(ch,),printf(“%c”,ch+a,-A,);,getchar,();,printf(“nDo,you want to do,again?(Y,/N)”);,answer=,getchar,();,getchar,();,while(answer,=,Y|answer,=y);,y,清除输入的回车键,Enter a letter:,A,a,Do you want to do,agin?(Y,/N),Enter a letter:,b,Do you want to do,agin?(Y,/N),n,清除输入的回车键,测试,c,是否为大写字母,4.5,多 重 循 环,1.,什么是,多重循环,一个循环体内又包含另一个完整的循环结构,,称为循环嵌套。,嵌套多层的循环结构又称为,多重循环。,2.,三种循环的,多重循环,形式,while(),while(),for(;),for(;),do,do,while();,while();,while(),for(;),for(;),do,while();,while(),do,while();,外循环,内循环,外循环,内循环,3.,循环嵌套,说明,三种循环可互相嵌套,层数不限。,外层循环可包含两个以上内循环,但不能相互交叉。,嵌套循环的跳转应禁止:,从外层跳入内层,。,跳入同层的另一循环,。,如,for(;),do,while();,while(),.,内循环,外循环,内循环,例,:,打印九九乘法表,#include,void main(),int,i,j,;,for(i,=1;i10;i+),for(j,=1;j=,i;j,+),printf(%d,*%d=,%d,i,j,i,*j);,printf(n,);,对第一个乘数循环,1-9,对第二个乘数循环,1-i,输出完一行后输出换行符,4.6,转移语句,1.break,语句,break,语句可以用于两个地方:,在,switch,语句中,用于中断语句的执行。,在循环语句中,,break,语句常与,if,语句配合使用,当条件成立后就跳出循环体,提前结束循环。,break,语句示例,此循环本是无限循环,因加上了,break,语句,,使程序在输入字符常量,!,时就终止循环,。,for(;),scanf(%c,&ch,);,if(ch,=!),break,;,else,printf(%c,ch,);,例,:,求,2M,之间的全部素数。,要判断一个数,n,是否素数,只需判断,2,之间的整数是否,能整除,n,,如能整除,则不是素数。,#include,#include,math.h,void main(),int,n,m,i,j,l=0;,scanf(%d,&m,);,for(n=2;n=m;n+),i=,sqrt(n,),;,for(j,=2;j=i+1),/*,若是素数*,/,if(l,5),/*,控制输出一排的个数*,/,printf(%d,t,n);,l+;,else,printf(%d,n,n,);,l=0;,m,:,给定的一个自然数,n,:2m,中的任意自然数,i,:,存放,n,的平方根值,j,:2i,之间的整数,l,:,一排输出素数计数器,100,2 3 5 7 11 13,17 19 23 29 31 37,41 43 47 53 59 61,67 71 73 79 83 89,97,2.continue,语句,continue,语句用于提前结束循环中的一轮循环。当程序执行到,continue,语句时,就跳过循环中后面还未执行的语句,回到循环的起始处,继续进行下一轮的循环。,continue,语句常与,if,语句联合起来使用,以便在满足一定条件时提前结束本轮循环。,continue,语句示例,例如,对除,5,的倍数以外的,1100,的数求和,s=0;,for(i,=1;i=100;i+),if(!(i%5),continue,;,s+=i;,printf(SUM,=%,dn,s,);,if(i%5=0),3.,goto,语句,goto,语句作用,:,将控制转到标号所指定的语句去执行。,goto,语句格式,:,或,:,goto,标号;,标号:语句,标号:语句,goto,标号;,语句使用说明,goto,语句对结构程序设计有影响。它将使程序的结构不清晰。应尽可能用,break,和,continue,语句代替,goto,不能用,goto,语句从循环的外层跳到循环的内层,否则会导致程序的混乱。,4.7,程序举例,求最大、最小和平均,级数求和,迭代算法,打印图案,穷举法,置初值的方法一般有两种:,极值法:,取有界数据的上界作为最小值的初值,,取有界数据的下界作为最大值的初值。,成员法:,取一批数据的第一个数作为最大值和,最小值的初值,本程序采用极值法,【,例,1】,求,10,个大于,0,小于,100,的数中的最大数和最小数,求最大、最小和平均,#include,void main(),int,a,i,max,min;,max=0;min=100;,for (i=1;i=10;i+),scanf(“%d”,&a,);,if(maxa)min=a;,printf(“Max,=%d,Min=%dn”,max,min);,20,Max=98,Min=20,86,45,50,90,88,28,98,77,27,【,例,2】,求每个班的平均成绩,各班人数不等,#include,void main(),int,m,n,i,j,;,float,score,sum,aver,;,printf(Input,numbers of classes:);,scanf(%d,&m,);,for(i,=1;i=0),sum=,sum+score,;,n+;,aver=sum/n;,printf(class,%d,average=%5.1fn,i,aver);,累加器和计数器的初始化,输入负数表示该班成绩输入结束,【,例,3】,利用公式计算,e,x,=1+x/1!+x,2,/2!+x,3,/3!+,x,n,/n,!,对于求级数的和,常用两类方法:,1,)通项公式法,t,0,=1,t,i,=x,i,/i!(i=1,2,.n),2,),递推公式法,t,0,=1,t,i,=t,i-1,.x/i (i=1,2,n),对于本题使用递推公式法计算量要小。,程序如下:,级数求和,#include,void main(),int,i,n;,double t,x,ex;,ex=1.0;,/*,第一项*,/,t=1.0;,printf(“Enter,value of n,x:”);,scanf(“%d%lf”,&n,&x,);,for(i=1;i,n;i,+),t*=,x/i,;,/*,从第二项开始*,/,ex+=t;,/*,累加*,/,printf(“exp(%f,)=%lfn”,x,ex);,Enter value of,n,x,:,20,0.5,exp(0.500000)=1.648721,Enter value of,n,x,:,20,5,exp(5.000000)=148.413108,思考下列问题,1,、利用公式,/4=1-1/3+1/5-1/7+,求,的近似值,直到最后一项的绝对值小于,10,-5,为止。,2,、利用公式,sinx,=x-x,3,/3!+x,5,/5!-x,7,/7!+x,9,/9!-+,(-1),n-1,x,2n-1,/(2n-1)!,编程计算,sinx,的值。,【,例,4】,用牛顿迭代法求方程,f(x)=-6x-1=0,在,2.5,附近的一个实根,.,直到满足,:,所以,牛顿迭代公式为,:,在几何意义上,:,y,Y=f(x),x,O,x,3,迭代算法,已知,:,求出,:,算法:,1,、输入,x,的初值,2,、做循环:,x0=x,按牛顿迭代公式计算,x,直到满足,:,3,、,输出结果,#include,#include,math.h,void main(),float x,x0;,printf(nInput,x0:);,scanf(%f,&x,);,do,x0=x;,x=x0-(x0*x0*x0-6*x0-1)/(3*x0*x0-6);,while(fabs(x-x0)1e-6);,printf(nThe,root is%,fn,x,);,【,例,5】,输出下列图形:,A B C D E,B C D E,特点:,行数,i,递增,,C D E,字符数递减,D E,每行的开头字符,E,是前一行的下一个字符,#include“,stdio.h,”,void main(),const,int,ROWS=5;/*,循环终值*,/,const,int,CHARS=5;,int,i;,char,ch,;,for(i,=0;i,ROWS;i,+),for(,ch,=,A+i,;,ch,A+CHARS;,ch,+,),printf(“%c”,ch,);,printf(“n”);,每排第一,个字符,小于,F,当前字符,ASCII,码,值增,1,打印图案,【,例,6】,打印以下图案,*,*,*,*,*,*,*,*,*,1,、图形对称,使用对称的循环参数,i=-4,到,4,2,、,i,与行号,k,的变换,k=5-|i|,3,、每行输出*的个数,2*k-1,4,、每行第一个*的位置为,:,常量,-k,5,、定位方法:,printf,(“%*c”,输出位置,);,程序如下:,#include,#include,void main(),int,i,j,k;,for(,i,=-4;i=4;i+,),k=5-abs(i);,printf(“%*c”,30-k,);,for(j,=1;j=2*k-1;j+),printf(%c,*);,printf(“n”);,注:,printf(“%*c”,30-k,);,是输出,30-k,个空格,思考,:,1,、输入棱形的边长,n,怎么修改程序?,2,、*之间有一个空格怎么修改程序?,3,、输出以下图形怎么修改程序?,3,3 3 3,22222,2222222,11111,111,0,#include,#,includemath.h,void main(),int,n,i,j,k,m,;,printf(nEnter,the max number:);,scanf(%d,&n,);,m=2*n+1;,for(i,=,m;i,=1;i-),k=n+1-fabs(i-n-1);,printf,(%*c,30-k,);,for(j,=1;j=2*k-1;j+),printf(%d,i/2);,printf(n,);,3,3 3 3,22222,2222222,11111,111,0,【,例,7,】,百元买百鸡,其中母鸡,3,元,/,只,公鸡,2,元,/,只,小鸡,3,只,/,元,且每种鸡至少买一只,。,试编一程序,列出所有可能的购买方案。,#include,void main(),int,x,y,z,;,for(x=1;x=,32,;x+),for(y=1;y=,48,;y+),z=100-x-y;,if(z%3=0&3*x+2*y+z/3=100),printf(”hen,=%,dtcock,=%,dt,chicken=%dn”,x,y,z);,hen=5 cock=32 chicken=63 hen=10 cock=24 chicken=66,hen=15 cock=16 chicken=69,hen=20 cock=8 chicken=72,设母鸡数:,x,公鸡数:,y,小鸡数:,z,最多花去,96,元,剩下买,y,、,z,最多花去,96,元,剩下买,x,、,z,买小鸡数,穷举法,#include,void main(),int,a,b,c,;,for(a,=1;a=9;a+),for(b,=0;b=9;b+),if(a,=,b),continue,;,for(c,=1;c=9;c+),if(a,=,c|(b,=,c),continue,;,if(a,*100+b*10+c+c*100+b*10+a=1333),printf(“%d%d%d+%d%d%d,=1333n”,a,b,c,c,b,a);,【,例,8】,求满足,abc+cba,=1333,的,a,、,b,、,c,,其中,a,、,b,、,c,均为一位数且互不相等,,a,和,c,是一个数的首位数,不可能为,0,。,419+914=1333,518+815=1333,617+716=1333,716+617=1333,815+518=1333,914+419=1333,本章要点小结,C,语言中的三种循环结构都由表达式控制执行,一个循环体,一般情况下可以相互代替;,在初值、增量及控制条件明显,或循环次数已,经给定的情况下,选用,for,循环;,for,语句和,while,语句是先判断表达式后再执行,循环体,有可能一次循环体也不执行;,do-while,循环先执行循环体再判断表达式的循,环语句,因此,至少执行一次循环体的操作;,在循环的执行过程中,应不断的改变循环控制,表达式的值,以便逐步形成使它为,0,的条件,,否则出现死循环;,本章要点小结,在多重循环中,外循环变化慢,内循环变化快,外循环一次,内循环就要循环几次;,不允许用其它的控制语句把程序流程从循环体,外转入循环体内,但必要时可以用,break,、,goto,等语句把流程从循环体内转到循环体外;,continue,语句用于跳过其后的语句,使本轮循环提前结束。,
展开阅读全文

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


开通VIP      成为共赢上传

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

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

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

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

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

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

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

客服