资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第五章 循环语句,10/2/2024,1,1,、,C,语言可实现循环的语句:,用,goto,和,if,构成循环,while,语句,do while,语句,for,语句,5.1,概 述,10/2/2024,2,说明:,不能用整数作标号,只能出现在,goto,所在函数内,且唯一,只能加在可执行语句前面,限制使用,goto,语句,goto,语句标号,;,.,标号:语句,;,goto,语句,一般,格式:,2,、,goto,语句,含义 : 无条件转移,10/2/2024,3,一般形式,:,while(,表达式,),循环体,语句;,流程图,:,表达式,循环体语句,假,(0),真,(,非,0),5.2 while,语句,10/2/2024,4,特点:先判断表达式,后执行循环体,几点说明:,循环体有可能一次也不执行,循环体可为任意类型语句,下列情况,退出,while,循环,条件表达式不成立(为零),循环体内遇,break,return,goto,无限循环,: while(1),循环体语句,;,10/2/2024,5,#include ,main(),int,i,sum=0;,i=1;,while(i=100), sum=sum+i;,i+;,printf(%d,sum,);,循环初值,循环终值,循环变量增值,循环条件,循环体语句,100,例: 用,while,循环求,n,n=1,10/2/2024,6,例: 显示,110,的平方,#include ,main(),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,10/2/2024,7,一般形式:,do,循环体语句;,while(,表达式,);,执行流程:,循环体语句,表达式,假,(0),真,(,非,0),5.3 Do-while,语句,10/2/2024,8,特点:先执行循环体,后判断表达式,说明:,至少执行一次循环体,dowhile,可转化成,while,结构,表达式,循环体,假,(0),真,(,非,0),赋初值,While,循环,循环体语句,表达式,假,(0),真,(,非,0),Do-While,循环,10/2/2024,9,#include ,main(),int,i,sum=0;,i=1;,do, sum+=i;,i+;,while(i=100);,printf(%d,sum,);,100,例: 用,dowhile,循环求,n,n=1,10/2/2024,10,例,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,);,10/2/2024,11,一般形式:,for(,表达式,1,;,表达式,2,;,表达式,3,),循环体语句;,执行流程:,表达式,2,循环体语句,假,(0),真,(,非,0),表达式,1,表达式,3,5.4 for,循环,10/2/2024,12,for,语句最简单应用形式,:,for(,循环变量赋初值;循环条件;循环变量增值),循环体语句;,说明:,for,语句中,表达式,1,表达式,2 ,表达式,3,类型任意,都可省略,但分号;不可省,无限循环,: for(;),for,语句可以转换成,while,结构,表达式,1;,while(,表达式,2),循环体语句;,表达式,3;,例 用,for,循环求,n,#include ,main(),int,i,sum=0;,for(i=1;i=100;i+),sum+=i;,printf(%d,sum,);,10/2/2024,13,循环的嵌套,三种循环可互相嵌套,层数不限,外层循环可包含两个以上内循环,但不能相互交叉,嵌套循环的执行流程,(1) while(), ,while(), ,.,(2) do, ,do, ,while( );,.,while( );,(3) while(), ,do, ,while( );,.,(4) for( ; ;), ,do, ,while();,while(), ,.,嵌套循环的跳转,禁止:,1.,从外层跳入内层,2.,跳入同层的另一循环,3.,向上跳转,5.5,循环嵌套,10/2/2024,14,例,:,我国古代数学家张丘建在,算经,中出了一道题“鸡翁一,,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,,问鸡翁、鸡母、鸡雏各几何?”,假设鸡翁数,为,x,,,鸡母数,为,y,,,鸡雏数,为,z,。列,方程为:,x+y+z=100 ,5x+3y+z/3=100,三个未知数,两个方程,问题解决之道:穷举法,穷举解决之道:循环,解题思路:,利用以前学过的数学知识列方程。,10/2/2024,15,算法如下:,假设,x,、,y,已知,由方程,可以得出,z=100-x-y,由条件可知,x,和,y,的值有限制,只可能在,0100,之间。需要用二重循环实现。每个,x,和,y,的组合都对应一个,z,的值,如果,x,,,y,和,z,的值满足,方程,,即为所求,结果,x+y+z=100 ,5x+3y+z/3=100,10/2/2024,16,程序实现,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,呢,10/2/2024,17,#include ,main(),int,x,y,z;,for(x=0;x=100;x+),for(y=0;y=0),printf(“%,d%d,%dn”,x,y,z,);,10/2/2024,18,#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,);,10/2/2024,19,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,10/2/2024,20,循环比较总结,1,、几种循环通常情况下可以互相替代,2,、,while,和,do-while,循环,只在,while,后面指定循环条件,在循环体内应包含使循环趋于结束的语句;,for,循环比较灵活,循环趋于结束语句可以用在表达式,3,,也可以在循环体语句中完成。,3,、,while,和,do-while,循环的循环变量初值应在,while,和,do-while,循环之前完成。,4,、三种循环都可以用,break,跳出,循环,用,continue,结束本次循环。,10/2/2024,21,1,、,break,语句,功能:在循环语句和,switch,语句中,终止并,跳出循环体或开关体,说明:,break,只能,终止并跳出最近一层的结构,break,不能用于循环语句和,switch,语句之外的任何其它语句之中,5.7 break,语句和,continue,语句,10/2/2024,22,表达式,break;,假,(0),真,(,非,0),while,do,break;,.,表达式,假,(0),真,(,非,0),while,表达式,2,break;,.,假,(0),真,(,非,0),for,表达式,1,表达式,3,10/2/2024,23,break,举例:输出圆面积,面积大于100时停止,#define PI 3.14159,main(),int,r;,float area;,for(r=1;r100),break;,printf(r,=%d,area=%.2fn,r,area);,10/2/2024,24,2,、,continue,语句,功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断,仅用于循环语句中,表达式,continue;,假,(0),真,(,非,0),while,真,(,非,0),do,continue;,.,表达式,假,(0),while,表达式,2,continue;,.,假,(0),真,(,非,0),for,表达式,1,表达式,3,10/2/2024,25,例:把,100200,之间的不能被,3,整除的数输出,main(),int,n;,for(n=100;n=200;n+),if(n%3=0),continue;,printf(“%d”,n,);,10/2/2024,26,例 判断,m,是否素数,读入,m,k=,m,i=2,当i,k,m,被,i,整除,真,假,用,break,结束循环,i=i+1,i,k+1,真,假,输出,:m”,是素数,”,输出,:m”,不,是素数,”,10/2/2024,27,#include ,math.h,main(),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 number,n,m,);,else,printf(%d,is not a prime number,n,m,);,10/2/2024,28,
展开阅读全文