资源描述
Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,Lesson 1A/Slide,*,of 27,编辑课件,第六章,循环控制,1,编辑课件,主要内容,6.1,概述,6.2 goto,语句以及用,goto,语句构成循环,6.3,用,while,语句实现循环,6.4,用,do-while,语句实现循环,6.5,用,for,语句实现循环,6.6,循环的嵌套,6.7,几种循环的比较,6.8 break,语句,continue,和语句,6.9,程 序 举 例,2,编辑课件,6.1,概述,什么是循环?,为什么要使用循环?,问题,1,:,问题,2:,求学生平均成绩,3,编辑课件,循环,4,编辑课件,生活中的例子:,击鼓传花:大家坐成一个圈,鼓声响起的时候将花束顺序交到下一个人的手里,依次向下传递,当鼓声突然中断时停止传花,花束落在谁的手里便成为输家,4100,米接力赛跑:第,1,个人跑完,100,米后将接力棒传给第,2,个人,第,2,个人再跑,100,米,然后是第,3,个人,直到第,4,个人跑完最后一个,100,米,共同点:,都要完成相同的任务:,量变,的重复内容,都有结束条件:发生,质变,的界限,5,编辑课件,6.2 goto,语句以及用,goto,语句构成循环,goto,语句,无条件转向语句,goto,语句标号;,语句标号用标识符表示,,例如:,goto label_1;,合法,;,goto 123,;不合法,.,6,编辑课件,【,例,6.1】,用,goto,语句和,if,语句构成循环,计算,sum=1+2+3+100,。,main(),int i,sum=0;,i=1;,loop:,if(i=100),sum=sum+i;,i+;,goto loop;,printf(%dn,sum);,7,编辑课件,6.2 goto,语句以及用,goto,语句构成循环,滥用,goto,语句将使程序流程无规律、可读性差,.,不建议使用,goto,语句。,一般来说,可以有两种用途:,(1),与,if,语句一起构成循环结构;,(2),从循环体中跳转到循环体外。,8,编辑课件,6.3,用,while,语句实现循环,while,语句用来实现,“,当型,”,循环结构。,一般形式:,while(,表达式,),语句,执行过程:计算表达式值,若该值为非,0,时,则执行,while,语句中的内嵌语句。然后重复上述步骤,直到表达式值为假,(,为,0),,则执行,while,语句的下一条语句。,其特点是,:,先判断表达式,后执行语句。,循环体语句,9,编辑课件,6.3,用,while,语句实现循环,注意:,循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。,在循环体中应有使循环趋向于结束的语句。,10,编辑课件,1.,计算,sum=1+2+3+100,11,编辑课件,第,5,章 循环程序设计,1.,计算,sum=1+2+3+100,循环体,循环控制条件,循环控制变量,循环的初始化,#include,void main(),int,i=1,sum=0;,while(,i=100,),sum=sum+i;,i+;,printf(“Sum=%d n”,sum);,12,编辑课件,第,5,章 循环程序设计,2.,计算,sum=2+4+6+100,循环体,循环控制条件,循环控制变量,循环的初始化,#include,void main(),int,i=2,sum=0;,while(,i=100,),sum=sum+i;,i+=2;,printf(“Sum=%d n”,sum);,13,编辑课件,2.,计算,sum=2+4+6+100,循环体,循环控制条件,循环控制变量,循环的初始化,#include,void main(),int,i=2,sum=0;,while(,i=100,),sum=sum+i;,i+=2;,printf(“Sum=%d n”,sum);,14,编辑课件,6.4 do-while,语句,do-while,语句的特点,:,先执行循环体,然后判断循环条件是否成立。,一般形式,:,do,循环体语句,while(,表达式,),;,执行过程:,先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零,(,“,真,”,),时,返回重新执行循环体语句,如此反复,直到表达式的值等于,0,为止,此时循环结束。,15,编辑课件,6.4,用,do-while,语句实现循环,while,语句和用,do-while,语句的比较,:,二者是完全等价的。,do-while,语句有可能一次也不执行循环体。,16,编辑课件,循环的变化:,sum=1+2+3+100,#include,void main(),int i=1,sum=0;,while(i=100),sum=sum+i;,i+;,printf(“Sum=%d n”,sum);,#include,void main(),int i=1,sum=0;,do,sum=sum+i;,i+;,while(i=100);,printf(“Sum=%d n”,sum);,17,编辑课件,顺序打印,1-10,的阶乘,即,1!,2!,10!,本题的关键是求阶乘,数学上,,n!=123(n-1)n,18,编辑课件,外循环,内循环,对比程序,:,(,更优,),#include,void main(),int i=1;,float f=1;,while(i=10),f=f*i;,printf(%2d!=%.0f n,i,f);,i+;,思考一下:,8-10,的阶乘,#include,void main(),int i=1,j;,float f;,while(i=10),j=1;,f=1;,while(j=i),f=f*j;,j+;,printf(“%2d!=,%.0f,n”,i,f);,i+;,19,编辑课件,6.5,用,for,语句实现循环,一般形式,:,for(,表达式,1,;表达式,2,;表达式,3),语句,表达式,1,:初始化表达式,只执行一次,表达式,2,:循环控制表达式,控制循环的结束,表达式,3,:增量表达式,使表达式,2,趋向于假,20,编辑课件,6.5,用,for,语句实现循环,for,语句的执行过程:,(,1),先求解表达式,1,。,(2),求解表达式,2,,若其值为真,(,非,0),,则执行,for,语句中指定的内嵌语句,然后执行下面第,(3),步。,若为假,(,值为,0),,则结束循环,转到第,(5),步。,(3),求解表达式,3,。,(4),转回上面第,(2),步骤继续执行。,(5),循环结束,执行,for,语句下面的一个语句,21,编辑课件,任意输入,10,个数,求平均值,#include,void main(),int i;,float x,sum=0;,printf(Enter 10 numbers one by one:n);,for(i=1;i=10;i+),scanf(%f,sum+=x;,printf(Average is%f n,sum/10);,22,编辑课件,例:顺序打印,1-10,的阶乘,即,1!,2!,3!,10,!,#include,void main(),int i,j;,float f;,for(i=1;i=10;i+),f=1;,for(j=1;j=i;j+),f=f*j;,printf(%2d!=%.0f n,i,f);,#include,void main(),int i=1,j;,float f;,while(i=10),j=1;,f=1;,while(j=i),f=f*j;,j+;,printf(“%2d!=%.0f n”,i,f);,i+;,23,编辑课件,例:打印几何图形,对于这类问题,每行中星号的个数、总行数等都应该用循环结构进行控制,而不是直接输出若干行字符串,#include,void main(),int i,j;,for(i=1;i=4;i+),for(j=0;ji;j+),putchar();,for(j=1;,j=4,;j+),putchar(*);,putchar(n);,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,24,编辑课件,for,语句的变化形式,可以省略,for,语句的“表达式,1”,或“表达式,3”,,也可以都省略(“,退化为,”,while,语句),例:将用键盘输入的若干字符顺序输出到屏幕上,#include,void main(),char ch;,for(;,(ch=getchar()!=n,;),putchar(ch);,25,编辑课件,6.6,循环的嵌套,一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套,循环,这就是多层循环。,三种循环,(while,循环、,do-while,循环和,for,循,环,),可以互相嵌套,。,26,编辑课件,6.6,循环的嵌套,下面几种都是合法的形式:,(,1),while()(2)do (3)for(;),while()do for(;),while();,while();,27,编辑课件,6.6,循环的嵌套,(4),while()(5)for(;)(6)do,do while()for(;),while(),while(),28,编辑课件,错误的嵌,套形式,循环必须是完整的,不允许内外循环交叉嵌套,f=1;,while(i 10),i=1;,do,f=f*i;,i+;,while(i10);,混乱的控,制条件,内外循环的循环控制条件通常是分开的,相对独立的,i=1;s=0;,while(,i 3,),s=s+f;,i=1;f=1;,while(,i100,时,执行,break,语句,提前结束循环,即不再继续执行其余的几次循环,。,r=1;r=10;r+,r=1;r100)break;,34,编辑课件,6.8 break,语句和,continue,语句,6.8.2 continue,语句,作用为结束本次循环,即,跳过循环体中下面尚未执行的语句,,接着进行下一次是否执行循环的判定,.,一般形式:,continue;,35,编辑课件,6.8 break,语句和,continue,语句,continue,语句和,break,语句的区别,continue,语句,只结束本次循环,,而不是终止整个循环的执行,。,while,(,表达式,1),for,if,(,表达式,2),continue;,36,编辑课件,6.8 break,语句和,continue,语句,continue,和,break,的区别,break,语句则是结束整个循环过程,,不再判断执行循环的条件是否成立。,while,(,表达式,1),for,if,(,表达式,2),break;,37,编辑课件,6.9,程序举例,例,6.6,用,/41-1/3+1/5-1/7+,公式求,的近似值,直到某一项的绝对值小于为止。,N-S,图表示算法,38,编辑课件,fabs(t()=1e-6,float s=1.0,pi=0;,int s=1,n=1;,while(),pi+=t;,n+=2;,s=-s;,t=s/n;,pi*=4;,39,编辑课件,6.9,程序举例,例,6.7,求,Fibonacci,数列前,40,个数。这个数列有如下特点:第,1,,,2,两个数为,1,,,1,。从第,3,个数开始,该数是其前面两个数之和。,即,:,F(1)=1 (n=1),F(2)=1 (n=2),F(n)=F(n-1)+F(n-2),(n3),算法如图所示,:,40,编辑课件,6.9,程序举例,例,6.8,判断,m,是否素数。,算法思想,:,让,m,被,2,到除,如果,m,能被,2,之中任何一个整数整除,则提前结束循环,此时,i,必然小于或等于,k(,即,),;如果,m,不能被,2,k(,即
展开阅读全文