资源描述
第五章 循环语句 1、C言语可实现循环的语句:言语可实现循环的语句:用用goto 和和 if 构成循环构成循环 while 语句语句 do while 语句语句 for 语句语句 5.1 概概 述述阐明:不能用整数作标号只能出如今goto所在函数内,且独一只能加在可执行语句前面限制运用goto语句 goto 语句标号;.标号:语句;2、goto语句语句 含义含义:无条件转移无条件转移v普通方式:while(表达式)循环体语句;v流程图:表达式表达式循环体语句循环体语句假假(0)真真(非非0)5.2 while语句语句v特点:先判别表达式,后执行循环体v几点阐明:v循环体有能够一次也不执行v循环体可为恣意类型语句v以下情况,退出while循环v条件表达式不成立为零v循环体内遇break,return,gotov无限循环:while(1)v 循环体语句;#include main()int i,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);循环初值循环初值循环终值循环终值循环变量增值循环变量增值循环条件循环条件循环体语句循环体语句 100例:用while循环求 n n=1例:例:显示显示110的平方的平方#include main()int i=1;while(i=10)printf(%d*%d=%dn,i,i,i*i);i+;运转结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100v普通方式:do 循环体语句;while(表达式);v执行流程:循环体语句循环体语句表达式表达式假(0)真(非0)5.3 Do-while语句语句v特点:先执行循环体,后判别表达式v阐明:v至少执行一次循环体vdowhile可转化成while构造表达式表达式循环体循环体假假(0)真真(非非0)赋初值赋初值While循环循环循环体语句循环体语句表达式表达式假假(0)真真(非非0)Do-While循环循环#include main()int i,sum=0;i=1;do sum+=i;i+;while(i=100);printf(%d,sum);100例:用dowhile循环求 n n=1例例 while和和dowhile比较比较#include main()int i,sum=0;scanf(%d,&i);do sum+=i;i+;while(i=10);printf(%d,sum);#include main()int i,sum=0;scanf(%d,&i);while(i=10)sum+=i;i+;printf(%d,sum);普通方式:for(表达式1;表达式2;表达式3)循环体语句;v执行流程:表达式表达式2循环体语句循环体语句假假(0)真真(非非0)表达式表达式1表达式表达式35.4 for循环循环vfor语句最简单运用方式:for(循环变量赋初值;循环条件;循环变量增值)循环体语句;v阐明:vfor语句中表达式1,表达式2,表达式3 类型恣意,都可省略,但分号;不可省v无限循环:for(;)vfor语句可以转换成while构造表达式表达式1;1;while(while(表达式表达式2)2)循环体语句;循环体语句;表达式表达式3;3;例 用for循环求n 1001nn#include main()int i,sum=0;for(i=1;i=100;i+)sum+=i;printf(%d,sum);循环的嵌套三种循环可相互嵌套,层数不限外层循环可包含两个以上内循环,但不能相互交叉嵌套循环的执行流程(1)while()while().(2)do do while();.while();(3)while()do while();.(4)for(;)do while();while().v嵌套循环的跳转v制止:v1.从外层跳入内层v2.跳入同层的另一循环v3.向上跳转5.5 循环嵌套循环嵌套例例:我国古代数学家张丘建在我国古代数学家张丘建在中出了一道题中出了一道题“鸡翁一,鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?问鸡翁、鸡母、鸡雏各几何?假设鸡翁数为假设鸡翁数为x,鸡母数为,鸡母数为y,鸡雏数为,鸡雏数为z。列方程为:。列方程为:x+y+z=100 5x+3y+z/3=100三个未知数,两个方程 问题处理之道:穷举法问题处理之道:穷举法 穷举处理之道:循环穷举处理之道:循环解题思绪:解题思绪:利用以前学过的数学知识列方程。利用以前学过的数学知识列方程。算法如下:算法如下:假设假设x、y知,由方程可以得出知,由方程可以得出z=100-x-y由条件可知由条件可知x和和y的值有限制,只能够在的值有限制,只能够在0100之间。需求用之间。需求用二重循环实现。每个二重循环实现。每个x和和y的组合都对应一个的组合都对应一个z的值,假设的值,假设x,y和和z的值满足方程,即为所求结果的值满足方程,即为所求结果 x+y+z=100 5x+3y+z/3=100程序实现程序实现1、定义、定义3个变量。用双个变量。用双for循环实现:循环实现:int x,y,z;for(x=0;x=100;x+)for(y=0;y=100;y+)z=100-x-y;2、利用、利用if语句判别语句判别x,y,z能否满足条件:能否满足条件:if(15*x+9*y+z=300)#include main()int x,y,z;for(x=0;x=100;x+)for(y=0;y=100;y+)z=100-x-y;if(15*x+9*y+z=300)printf(“%,d%d,%dn,x,y,z);为什么不是5*x+3*y+z/3=100呢#include main()int x,y,z;for(x=0;x=100;x+)for(y=0;y=0)printf(“%,d%d,%dn,x,y,z);#include main()int x,y,z;for(x=0;x=100;x+)for(y=0;y=100;y+)for(z=0;z=100;z+)if(15*x+9*y+z=300&x+y+z=100)printf(“%,d%d,%dn,x,y,z);5.6 几种循环的比较几种循环的比较#include main()int i,sum=0;i=1;do sum+=i;i+;while(i=100);printf(%d,sum);#include main()int i,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);#include main()int i,sum=0;for(i=1;i=100;i+)sum+=i;printf(%d,sum);100求 n n=1循环比较总结循环比较总结1、几种循环通常情况下可以相互替代、几种循环通常情况下可以相互替代2、while和和do-while循环,只在循环,只在while后面指定后面指定循环条件,在循环体内应包含使循环趋于终了循环条件,在循环体内应包含使循环趋于终了的语句;的语句;for循环比较灵敏,循环趋于终了语句循环比较灵敏,循环趋于终了语句可以用在表达式可以用在表达式3,也可以在循环体语句中完,也可以在循环体语句中完成。成。3、while和和do-while循环的循环变量初值应在循环的循环变量初值应在while和和do-while循环之前完成。循环之前完成。4、三种循环都可以用、三种循环都可以用break跳出循环,用跳出循环,用continue 终了本次循环。终了本次循环。1、break语句功能:在循环语句和switch语句中,终止并 跳出循环体或开关体阐明:break只能终止并跳出最近一层的构造break不能用于循环语句和switch语句之外的任何其它语句之中5.7 break语句和语句和continue语句语句表达式break;假(0)真(非0)whiledobreak;.表达式假(0)真(非0)while表达式2break;.假(0)真(非0)for表达式1表达式3break举例:输出圆面积,面积大于100时停顿#define PI 3.14159main()int r;float area;for(r=1;r100)break;printf(r=%d,area=%.2fn,r,area);2、continue语句功能:终了本次循环,跳过循环体中尚未执行的语句,进展下一次能否执行循环体的判别仅用于循环语句中表达式continue;假(0)真(非0)while真(非0)docontinue;.表达式假(0)while表达式2continue;.假(0)真(非0)for表达式1表达式3例:把100200之间的不能被3整除的数输出main()int n;for(n=100;n=200;n+)if(n%3=0)continue;printf(“%d,n);例 判别m能否素数读入mk=mi=2当ikm被i整除真假用break终了循环i=i+1ik+1真假输出:m是素数输出:m不是素数#include math.hmain()int m,i,k;printf(input a number:);scanf(%d,&m);k=sqrt(m);for(i=2;i=k+1)printf(%d is a prime numbern,m);else printf(%d is not a prime numbern,m);
展开阅读全文