资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,6,章 循环结构的程序设计,循环结构:,当型循环结构,直到型循环结构,P,A,假,真,当,P,为真,A,A,P,假,真,A,直到,P,为,假,注:,A,可以是一个简单语句,也可以是一个基本结构,6.1,概述,C,语言可实现循环,结构,的语句:,用,goto,和,if,构成循环,while,语句,do while,语句,for,语句,goto,语句一般格式:,goto,语句标号,;,标号,:,语句,;,功能:无条件转移语句,说明:,不能用整数作标号,只能出现在,goto,所在函数内,且唯一,只能加在可执行语句前面,限制使用,goto,语句,6.2 goto语句以及用goto语句构成循环,例 用,if,和,goto,语句构成循环,求,/*c5_1.c*/,#include,main(),int,i,sum=0;,i=1;,loop:,if(i=100),sum+=i;,i+;,goto,loop;,printf(%d,sum,);,循环初值,循环终值,循环变量增值,循环条件,循环体,分析:,sum=sum+1=1,sum=sum+2=1+2=3,sum=sum+3=3+3=6,sum=sum+4=6+4=10,sum=sum+100=4950+100=5050,例 从键盘输入一组数据,以,0,结束输入,求数据和,/*c5_2.c*/,#include,void,main(void,),int number,sum=0;,read_loop:,scanf(%d,&number,);,if(!number),goto,print_sum,;,sum+=number;,goto,read_loop,;,print_sum,:,printf(The,total sum is%dn,sum);,一般形式,:,while(,表达式,),循环体语句,执行流程,:,表达式,循环体,假(0),真(非0),while,6.3 while,语句,此处无,;,特点,:先判断表达式,后执行循环体(当型),说明,:,循环体有可能一次也不执行,循环体可为任意类型语句,下列情况,退出,while,循环,:,条件表达式不成立(为零),循环体内遇,break,return,goto,无限循环,:,while(1),循环体,;,例 用,while,循环求,/*c5_3.c*/,#include,void,main(void,),int i,sum=0;,i=1;,while(i=100),sum=sum+i;,i+;,printf(%d,sum,);,循环初值,循环终值,循环变量增值,循环条件,循环体,例 显示,110,的平方,/*c5_4.c*/,#include,void,main(void,),int i=1;,while(i=10),printf(%d,*%d=%dn,i,i,i*i);,i+;,运行结果:,1*1=1,2*2=4,3*3=9,4*4=16,5*5=25,6*6=36,7*7=49,8*8=64,9*9=81,10*,10,=100,一般形式:,do,循环体语句,while(,表达式,);,执行流程:,do,循环体,表达式,假(0),真(非0),while,6.4 do-while,语句,此处有,;,特点:先执行循环体,后判断表达式(直到型),说明,:,至少执行一次循环体,do-while,可转化成,while,结构,表达式,循环体,假(0),真(非0),循环体,While,循环,例 用,dowhile,循环求,/*c5_5.c*/,#include,void,main(void,),int i,sum=0;,i=1;,do,sum+=i;,i+;,while(i=100);,printf(%d,sum,);,例,while,和,dowhile,比较,/*c5_6_1.c*/,#include,void,main(void,),int i,sum=0;,scanf(%d,&i,);,do,sum+=i;,i+;,while(i=10);,printf(%d,sum,);,/*c5_6_2.c*/,#include,void,main(void,),int i,sum=0;,scanf(%d,&i,);,while(i=10),sum+=i;,i+;,printf(%d,sum,);,结论:当,while,后的表达式第一次的值为“真”时,两种结果相同,否则不同。,一般形式:,for(,表达式,1,;,表达式,2,;,表达式,3,),循环体语句,执行流程:,表达式,2,循环体,假(0),真(非0),for,表达式,1,表达式,3,6.5 for,语句,1.,先求解表达式,1,;,2.,求解表达式,2,,若其值为真,(,非,0),,则执行循环体的内容,然后执行第,3,步。若为假,(0),,则结束循环,执行,for,语句下面一条语句。,3.,若表达式为真,执行指定的语句后,求解表达式,3,。,4.,返回第,2,步执行。,此处无,;,for,语句一般应用形式,:,for(,循环变量赋初值,;,循环条件,;,循环变量增值,),循环体语句,说明:,for,语句中,表达式,1,、表达式,2,、表达式,3,类型任意,都可省略,但分号;不可省,无限循环,:for(;),for,语句可以转换成,while,结构,表达式,1;,while(,表达式,2),循环体语句;,表达式,3;,例 用,for,循环求,#include,void,main(void,),int i,sum=0;,for(,i=1,;,i=100,;,i+,),sum+=i;,printf(%d,sum,);,此处无,;,例:,#include,void,main(void,),int,i=0;,for(i=0;i10;i+),putchar(a+i,);,运行结果:,abcdefghij,例:,#include,void,main(,void,),int i=0;,for(;i10;i+),putchar(a+i,);,例,:#include,void,main(,void,),int i=0;,for(;i10;),putchar(a+(i,+);,例,:#include,void,main(,void,),int i=0;,for(;i10;putchar(a+i),i+),;,省略表达式,1,省略表达式,1,、,3,省略循环体,/*c5_7.c*/,void,main(,void,),int i,j,k;,for(,i=0,j=100,;i=,j;,i+,j-),k=i+j;,printf(%d+%d,=%dn,i,j,k);,/*c5_8.c*/,#include,void,main(,void,),char c;,for(;(c=,getchar,()!=n;),printf(%c,c);,/*c5_9.c*/,#include,void,main(,void,),int i,c;,for(i=0;(c=,getchar,()!=n;i+=3),printf(%c,i+c);,表达式,1,、,3,为逗号表达式,结论:,for,语句的功能强大。,程序举例,1,分段函数如何处理小于,-5,和大于,5,的数,2,输入一个整数,求它的逆序,.,3,输入,5,个学生分数,统计及格的人数,y=,x -5x=0,x-1 0 x=5,程序举例,4,输入若干学生分数,以负数作为输结束标志,统计及格人数,5,输入若干字符,以回车作为输入结束标志,统计其中数字字符,英文字符,其他字符个数,.,6,判断一个数只否为水仙花数,(,水仙花数为,3,位数,各位数的立方之和等于该数本身,例如,153=1,3,+5,3,+3,3,),三种循环可互相嵌套,层数不限,外层循环可包含两个以上内循环,但不能相互交叉,嵌套循环的执行流程,(1)while(),while(),.,(2)do,do,while();,.,while();,(3)while(),do,while();,.,(4)for(;),do,while();,while(),.,内循环,外循环,内循环,嵌套循环的跳转,禁止:,从外层跳入内层,跳入同层的另一循环,向上跳转,6.6,循环的嵌套,1,2,3,4,5,6,7,8,9,1,2,4,3,6,9,9,18,27,36,45,54,63,72,81,.,i,j,/*c5_10.c*/,#include,void,main(,void,),int i,j;,for(i=1;i10;i+),printf(%4d,i);,printf(n-n,);,for(i=1;i10;i+),for(j,=1;j=,i;j,+),printf(j,=i)?%4dn:%4d,i*j);,程序举例,1,九九乘法表的打印,程序举例,打印如下图案,:,i10,printf,假(0),真(非0),i=1,j+,j=1,j=i,真(非0),假(0),i+,for(i=1;i10;i+),for(j,=1;j=,i;j,+),printf(j,=i)?%4dn:%4d,i*j);,外循环,内循环,6.7,几种循环的比较,三种循环均可处理同一问题;,for,和,while,语句为先判断后执行,,do-while,语句则先执行后判断;,do-while,和,while,语句多用于循环次数不定的情况,循环次数确定的用,for,语句更方便;,do-while,语句更适合第一次肯定执行的情况;,do-while,和,while,语句只有一个表达式,用于控制循环是否进行。,for,语句有三个表达式,不仅可以控制循环是否进行,而且能为循环变量赋初值及不断修改其值。故,for,语句功能更强,更灵活。,6.8.1,break,语句,一般形式:,break,;,功能:在循环语句和,switch,语句中,,,终止并跳出循环体或开关体,说明:,break,只能,终止并跳出,最近一层,的结构,break,不能用于循环语句和,switch,语句之外的任何其它语句之中,6.8 break,语句和,continue,语句,do,break;,.,表达式,假(0),真(非0),while,表达式,break;,假(0),真(非0),while,switch,表达式,语句组,1,break;,语句组,2,break;,语句组,n,break;,语句组,break;,.,const 1,const 2,const n,default,case,表达式,2,break;,.,假(0),真(非0),for,表达式,1,表达式,3,例,break,举例:输出圆面积,面积大于100时停止,#include,#define PI 3.14159,void,main(,void,),int r;,float area;,for(r=1;r100),break;,printf(r,=%d,area=%.2fn,r,area);,例,break,举例:,小写字母转换成大写字母,,,直至输入非,小写,字母,字符。,/*ch6-5-2.c*/,#include,void,main(,void,),char c;,while(1),c=,getchar,();,if(c=a&c=z),putchar(c-a+A,);,else,break;,6.8.2,continue,语句,一般形式:,continue,;,功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断,说明:,仅用于循环语句中,continue,语句仅结束本次循环,但,break,语句则是结束整个循环过程。,真(非0),do,continue;,.,表达式,假(0),while,表达式,2,continue;,.,假(0),真(非0),for,表达式,1,表达式,3,表达式,continue;,假(0),真
展开阅读全文