循环控制熟练掌握forwhiledowhile三种循环结构掌握循环的嵌套课件

上传人:txadgkn****dgknqu... 文档编号:241977351 上传时间:2024-08-08 格式:PPT 页数:52 大小:430.33KB
返回 下载 相关 举报
循环控制熟练掌握forwhiledowhile三种循环结构掌握循环的嵌套课件_第1页
第1页 / 共52页
循环控制熟练掌握forwhiledowhile三种循环结构掌握循环的嵌套课件_第2页
第2页 / 共52页
循环控制熟练掌握forwhiledowhile三种循环结构掌握循环的嵌套课件_第3页
第3页 / 共52页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,a,*,1,第六章 循环控制,熟练掌握,for、while、do_while,三种循环结构,掌握循环的嵌套,学习要点,学习建议,难点,循环的嵌套,break,和,continue,语句的正确使用,上机编程,设计简单的循环结构,注意设计错误并调试,1,a,第六章 循环控制熟练掌握for、while、do_while,第六章 循环控制,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,a,第六章 循环控制6.1 概述2a,6.1,循环概述,一般需要使用循环的情况是:,有重复的操作(循环体);,循环次数可以控制,例 有,60,个学生,将成绩在,80,分以上者的学号和成绩打印出来,.,什么是循环?,为什么要使用循环?,n,表示学生学号,,n,i,代表第,i,个学生的学号;,g,表示学生的成绩,,g,i,代表第,i,个学生的成绩,S1:i=1,S2:,如果,g,i,=80,则打印,n,i,、,g,i,S3:i=i+1,S4:,如果,i=60,返回,S2,,否则,算法结束,循环体,循环条件,循环控制变量,i,3,a,6.1循环概述一般需要使用循环的情况是:什么是循环?循环体循,6.1,循环概述,当型循环,直到型循环,在,C,语言中可以用下列语句实现循环.,goto,和,if,结合,while,for,do-while,return,4,a,6.1循环概述当型循环直到型循环在C语言中可以用下列语句实现,6.2,goto,语句以及用,goto,语句构成循环,注意,:结构化程序设计方法,主张限制使用,goto,语句。,无条件转向语句,格式:,goto,语句标号;,例:,goto loop1;,用途:,(1),与,if,语句一起构成循环结构;,(2)从多层循环的内层循环跳到外层循环,5,a,6.2 goto语句以及用goto语句构成循环注意:结构化,6.2,goto,语句以及用,goto,语句构成循环,例,6.1,求,#include,void main(,),int i=1,sum=0;,/*,初始化循环控制变量,i,和累计器,sum*/,printf(“sum=%dn”,sum);,return,loop:if(i=100),sum=sum+i;,i+;,goto loop;,6,a,6.2 goto语句以及用goto语句构成循环例6.1求#,6.3 while,语句,实现当型循环,一般形式如下:,while (,表达式)语句组,表达式,语句组,真,假,7,a,6.3 while 语句实现当型循环,一般形式如下:表,例,6.2,用,while,语句求,循环体内如果有一个以上的语句,则必须用 构成复合语句;,return,#include,void main()int i=1,sum=0;,/*,初始化循环控制变量,i,和累计器,sum*/,while(i=100),sum=sum+i;,i+;/*,循环控制变量,i,增,1*/,printf(“sum=%dn”,sum);,要有修改循环变量、使循环趋于结束的语句.,8,a,例6.2 用while语句求循环体内如果有一个以上的语句,6.4,用,do-while,语句实现循环,一般形式如下:,do,循环体语句,while(,表达式);,循环体语句,表达式,yes,no,9,a,6.4 用do-while语句实现循环一般形式如下:,例,6.3,用,do-while,语句求,#include,void main(),int i=1,sum=0;,do,sum=sum+i;/*,累加*,/i+;,while(i=100);/*,循环继续条件:,i=100*/,printf(“sum=%dn”,sum);,10,a,例6.3 用do-while语句求 10a,while,语句和用,do-while,语句的比较,:,在一般情况下,用,while,语句和用,do-while,语,句处理同一问题时,若二者的循环体部分是一,样的,它们的结果也一样。,但是如果,while,后面,的表达式一开始就为假,(0,值,),时,,两种循环的结,果是否相同呢,?,11,a,while语句和用do-while语句的比较:11a,#include,void main(),int sum=0,i;,scanf(“%d”,while(i=10),sum=sum+i;,i+;,printf(“sum=%dn”,sum);,#include,void main(),int sum=0,i;,scanf(“%d”,do,sum=sum+i;,i+;,while(i=10);,printf(“sum=%dn”,sum);,return,i=1,时,sum=55;,i=1,时,sum=55;,while,语句和用,do-while,语句的比较,:,i=1,i=11,时,sum=0;,i=11,时,sum=11,;,i=11,12,a,#include#include st,6.5,用,for,语句实现循环,for,语句的一般形式,for(,表达式1;表达式2;表达式3),语句,循环变量赋初值,循环终止条件,循环变量增量,for,语句最简单的应用形式,也就是最易理解的形式,.,13,a,6.5 用for语句实现循环for语句的一般形式 fo,执行过程如图所示。,(,1,)求解“变量赋初值”表达式。,(,2,)求解“循环继续条件”表达式。如果其值非,0,,执行(,3,);否则,转至(,4,)。,(,3,)执行循环体语句组,并求解“循环变量增值”表达式,然后转向(,2,)。,(,4,)执行,for,语句的下一条语句。,6.5 for语句,求表达式,1,表达式,2?,语句,表达式,3,yes,no,for(,表达式1;表达式2;表达式3),语句,循环变量赋初值,循环终止条件,循环变量增量,14,a,执行过程如图所示。6.5 for语句求表达式1表达式2?语,例,求,1,100,的累计和。,#include,void main(),int i,sum=0;,printf(sum=%dn,sum);,6.5 for语句,例,求,1,100,的累计和。,#include,void main(),int i,sum=0;,i=1;,do,sum=sum+i;,i+;,while(i=100);,printf(“sum=%dn”,sum);,for(i=1;i=100;i+),sum=sum+i;,15,a,例 求1100的累计和。#include std,例,求,1,100,的累计和。,#include,void main(),int i,sum=0;,for(i=1;i=100;i+),sum=sum+i;/*,实现累加*,/,printf(sum=%dn,sum);,6.5 for语句,for,循环执行流程:,i=1,i+-i=2,i100,退出循环,i=100,sum=0+1=1,16,a,例 求1100的累计和。#include std,#include,void main(),int i,sum=0;/*,将累加器,sum,初始化为,0*/,for(;i=100;i+),sum=sum+i;/*,实现累加*,/,printf(sum=%dn,sum);,for,语句应用说明:,for(i=1;i=100;i+),sum=sum+i;,表达式,1,可以省略,此时应在循环前初始化,分号不能省略,i=1;,循环变量赋初值,循环终止条件,循环变量增量,17,a,#include for语句应用说明:f,#include,void,main(),int i,sum=0;,i=1;,for(;i=100;),sum=sum+i;/*,实现累加*,/,printf(sum=%dn,sum);,for(i=1;i=100;i+),sum=sum+i;,表达式,3,可以省略,此时,应在循环体内进行处理,i+;,18,a,#include for(i=1;i,#include,void main(),int i,sum=0;,for(i=1,;,;i+),sum=sum+i;/*,实现累加*,/,printf(sum=%dn,sum);,for(i=1;i100)break;,/*break,语句的功能是退出它所在的循环*/,19,a,#include for(i=1;i,表达式1和表达式3可以是和初值、,增量无关的逗号表达式,for(,表达式1;表达式2;表达式3)语句,循环变量赋初值,循环终止条件,循环变量增量,sum=0;,for(i=1;i=100;i+),sum=sum+i;,for(,i=1,sum=0,;i=100;,sum=sum+i,i+,);,求表达式,1,表达式,2,语句,表达式,3,yes,no,20,a,表达式1和表达式3可以是和初值、for(表达式1;表达式2;,表达式1和表达式3可以是和初值、增量无关的逗号表达式,for(,表达式1;表达式2;表达式3)语句,循环变量赋初值,循环终止条件,循环变量增量,sum=0;,for(i=1;i=100;i+),sum=sum+i;,for(,i=1,sum=0,;i=100;,sum=sum+i,i+,);,for(,i=1,sum=0,;i=100;,sum=sum+i+,);,for(,i=1,sum=0,;i=100;,i+,sum=sum+i,),;,21,a,表达式1和表达式3可以是和初值、增量无关的逗号表达式for(,以下程序的输出结果,(!),main(),int n;,for(n=1;n=5;n+=2),printf(“n=%dn”,n);,main(),int n;,for(n=1;n=5;n+=2),;,printf(“n=%dn”,n);,运行结果,n=1,n=3,n=5,运行结果,n=7,22,a,以下程序的输出结果(!)main()main()运行结果运,for,语句和,while,语句是可以互换的,.,表达式,1;,while(,表达式,2),语句组,;,表达式,3;,for(,表达式,1;,表达式,2;,表达式,3),语句组,;,6.5 for语句,return,显然,用,for,语句简单、方便。,23,a,for 语句和while语句是可以互换的.6.5 for语,6.6,循环的嵌套,(,多重循环,),一个循环体内可以包含另一个完整的循环结构,称为循环的嵌套。,(1),while()(2)for(;)(3)do,do while()for(;),while(),while(),24,a,6.6 循环的嵌套(多重循环)一个循环体内可以包含另一个,1,1=1,2,1=2,2,2=4,9,1=9,9,2=18,9,3=27,9,9=81,.,.,循环的嵌套,(,多重循环,),输出第,9,行,(,用,for,如何实现?,),:,for(i=1;i=9;i+),printf(“9%d=%d ”,i,9*i),输出第,n,行,(,用,for,如何实现?,),:,for(i=1;i=,n,;i+),printf(“%d%d=%d ”,n,i,n,*i),例:编程,输出下图的九九乘法表。,25,a,11=121=222=491=992=1893=,1,1=1,2,1=2,2,2=4,9,1=9,9,2=18,9,3=27,9,9=81,.,.,循环的嵌套,(,多重循环,),输出乘法表,(,如何实现?,),:,for(n=1;n=9;n+),for(i=1;i=n;i+),printf(“%d%d=%d ”,n,i,n*i);,printf(“n”);,输出第,n,行:,for(i=1;i=,n,;i+),printf(“%d%d=%d ”,n,i,n,*i),;,for(9,次 ),for(n,次),问题,1,:外循环、内循环的循环次数是多少?,26,a,11=121=222=491=992=1893=,循环的嵌套,例:打印九九表,#,include stdio.h,void main(),int i,n;,for(n=1;n=9;n+),for(i=1;i=n;i+),printf(%d%d=%d,n,i,i*n);,printf(n);,for(9,次 ),for(n,次),1,1=1,2,1=2,2,2=4,9,1=9,9,2=18,9,3=27,9,9=81,.,.,27,a,循环的嵌套例:打印九九表for(9次 )for(n 次,*,*,*,*,*,*,*,*,循环的嵌套,分析:行的控制,i:18,*,的个数与当前行的关系,j=2*i-1,*,前面的空格,k,与行的关系:,开始时,第一行有,7,个空格,每多一行,少一个空格,k=8-i,while(i=8),for(k=1;k=8-i;k+),输出空格;,for(j=1;j=(2*i-1);j+),输出*,;,i+;,28,a,*循环的嵌套分析:行的控制 i:1828a,#include,main(),int i,j,k;,i=1;,while(i=8),for(k=1;k=8-i;k+),printf(“”);,for(j=1;j=(2*i-1);j+),printf(“*”);,printf(“n”);,i+;,循环的嵌套,return,*,*,*,*,*,*,*,*,29,a,#include循环的嵌套return,6.7,几种循环的比较,(2)for,语句的功能更强,凡用,while,循环能完成的,用,for,循环都能实现。,(1),四种循环都可以用来处理同一问题,一般情况下它们可以互相代替。但一般不提倡用,goto,型循环。,return,30,a,6.7几种循环的比较(1)四种循环都可以用来处理同一问题,为了使循环控制更加灵活,语言提供了,break,语句和,continue,语句。,1,一般格式:,break,;,continue,;,6.8 break 和continue,2,功能,(,1,),break,:强行结束循环,转向执行循环语句的下一条语句。,(,2,),continue,:结束,本次,循环。,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判断。,31,a,为了使循环控制更加灵活,语言提供了break语句和cont,break语句用来从循环体里退出,中止循环,continue用来跳过剩下的语句,回到循环开始,表达式1,表达式2,循环的下一个语句,语句,语句,break,n,y,y,n,表达式1,表达式2,循环的下一个语句,语句,语句,continue,n,y,y,n,break语句和continue语句,32,a,break语句用来从循环体里退出,中止循环表达式1表达式2循,3说明,(,1,),break,能用于循环语句和,switch,语句中,,continue,只能用于循环语句中。,6.8 break 和continue,(,2,)循环嵌套时,,break,和,continue,只影响包含它们的最内层循环,与外层循环无关。,33,a,3说明6.8 break 和continue(2)循环嵌,例,:,计算,r=1,2,.10,的圆面积,只到面积大于,100,为止,;,#include,void main(),int r;,float area;,for(r=1;r100.0),printf(“Area is%fn”,area);,break;,34,a,例:计算r=1,2,.10的圆面积,只到面积大于100为止,把,100200,之间的不能被,3,整除的打印出来,.,6.8 break 和continue,void main(),int n;,for(n=100;n=1e-6),pi=pi+t;n=n+2;,s=-s;,t=s/n;,pi=pi*4;,printf(“pi=%10.6fn”,pi);,下一个例程,36,a,6.9 程序举例例6.6用/41-1/3+1/5-,P129 6.1,输入两个正整数,m,和,n,,求其最大公约数和最小公倍数。,例:,m=4,n=6,其最大公约数为,i=2,最小公倍数46/2=12。,试探法,下一个例程,37,a,P129 6.1 输入两个正整数m和n,求其最大公约数和最,#include,void main(),int m,n,i;,printf(please input two integers n,mn);,scanf(%d,%d,if(n=1;i-),if(m%i=0),printf(“,最大公约数是:,%d.n,i);,printf,(“,最小公倍数是:,%d.n,m*n/i);,下一张,38,a,#includeif(nm)i,#include,void main(),int m,n,k,i,leap=1;,printf(please input two integers n,mn);,scanf(%d,%d,if(n=1)i-),if(m%i=0),i+;,下一张,printf(“,最大公约数是:,%d.n,i);,printf,(“,最小公倍数是:,%d.n,m*n/i);,39,a,#includeif(nE,w-a.,非字母字符不变.,思路:,1.建立循环,循环控制条件是什么?,40,a,例6.10 译密码。输入若干字符,若为字母字符则将它们变成其,例6.10 译密码。输入若干字符,若为字母字符则将它们变成其后的第四个字母,A-E,w-a.,非字母字符不变.,思路:,1.建立循环,循环结束以输入回车符为准,while(,(,c=getchar(),),!=n),循环体。,对比:,while(c=getchar()!=n),while(,(,c=getchar(),),!=n),41,a,例6.10 译密码。输入若干字符,若为字母字符则将它们变成其,例6.10 译密码。输入若干字符,若为字母字符则将它们变成其后的第四个字母,A-E,w-a.,非字母字符不变.,思路:,2.,判断输入是否是字母,a b.z,98.122,A B.Z,65 66.90,if(c=a&c=A&cE,w-a.,非字母字符不变.,思路:,4.,若变换后超出,z,时,要轮回.,(,如何判断是否要轮回?如何轮回?,),a b.,z ,98.122 123,A B.Z ,65 66.90 91,3.,变成其后的第四个字母?,c=c+4;,if(cZ&cz),c=c-26;,例:,W:87,Z:90,,W-A,则:,W426,43,a,例6.10 译密码。输入若干字符,若为字母字符则将它们变成其,例6.10 译密码。输入若干字符,若为字母字符则将它们变成其后的第四个字母,A-E,W-A.,非字母字符不变.,思路:,3.,变成其后的第四个字母,c=c+4;,4.,若变换后超出,z,时,要轮回.,if(cZ&cz)c=c-26,例:,W:87,Z:90,,W-A,则:,W426,2.,判断输入是否是字母,if(c=a&c=A&c=a&c=A&cZ,printf(“%c”,c);,abdEgW,efhIkA,45,a,#includeabdEgW45a,例,6.8,判断,m,是否素数。,素数,:,只能被,1,和其自已整除的数,算法思想,:,让,m,被,2,到 除,如果,m,能被,2,k,之中任何一个整数整除,则,说明,m,不是素数,,提前结束循环,此时,i,必然小于或等于,k,;如果,m,不能被,2,k,之间的任一整数整除,则在完成最后一次循环后,,i,还要加,1,,因此,i=k+1,,然后才终止循环。在循环之后判别,i,的值是否大于或等于,k+1,,若是,则表明未曾被,2,k,之间任一整数整除过,因此输出“是素数”。,46,a,例6.8 判断m是否素数。46a,例,6.8,判断,m,是否素数。,算法思想,:,让,m,被,2,到 除,如果,m,能被,2,k,之中任何一个整数整除,则,说明,m,不是素数,,提前结束循环,此时,i,必然小于或等于,k,;如果,m,不能被,2,k,之间的任一整数整除,则在完成最后一次循环后,,i,还要加,1,,因此,i=k+1,,然后才终止循环。在循环之后判别,i,的值是否大于或等于,k+1,,若是,则表明未曾被,2,k,之间任一整数整除过,因此输出“是素数”。,如图所示,:,47,a,例6.8 判断m是否素数。47a,#include,#include,void main(),int m,i,k;,scanf(%d,if(ik)printf(%d,是素数,n,m);,else printf(%d,不是素数,n,m);,k=sqrt(m);,for(i=2;ik)prin,循环的嵌套,例6.,9,把,100200,之间的素数打印出来,.,算法设计要点:,显然,只要设计出判断某数,m,是否是素数的算法,外面再套一个,for,循环即可。,49,a,循环的嵌套例6.9 把100200之间的素数打印出来.算法,#include,#include,main(),int i,m,k,n=0;,printf(“100-200,间的素数有:,n”);,for(m=,101,;m=200;,m=m+2,),k=sqrt(m);,for(i=2;ik),printf(“%d ”,m);n+;,if(n%10=0),printf(“n”);,例6.,9,把,100200,之间的素数打印出来,.,问题:,(1),为什么循环中是,m=m+2,(2),变量,n,的作用?,(3),做什么用的?,50,a,#include 例6.9 把10020,#include,#include,main(),int i,m,k,n=0;,printf(“100-200,间的素数有:,n”);,for(m=,101,;m=200;,m=m+2,),k=sqrt(m);,for(i=2;ik),printf(“%d ”,m);n+;,if(n%10=0),printf(“n”);,例6.,9,把,100200,之间的素数打印出来,.,运行结果:,100-200,间的素数有:,101 103 107 109 113 127 131 137 139 149,151 157 163 167 173 179 181 191 193 197,199,51,a,#include 例6.9 把10020,本章要点,本章介绍的三种循环语句一般可实现同一问题的求解,但有不同的特点。,while,for,属于“先判断,后执行循环”,而,do-while,语句则“先执行循环,后判断”。,if,和,goto,语句也能构成循环结构,但效率不如循环语句,且会破坏结构化程序,通常不使用该方法构成循环结构,break,和,continue,能改变循环的执行流程,注意两者的区别。,52,a,本章要点本章介绍的三种循环语句一般可实现同一问题的求解,但有,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!