《循环结构序设计.pptx》由会员分享,可在线阅读,更多相关《循环结构序设计.pptx(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、7.1 7.1 循环的概念循环的概念7.2 7.2 实现循环的语句实现循环的语句 7.3 break7.3 break和和continuecontinue语句语句7.4 7.4 循环的嵌套循环的嵌套7.5 7.5 循环结构程序设计举例循环结构程序设计举例 第1页/共35页7.1 7.1 循环的概念循环的概念当所要解决的问题存在重复执行内容时,应该使用循环结构来实现,具体的设计步骤可归纳如下。(1)构造循环体。将问题中需要重复执行的部分,利用C语言规则归纳出一组程序段。在归纳的过程中应充分利用变量是一个变化的量的概念。如本列中变量score在不同的时刻代表的是不同学生的成绩。第2页/共35页(2
2、)寻找控制循环的变量。有的题目循环的次数是确定的,可以使用计数器来控制循环;有的题目循环的次数不是确定的,那么使用计数器就不合适了,设计者应从题目中去寻找规则变化的量来控制循环体完成规定的次数。(3)找出控制变量的3个要素。循环控制变量的初值。循环的条件。使循环趋于结束的部分。第3页/共35页7.2 7.2 实现循环的语句实现循环的语句7.2.1while语句语句while语句是实现当型结构循环的语句,其一般形式为while(逻辑量)循环体语句其中,while是C语言的关键字,语句中的逻辑量为循环条件。while语句的流程图如图7.2所示。第4页/共35页使用while语句实现循环时,语句中的
3、逻辑量对应于循环条件P,循环体语句对应于循环体A。while语句执行时,首先判断逻辑量的值,如果逻辑量为1,则首先执行循环体语句,然后继续判断逻辑量;如果逻辑量为0,则结束循环,执行循环的后续语句。第5页/共35页例例7.3求1到100的和。根据流程图写出程序:main()inti,sum;sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%dn,sum);图7.3例7.3的N-S流程图第6页/共35页例例7.4求n!。main()floatfac;inti,n;fac=1;i=2;scanf(%d,&n);while(i=n)fac=fac*i;i+;pri
4、ntf(n!=%.0fn,fac);图7.4例7.4的N-S流程图第7页/共35页7.2.2do-while语句语句do-while语句是实现直到型循环结构的语句,其一般形式为:do循环体语句while(逻辑量);do-while语句的流程图如图7.6所示。第8页/共35页使用do-while语句实现循环时,语句中的逻辑量对应于循环条件P,循环体语句对应于循环体A。do-while语句执行时,首先执行循环体语句,然后判断逻辑量,如果逻辑量为1,则继续执行循环体语句;如果逻辑量为0,则结束循环,执行循环的后续语句。第9页/共35页例例7.9求两个数的最大公约数。(a)当型结构(b)直到型结构图7
5、.8例子的两种结构的N-S图第10页/共35页根据流程图可得到程序:main()main()intm,n,r;intm,n,r;scanf(%d,%d,&m,&n);scanf(%d,%d,&m,&n);if(mn)if(mn)r=m,m=n,n=r;r=m,m=n,n=r;r=m%n;dowhile(r!=0)m=n;r=m%n;n=r;m=n;r=m%n;n=r;while(r!=0);printf(%dn,n);printf(%dn,m);第11页/共35页7.2.3for语句语句for语句是实现当型循环结构的语句,for语句是语言所提供的功能更强、使用更广泛的一种循环语句。其一般形式为
6、:for(表达式1;逻辑量;表达式2)循环体语句;表达式1通常用来给循环变量赋初值,一般是赋值表达式。也允许在for语句外给循环变量赋初值,此时可以省略该表达式。逻辑量通常是循环条件,一般为关系表达式或逻辑表达式,也可以是任意“确定的值”。表达式2通常是使循环趋于结束的部分,一般是赋值表达式。第12页/共35页for语句对应的传统流程如图7.9所示。for语句的执行过程如下:(1)求解表达式1。(2)判断逻辑量,如果为1,则执行循环体语句,然后执行第3步;如果为0,则结束循环,执行循环的后续语句。(3)求解表达式2。转向第2步执行。从for语句的形式可以看出for后的括号内三项内容分别对应于循
7、环的三要素,能清晰地描述循环。我们可以采取图7.10所示的方式来描述for语句对应的N-S流程图。第13页/共35页图7.9for语句的传统流程图图7.10for语句的N-S流程图第14页/共35页例例7.11求。main()floatsum=0,s=0;floatx,h;scanf(%f,&h);for(x=0;x0;n-)a+;printf(%8d,a*2);printf(n);(3)可省去表达式2,应该在循环体部分增加使循环趋于结束部分。第17页/共35页例例7.13main()inta,n;a=0;for(n=9;n0;)printf(%8d,a*a);n-;printf(n);第18
8、页/共35页(4)省略逻辑量,则循环条件为真,那么在循环体中应有循环结束语句,否则是死循环。(5)省略表达式1和表达式2,for语句相当于while语句。第19页/共35页例例7.14main()/*计算xn*/floatx,xexpn;intn,i;scanf(%f,%d,&x,&n);xexpn=1;i=1;for(;i=n;)/*等同于while(in)*/xexpn*=x;i+;printf(%fn,xexpn);第20页/共35页(6)循环体可以是空语句。例例7.15#includestdio.hmain()intcount;count=0;printf(inputastring:n
9、);for(;getchar()!=n;count+);printf(%dn,count);无论for语句如何省略括号内的内容,循环的三个要素是必须要体现的,所以在使用for语句时,要充分理解for语句的执行过程。第21页/共35页7.3 break7.3 break和和continuecontinue语句语句7.3.1break语句语句break语句也可以在循环体中使用,作用是结束循环,继续执行循环的后续语句。break语句的一般形式为:break;使用break语句可以使循环语句有多个出口,在一些场合下使编程更加灵活、方便。第22页/共35页例例7.17判断某个一位数是否在一个不高于四位的
10、整数中出现。图7.12例7.17的N-S流程图第23页/共35页main()intm,n;intflag;flag=1;scanf(%d,%d,&m,&n);while(m!=0)if(n=m%10)flag=0;break;m=m/10;if(flag=0)printf(yesn);elseprintf(non);第24页/共35页7.3.2continue语句语句continue语句只能用在循环体中。其一般格式是:continue;continue语句的功能是结束本次循环,即不再执行循环体中continue语句之后的语句,转入下一次循环执行。应注意的是,该语句只结束本层本次的循环,并不跳出
11、循环。使用continue语句时,应该清楚在不同的循环语句中下次循环的起点是什么。在while和do-while语句中,下次循环的起点是判断逻辑量;在for语句中,下次循环的起点是计算表达式2的值。第25页/共35页例例7.18输出11000之间能被3、5、7同时整除的数。main()intn;for(n=1;n=1000;n+)if(n%3!=0)continue;if(n%5!=0)continue;if(n%7!=0)cntinue;printf(%8d,n);printf(n);第26页/共35页7.4 7.4 循环的嵌套循环的嵌套 当一个循环体内又包含另一个循环结构时,称为循环的嵌套
12、。被嵌入的循环又可以嵌套其他的循环,这就是多重循环。第27页/共35页例例7.19分析以下循环内外层循环控制变量的变化。main()inti,j;intmul;for(i=1;i10;i+)for(j=1;j10e-6);printf(%fn,ex);第32页/共35页例例7.21求Fibonacci数列的前20项之和。分析:本例是一种“递推”的题目。所谓“递推”是指在前面一个(或几个)结果的基础上推出下一个结果的方法。图7.14例7.21的N-S流程图第33页/共35页根据流程图编写程序:main()floatsum;intf1,f2,f3;inti,t;f1=1;f2=1;f3=f1+f2;sum=f1+f2+f3;for(i=4;i=20;i+)t=f2;f2=f3;f1=t;f3=f1+f2;sum+=f3;printf(%.0fn,sum);第34页/共35页感谢您的观看!第35页/共35页