收藏 分销(赏)

C语言循环结构PPT学习课件.ppt

上传人:精**** 文档编号:11421612 上传时间:2025-07-23 格式:PPT 页数:53 大小:1.13MB 下载积分:14 金币
下载 相关 举报
C语言循环结构PPT学习课件.ppt_第1页
第1页 / 共53页
C语言循环结构PPT学习课件.ppt_第2页
第2页 / 共53页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,1,第,*,页,1,第,1,页,循环语句概述,问题:求,1,100,的累计和。,根据已有的知识,可以用“,1+2+100”,来求解,但显然很繁琐。现在换个思路来考虑:,首先设置一个累计器,sum,,其初值为,0,,利用,sum=sum+i,来计算(,i,依次取,1,、,2,、,、,100,),只要解决以下,3,个问题即可:,(,1,)将,i,的初值置为,1,;(,2,)每执行,1,次“,sum=sum+i”,后,,i,增,1,;(,3,)当,n,增到,101,时,停止计算。此时,,sum,的值就是,1,100,的累计和,。,1,第,2,页,根据已有的知识,单独实现每一步都不难。但是,由于需要经常使用这种重复计算结构(称为循环结构),,C,语言提供了循环语句来实现,以简化、并规范循环结构程序设计。,在语言中,可用以下语句实现循环:,(,1,)用,for,语句。,(,2,)用,do-while,语句。,(,3,)用,while,语句。,1,第,3,页,5.1,for,语句,循环,的意思就是让程序,重复地执行某些语句,。,C,语言提供的循环结构有三种:,for,语句、,while,语句和,do_while,语句。,for,语句既可以用于,循环次数已知,的情况,也可用于循环次数预先不知道的情况。,for,语句的一般形式为:,for(),;,;,),1,第,4,页,功能:,先计算,的值,然后判断,的值,若该值为“假”,则退出循环,执行循环体下面的语句;若该值为“真”,则执行,,然后计算,的值,再判断,的值,重复以上的操作。,for,语句的流程图如图:,一般情况下,,是由一对花括括起来的复合语句。,1,第,5,页,for,循环语句注意:,可以省略,但须保留分号,(;),,同时在,for,之前必须给循环变量赋值,如:,i=1;for(;i=100;i+)sum=sum+i;,一般不可省略,否则为无限循环。,如:,for,(,i=1;i+,),sum=sum+i;,相当于条件总为真,程序会一直不停的执行直到“数据溢出”。,1,第,6,页,亦可省略,但在循环语句体中必须有语句来修改循环变量,以使条件表达式的值在某一时刻为,0,,从而能正常结束循环。,如:,for(sum=0,i=1;i=100;),sum=sum+i;,i+;,三个表达式均省略,即,for,(,;,),为无限循环,程序中要避免这种情况的发生。,条件表达式,可以是关系表达式、数值表达式。只要表达式的值,0,。就执行循环语句。,如:,for(i=0;(c=getchar()!=n;i+=c);,1,第,7,页,初始表达式、循环表达式可以是逗号表达式,如:,for(sum=0,i=1;i=100;i+,i+),相当于:,sum=0;,for(i=1;i=100;i=i+2),for,循环也可以,嵌套,,执行时是由外向里,逐层进行,先执行外层循环,再进入内层循环;退出时相反,由里向外逐层退出,先退出内层循环,然后退到上一层循环。,【例5,-2,】任意从键盘输入两个整数,a,、,b(ab),i=b;j=a;,for(;i=j;i+),sum=sum+i;,printf(sum=%dn,sum);,1,第,10,页,【例5,-3,】编写一个程序,在屏幕上打印出具有8行7列的如下图案:,这是一个很有规律的图案,可采用二重循环嵌套的方式:第,1,层控制行数,第,2,层控制列数。,算法流程图如下图:,1,第,11,页,/*,exam5_3.c,打印图,案,*/,#,include,main(),int i,j;,for(i=1;i=8;i+),for(j=1;j=7;j+),printf(*);,printf(n);,1,第,12,页,5.2,while,语句,While,语句也是一种用于产生循环动作的语句,,一般形式为:,while,(,),功能:,先计算,的值,若该值为“假”,则跳出循环,执行循环体后面的语句;若该值为“真”,则执行,,然后回过头来再检查,的值,重复以上的操作。,while,语句的流程图,1,第,13,页,:,是用一对花括号括起来的复合语句。,注意:,在,中要有使,的值为假(或,的值为零)的语句,否则会使程序出现无限循环而发生错误。,注意:,由于,while,循环是先判断,的值,后决定是否执行,,因此,有可能一次也不执行,。,1,第,14,页,【例5,-4,】将例51用,while,语句重写,,求简单几何级数的和,。,/*,exam5_4.c,用,while,求简单几何级数的和*/,#,include,main(),int i=1,sum=0;,while(i=0),s=1;,i=1;,while(i=n),s=s*i;,i+;,printf(%d!=%ld,n,s);,else,printf(Invalid input,!,);,试改为,for,循环,?,1,第,17,页,while,和,for,的比较,for(,i=1,;,i=10,;,i+,),sum=sum+i,;,i=1,;,循环变量赋初值,while(,i=0,),/*,输入负数,循环结束*,/,total =total+grade;,num+;,scanf(“%lf”,if(num!=0),printf(“Grade average is%.2fn,total/num);,else,printf(Grade average is 0n);,return 0;,Enter grades:,67 88 73 54 82-1,Grade average is 72.80,Enter grades:,-1 67 88 73 54 82,Grade average is 0,1,第,20,页,5.3,dowhile,语句,do_while,语句是另一种用于产生循环动作的语句。,一般形式为:,do,while(),;,功能:,先执行一次,,然后计算,的值,若该值为“真”,则重复以上的操作,直到该值为“假”,则退出循环语句,执行下一条语句。,do_while,语句的流程图:,1,第,21,页,应该是用一对花括号括起来的复合语句。,注意:,要有可以使,的值为“假”,(即,的值等于零)的语句,否则会使程序出现无限循环而发生错误。,do_while,循环与,while,循环的,区别,,不论情况怎样,,do_while,循环中的,至少会执行一次。,1,第,22,页,【例5,-,7】,将例5,-,6,用,do_while,语句重写,。,1,第,23,页,#include,Int main(void),int num;,double grade,total;,num=0;total=0;,do,printf(“Enter grades:);,scanf(“%lf”,total =total+grade;,num+;,while(,grade=0,);,/*,输入负数,循环结束*,/,printf(“Grade average is%.2fn,(total+1)/(num-1);,return 0;,Enter grades:,67 88 73 54 82-1,Grade average is 72.80,Enter grades:,-1 67 88 73 54 82,Grade average is 0,1,第,24,页,【例5,-,8】求,s,in(x)=x-x,3,/3!+x,5,/5!-x,7,/7!+,直到最后一项绝对值小于,le-7,(即,10,-7,)为止。,分析:,多项式从第二项起,每一项都是前一项乘以一个因子,,(-x,2,)/(n*(n-1),(n=3,5,7,9),用,s,代表,sin(x),的值,,t,代表每一项的值,,则:,t=t*(-x,2,)/(n*(n-1);,s=s+t,;,x,的值是用弧度值表示的,(1,0,=,180,弧度,),,如:,30,0,0.523598775,算法流程图如后图:,1,第,25,页,1,第,26,页,/*,exam5_8.c,求,sin(x),的值*/,#,include,#include,main(),double s,t,x;,int n=1;,scanf(%lf,t=x;,s=x;,do,n=n+2;,t=t*(-x*x)/(n*(n-1);,s=s+t;,while(fabs(t)=1e-7);,printf(sin(%lf)=%lfn,x,s);,程序运行结果:,1.57,sin(1.570000)=1.000000,1,第,27,页,while,是先判别条件,再决定是否循环;,do-while,是先至少循环一次,然后再根据循环的结果决定是否继续循环。,while,和,do-while,的比较,真,假,表达式,循环体语句,do-while,的下一条语句,真,假,while,的下一条语句,表达式,循环体语句,1,第,28,页,循环语句的选择,if,(循环次数已知),使用,for,语句,else /*,循环次数未知*,/,if (,循环条件在进入循环时明确,),使用,while,语句,else,/*,循环条件需要在循环体中明确*,/,使用,do-while,语句,1,第,29,页,5.4,用于循环中的,break,和,continue,语句,一、,break,语句,break,语句的,作用,是从一种控制结构中跳出来。,break,语句可用于循环结构,其作用是,从本层循环结构中跳出,,可以提前结束执行,,执行循环结构外的下一条语句。,break,语句的一般形式为:,break,;,break,语句在循环语句体中的,位置,应根据程序的需要而定,一般是用在循环体内,某一个,if,条件分支的语句中,,用来表示在循环过程中当某一个条件成立时提前结束循环。,1,第,30,页,程序解析判断素数,算法:除了,1,和,m,,不能被其它数整除。,设,i,取值,2,m-1,如果,m,不能被该区间上的任何一个数整除,即对每个,i,,,m%i,都不为,0,,则,m,是素数,只要找到一个,i,,使,m%i,为,0,,则,m,肯定不是素数,m%2%3%4%5%(m-1),不是素数,|=0 =0,是素数,&!=0 !=0,m,不可能被大于,m/2,的数整除,i,取值,2,m-1,、,2,m/2,、,2,for(i=2;i m/2)printf(yesn),else printf(non”);,1,第,31,页,int main(void),int i,m;,printf(“Enter a number:);,scanf(%d,for(i=2;,i m/2),printf(%d is a prime number!n,m);,else,printf(No!n);,源程序判断素数,Enter a number:,9,No,Enter a number:,11,11 is a prime number!,循环条件,?,循环的结束条件,?,1,第,32,页,break,语句,while(,exp,),语句,1,if(,expb,),break,;,语句,2,真,假,exp,语句,1,假,expb,语 句,2,循环体,真,for(i=2;,i m/2)printf(Yes);,else printf(No!n);,当循环有多个出口时:,表示循环条件,区分结束条件,for(i=2;i=m/2;i+),if(m%i=0),printf(No!n);,break;,printf(Yes);,1,第,33,页,二、,Continue,语句,Continue,语句只适用于循环结构,其一般形式为:,作用:提前结束本次循环,,提前,进行下一次循环,。,【例,5-10,】编写程序,打印100200中不能被3整除的数。,/*,exam5_10.c,求不能被3整除的数*/,#,include,main(),int n;,for(n=100;n=200;n+),if(n%3=0),continue;,printf(%dt,n);,1,第,34,页,算法流程图如图,:,要准确地使用,break,语句和,continue,语句,,,除非有必要,,,否则若可以不用则,尽量不采用,break,语句和,continue,语句。,1,第,35,页,对于例,5-10,的问题,,打印100200中不能被3整除的数。,不采用,continue,语句的算法流程图如图所示:,1,第,36,页,/*,exam5q10.c,例5-10问题不用,continue*,#include,main(),int n;,for(n=100;n=200;n+),if(n%3!=0)/*n,不能被3整除,*,/,printf(%d,n);,1,第,37,页,【例5,-11,】,break,语句和,continue,语句在程序中的区别,/*,exam5_11.c break,的作用*/,#,include,main(),int x;,for(x=1;x=10;+x),if(x=5),break;,printf(%d,x);,运行结果:1,2,3,4,/*,exam5q11.c continue,的作用*/,#,include,main(),int x;,for(x=1;x=10;+x),if(x=5),continue;,printf(%d,x);,运行结果:1,2,3,4,6,7,8,9,10,1,第,38,页,5.5,循环结构的嵌套,循环结构的嵌套,指的是某一种循环结构的语句中,,包含,有另一个循环结构。,使用嵌套的结构时,要注意嵌套的层次,,不能交叉,。,例,5.12,求,1!+2!+.+100!,1,第,39,页,嵌套循环,for(i=1;i=100;i+),item=i!,sum=sum+item;,for(i=1;i=100;i+),item=1;,for(j=1;j=i;j+)item=item*j;,sum=sum+item;,1,第,40,页,例,4-6,源程序,#include,int main(void),int i,j;,double item,sum;/*item,存放阶乘*,/,sum=0;,for(i=1;i=100;i+),item=1;/*,每次求阶乘都从,1,开始*,/,for(j=1;j=i;j+)/*,内层循环算出,item=i!*/,item=item*j;,sum=sum+item;,printf(1!+2!+3!+100!=%en,sum);,1,第,41,页,内层循环的初始化,for(i=1;i=100;i+),item=1,;,for(j=1;j=i;j+),item=item*j;,sum=sum+item;,求,1!+2!+.+100!,item=1,;,for(i=1;i=100;i+),for(j=1;j=i;j+),item=item*j;,sum=sum+item;,求,1!+1!*2!+1!*2!*100!,?,1,第,42,页,分析嵌套循环的执行过程,for(i=1;i=100;i+),item=1;,for(j=1;j=i;j+),item=item*j;,sum=sum+item;,外层循环变量,i,的每个值,内层循环变量,j,变化一个轮次;,内外层循环变量不能相同,分别用,i,和,j,1,第,43,页,for(i=1;i=100;i+),for(j=1;j=i;j+),printf(%d%dn,i,j);,1,第,44,页,5.6,goto,语句,goto,语句是一种,无条件转向语句,,它可以用在程序的任何地方,其一般形式为:,goto,语句标号;,“,语句标号,”为任何合法的标识符,放在某个语句前面并加上冒号“,:”,作为语句的标号,标号只对,goto,语句有意义,带有标号的语句被称作标号语句。,如:,error:,、,end:,、,exp:,等均为合法的语句的标号。,goto,语句的,作用,:转到标号语句所在的地方继续执行。,1,第,45,页,【例5,-,13】用,if,语句和,goto,语句组合构成的循环重,写计算器 的程序。,/*,exam5_13.c if+goto,构成循环*/,#,include,main(),int i,sum=0;,i=1;,loop,:if(i=100),sum=sum+i;,i+;,goto loop,;,printf(sum=%d,sum);,程序运行结果:,sum=5050,goto,语句是一种非结构化的语句,在程序设计中应尽量少用或不用,goto,语句。,1,第,46,页,5.7,程序范例,【例5,-16,】打印出,ASC,码序列中从,33,127,(十进制)的字符对照表。,/*,exam5_16.c,打印部分,ASCII,码字符*/,#,include,main(),int i;,for(i=33;i128;i+),printf(%d-%ct,i,i);,1,第,47,页,【例5,-17,】设公鸡每只5元,母鸡每只3元,小鸡每元3只,现用100元钱买100只鸡,编写一个程序,算出可以各买多少只鸡?,#,include,main(),int i,j,k;,for(i=0;i*5=100;i+),for(j=0;j*3=100;j+),for(k=0;k/3=100;k+=3),if(i*5+j*3+k/3)=100&(i+j+k)=100),printf(Cock-%dtHen-%dtChicken-%dn,i,j,k);,1,第,48,页,程序运行结果:,Cock-0 Hen-25 Chicken-75,Cock-4 Hen-18 Chicken-78,Cock-8 Hen-11 Chicken-81,Cock-12 Hen-4 Chicken-84,1,第,49,页,小结,:,三种循环结构:,for,、,while,和,do_while,循环。,当循环次数是肯定的情况下,用,for,循环比较方便。,while,循环,和,for,循环,都要,先判断条件,再执行循环语句体,因此,有可能一次也不执行循环语句体。,do_while,循环,不论怎样,都会先执行,一次循环语句体。,注意避免以下几个方面的问题:,1,循环语句体为复合语句,但没有使用花括号。,2,使程序发生无限循环。,3,混淆,break,语句与,continue,语句的功能。,1,第,50,页,循环程序设计,循环程序的实现要点:,归纳出,哪些操作需要反复执行?,循环体,这些操作在什么情况下重复执行,?,循环条件,选用合适的循环语句,for while do-while,循环具体实现时考虑(循环条件):,事先给定循环次数,首选,for,通过其他条件控制循环,考虑,while,或,do-while,1,第,51,页,#include,int main(void),int i,mark,max,n;,printf(Enter n:);scanf(%d,printf(Enter%d marks:,n);,scanf(%d,/*,读入第一个成绩*,/,max=mark;/*,假设第一个成绩是最高分*,/,for(i=1;i,n;i+),scanf(%d,if(max=0,),if(max mark),max=mark;,scanf(%d,;,printf(Max=%dn,max);,return 0;,例,5-19,输入一批学生的成绩,求最高分,(while),Enter marks:,67 88 73 54 82-1,Max=88,Enter marks:,-1,1,第,53,页,#include,int main(void),int mark,max;,max=-1,;/*,给,max,赋一个小初值*,/,printf(“Enter marks:);,do,scanf(%d,if(max=0);,printf(Max=%dn,max);,例,5-20,输入一批学生的成绩,求最高分,(do-while),Enter marks:,67 88 73 54 82-1,Max=88,Enter marks:,-1,
展开阅读全文

开通  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 

客服