C语言第五章循环结构程序设计.pptx
5.1 用while语句实现循环while语句用来实现“当型”循环结构。一般形式:while(while(表达式表达式)循环体循环体 当表达式为非0值时,执行while语句中的内嵌语句。其特点是:先判断表达式,后执行语句。第1页/共30页 5.1 用while语句实现循环注意:注意:(1)循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。(2)在循环体中应有使循环趋向于结束的语句。如果无此语句,则表达式的值始终不为0,循环永不结束。如果表达式的值始终不为0,则在循环体内应有在某种条件下强行终止循环的语句。(3)若while后的表达式一开始就为0,循环体语句可能一次也不执行。第2页/共30页 5.1 用while语句实现循环例例5.15.1求求1+2+.+n1+2+.+n的值的值#include#include main()main()int i,n,sum;int i,n,sum;printf(printf(“n=n=”););scanf(scanf(“%d%d”,&i);,&i);sum=0;sum=0;while(i=10)while(i=10)sum=sum+i;sum=sum+i;i+;i+;printf(printf(“sum=%dsum=%d”,sum);,sum);第3页/共30页 5.2 用do-while语句实现循环 do-while语句的特点:先执行循环体,然后判断循环条件是否成立。一般形式:do do 循环体语句 whilewhile(表达式);执行过程:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零(“真”)时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。第4页/共30页 5.2 用do-while语句实现循环注意:注意:(1)(1)循环体如果包含一个以上的语句,应该用循环体如果包含一个以上的语句,应该用花括弧花括弧括起来,以复合语句形式出现。括起来,以复合语句形式出现。(2)(2)在循环体中应有使循环趋向于结束的语句。在循环体中应有使循环趋向于结束的语句。如果无此语句,则表达式的值始终不为如果无此语句,则表达式的值始终不为0 0,循环永不结束。如果表达式的值始终不,循环永不结束。如果表达式的值始终不为为0 0,则在循环体内应有在某种条件下强,则在循环体内应有在某种条件下强行终止循环的语句。行终止循环的语句。(3)(3)whilewhile后的后的分号分号不能省略,因为它表示不能省略,因为它表示do-whiledo-while语句结束。语句结束。第5页/共30页 5.2 用do-while语句实现循环例例5.25.2求求1+2+.+n1+2+.+n的值的值#include#include main()main()int i,n,sum;int i,n,sum;printf(printf(“n=n=”););scanf(scanf(“%d%d”,&i);,&i);sum=0;sum=0;do do sum=sum+i;sum=sum+i;i+;i+;while(i=10);while(i=10);printf(printf(“sum=%dsum=%d”,sum);,sum);第6页/共30页 6.4 用do-while语句实现循环whilewhile语句和用do-whiledo-while语句的比较:在一般情况下,用while语句和用do-while语句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。但是如果while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的。第7页/共30页 5.2 用do-while语句实现循环可以看到当输入i=10,二者结果一样。对于while循环,一次也不执行循环体。而对do-while来说要执行一次。因此用do-while循环时,应将条件取反。把例5.2中的i10。只有这样才是对同一问题的两种表述。第8页/共30页 5.3 用for 语句实现循环C语言中的for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。一般形式:forfor(表达式1;表达式2;表达式3)语句又可表达为:for(循环变量初值;循环条件;循环变量增值)第9页/共30页 5.3 用for 语句实现循环forfor语句的执行过程:(1)先求解表达式1。(2)求解表达式2,若其值为真(值为非0),则执 行for语句中指定的内嵌语句,然后执行下 面第(3)步。若为假(值为0),则结束循环,转到第(5)步。(3)求解表达式3。(4)转回上面第(2)步骤继续执行。(5)循环结束,执行for语句下面的一个语句 第10页/共30页 5.3 用for 语句实现循环例例5.35.3求求1+2+.+n1+2+.+n的值的值#include#include main()main()int i,n,sum;int i,n,sum;printf(printf(“n=n=”););scanf(scanf(“%d%d”,&i);,&i);sum=0;sum=0;for(i=1;i=10;i+)for(i=1;i=10;i+)sum=sum+i;sum=sum+i;printf(printf(“sum=%dsum=%d”,sum);,sum);第11页/共30页 5.3 用for 语句实现循环注意:注意:forfor中的表达式可部分或全部省略中的表达式可部分或全部省略,但两个分号不能省略。但两个分号不能省略。eg:for(;)eg:for(;)但这样循环会无限执行,无意义。称为死循环。但这样循环会无限执行,无意义。称为死循环。第12页/共30页 5.3用for 语句实现循环注意:C语言中的for语句比其他语言(如BASIC,PASCAL)中的FOR语句功能强得多。可以把循环体和一些与循环控制无关的操作也作为表达式1或表达式3出现,这样程序可以短小简洁。但过分地利用这一特点会使for语句显得杂乱,可读性降低,最好不要把与循环控制无关的内容放到for语句中。第13页/共30页 5.3用for 语句实现循环例例5.45.4求求1+2+.+n1+2+.+n的值的值#include#include main()main()int i,n,sum;int i,n,sum;printf(printf(“n=n=”););scanf(scanf(“%d%d”,&i);,&i);sum=0;sum=0;for(sum=0,i=1;i=10;i+)for(sum=0,i=1;i=10;i+)sum=sum+i;sum=sum+i;printf(printf(“sum=%dsum=%d”,sum);,sum);第14页/共30页 5.4 几种循环的比较(1)三种循环都可以用来处理同一问题,一般情况下它们可以互相代替。(2)在while循环和do-while循环中,只在while后面的括号内指定循环条件,因此为了使循环能正常结束,应在循环体中包含使循环趋于结束的语句(如i+,或i=i+1等)。第15页/共30页 5.4 几种循环的比较 for循环可以在表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式3中。因此for语句的功能更强,凡用while循环能完成的,用for循环都能实现。(3)用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成。而for语句可以在表达式1中实现循环变量的初始化。第16页/共30页 5.4几种循环的比较(4)while循环、do-while循环的表达式不能省略,for循环中的3个表达式可省略。while循环、do-while循环都有可能一次循环也不执行,而do-while循环则至少执行一次。第17页/共30页 5.5 break语句和continue语句 5.5.1 break5.5.1 break语句 break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句 一般形式:break;break;注意:break语句不能用于循环语句和switch语句之外的任何其他语句中。第18页/共30页 5.5 break语句和continue语句 例:float pi=3.14159;for(r=1;r100)break;printf(r=%f,area=%fn,r,area);程序的作用是计算程序的作用是计算r=1r=1到到r=10r=10时的圆面积,直到时的圆面积,直到面积面积areaarea大于大于100100为止。从上面的为止。从上面的forfor循环可以看循环可以看到:当到:当area100area100时,执行时,执行breakbreak语句,提前结束语句,提前结束循环,即不再继续执行其余的几次循环循环,即不再继续执行其余的几次循环。第19页/共30页 5.5 break语句和continue语句 continue语句和break语句的区别 continue语句只结束本次循环,而不是终止整个循环的执行。while(表达式1)for if(表达式2)continue;第20页/共30页 5.5 break语句和continue语句 5.5.2 continue5.5.2 continue语句 作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定.一般形式:continue;continue;第21页/共30页 5.5 break语句和continue语句 continue和break的区别 break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。while(表达式1)for if(表达式2)break;第22页/共30页 5.5 break语句和continue语句 eg:eg:输出输出100-200100-200之间不能被之间不能被3 3整除的数整除的数#include#include”stdio.hstdio.h”main()main()int n;int n;for(n=100;n=200;n+)for(n=100;n=200;n+)if(n%3=0)if(n%3=0)continue;continue;printf(printf(“%5d%5d”,n);,n);第23页/共30页 5.6 循环的嵌套一个循环体内又包含另一个完整的循环结构 称为循环的嵌套。内嵌的循环中还可以嵌套 循环,这就是多层循环。三种循环(while循环、do-while循环和for循 环)可以互相嵌套。第24页/共30页 5.6 循环的嵌套下面几种都是合法的形式:(1)while()(2)do (3)for(;)while()do for(;)while();while();第25页/共30页 5.6 循环的嵌套(4)while()(5)for(;)(6)do do while()for(;)while()while()第26页/共30页 5.7 程序举例 例 判断判断m m是否素数。是否素数。算法思想:让m被2到m-1除,如果m能被2m-1之中任何一个整数整除,则提前结束循环,此时i必然小于m;如果m不能被2m-1之间的任一整数整除,则在完成最后一次循环后,i还要加1,因此i=m,然后判断为假才终止循环。在循环之后判别i的值是否大于或等于m,若是,则表明未曾被2m-1之间任一整数整除过,因此输出“是素数”。第27页/共30页5.7 程序举例#include#include“stdio.hstdio.h”#include#include”math.hmath.h”main()main()int m,n=0,i;int m,n=0,i;for(m=2;m=200;m+)for(m=2;m=200;m+)for(i=2;im;i+)for(i=2;i=m)if(i=m)printf(printf(“%5d%5d”,m);,m);n+;n+;if(n%10=0)if(n%10=0)printf(printf(“nn”););第28页/共30页考试重点 1 1、FORFOR循环结构。循环结构。2 2、WHILEWHILE和和DO WHILEDO WHILE循环结构。循环结构。3 3、CONTINUECONTINUE语句和语句和BREAKBREAK语句。语句。4 4、循环的嵌套。循环的嵌套。分析:这部分主要讨论了循环结构程序设计,分析:这部分主要讨论了循环结构程序设计,一般会出一般会出2-32-3个选择题和个选择题和2-32-3个填空题。注意几个个填空题。注意几个问题:问题:1 1、FORFOR(第一语句,第二语句,第三语句)(第一语句,第二语句,第三语句)循环中的各语句的执行顺序,循环中的各语句的执行顺序,2 2、搞清楚当型循环、搞清楚当型循环whilewhile和直到型循环和直到型循环whilewhile的区别。的区别。3 3、转向语句中、转向语句中的的continuecontinue(结束本次循环)和(结束本次循环)和breakbreak(结束本(结束本层循环)的区别。层循环)的区别。第29页/共30页感谢您的欣赏!第30页/共30页