《循环控制学习.pptx》由会员分享,可在线阅读,更多相关《循环控制学习.pptx(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、4.2.1 4.2.1 4.2.1 4.2.1 概述概述概述概述4.2.2 goto4.2.2 goto4.2.2 goto4.2.2 goto语句以及用语句以及用语句以及用语句以及用gotogotogotogoto语句构成循环语句构成循环语句构成循环语句构成循环4.2.3 4.2.3 4.2.3 4.2.3 用用用用whilewhilewhilewhile语句实现循环语句实现循环语句实现循环语句实现循环4.2.4 4.2.4 4.2.4 4.2.4 用用用用do-whiledo-whiledo-whiledo-while语句实现循环语句实现循环语句实现循环语句实现循环4.2.5 4.2.5
2、4.2.5 4.2.5 用用用用forforforfor语句实现循环语句实现循环语句实现循环语句实现循环4.2.6 4.2.6 4.2.6 4.2.6 循环的嵌套循环的嵌套循环的嵌套循环的嵌套4.2.7 4.2.7 4.2.7 4.2.7 几种循环的比较几种循环的比较几种循环的比较几种循环的比较4.2.8 break4.2.8 break4.2.8 break4.2.8 break语句与语句与语句与语句与continuecontinuecontinuecontinue语句语句语句语句4.2.9 4.2.9 4.2.9 4.2.9 程序举例程序举例程序举例程序举例 教教学学目目标标第1页/共42
3、页【教学目的与要求教学目的与要求】掌握三种循环语句的语法规则和功能,学掌握三种循环语句的语法规则和功能,学掌握三种循环语句的语法规则和功能,学掌握三种循环语句的语法规则和功能,学会用循环方法进行简单循环程序设计,熟悉并会用循环方法进行简单循环程序设计,熟悉并会用循环方法进行简单循环程序设计,熟悉并会用循环方法进行简单循环程序设计,熟悉并掌握常用的几种抽象循环的方法,能使用循环掌握常用的几种抽象循环的方法,能使用循环掌握常用的几种抽象循环的方法,能使用循环掌握常用的几种抽象循环的方法,能使用循环语句编写程序。语句编写程序。语句编写程序。语句编写程序。【教学重点与难点教学重点与难点】三三三三种种种
4、种循循循循环环环环语语语语句句句句,break break break break 与与与与 continue continue continue continue 语语语语句句句句的基本作用。的基本作用。的基本作用。的基本作用。第2页/共42页4.2.1 4.2.1 概述概述求求1 11 100的累计和。的累计和。根据已有的知识,可以用根据已有的知识,可以用“1+2+1+2+100+100”来求,但显然很繁琐。现在换个思路来考虑:来求,但显然很繁琐。现在换个思路来考虑:首先设置一个累计器首先设置一个累计器sumsum,其初值为,其初值为0 0,利用,利用sum+=nsum+=n来计算(来计算
5、(n n依次取依次取1 1、2 2、100100),),只要解决以下只要解决以下3 3个问题即可:个问题即可:(1 1)将)将n n的初值置为的初值置为1 1;(2 2)每执行)每执行1 1次次“sum+=nsum+=n”后,后,n n增增1 1;(3 3)当)当n n增到增到101101时,停止计算。此时,时,停止计算。此时,sumsum的值就是的值就是1 1100100的累计和。的累计和。第3页/共42页 根据已有的知识,单独实现每一步都不难。但是,根据已有的知识,单独实现每一步都不难。但是,根据已有的知识,单独实现每一步都不难。但是,根据已有的知识,单独实现每一步都不难。但是,由于需要经
6、常使用这种重复计算结构(称为循环结构)由于需要经常使用这种重复计算结构(称为循环结构)由于需要经常使用这种重复计算结构(称为循环结构)由于需要经常使用这种重复计算结构(称为循环结构),C C C C语言提供了语言提供了语言提供了语言提供了3 3 3 3条循环语句来实现,以简化、并规范条循环语句来实现,以简化、并规范条循环语句来实现,以简化、并规范条循环语句来实现,以简化、并规范循环结构程序设计。循环结构程序设计。循环结构程序设计。循环结构程序设计。在语言中,可用以下语句实现循环:在语言中,可用以下语句实现循环:在语言中,可用以下语句实现循环:在语言中,可用以下语句实现循环:(1)goto(1)
7、goto语句以及用语句以及用gotogoto语句构成循环语句构成循环 (2)(2)用用whilewhile语句实现循环语句实现循环 (3)(3)用用do-whiledo-while语句实现循环语句实现循环 (4)(4)用用forfor语句实现循环语句实现循环第4页/共42页gotogotogotogoto语句格式:语句格式:语句格式:语句格式:goto goto goto goto 标号标号标号标号标号的命名遵循标识符命名规则标号的命名遵循标识符命名规则标号的命名遵循标识符命名规则标号的命名遵循标识符命名规则功能:使系统转向标号所在的语句行执行。功能:使系统转向标号所在的语句行执行。功能:使系
8、统转向标号所在的语句行执行。功能:使系统转向标号所在的语句行执行。4.2.2 goto4.2.2 goto语句以及用语句以及用gotogoto语句构成循环语句构成循环第5页/共42页1100求和 用if 和goto语句构成循环#include void main()int i,s=0;i=1;loop:if(i=100)s+=i;i+;goto loop;printf(%d,s);s=0+1s=1+2=3s=3+3=6s=6+4s=4950+100=5050循环初值循环终值循环变量增值循环条件循环体第6页/共42页 注意:注意:结构化程序设计方法,主张限制使用结构化程序设计方法,主张限制使用结
9、构化程序设计方法,主张限制使用结构化程序设计方法,主张限制使用gotogotogotogoto语句。因为滥用语句。因为滥用语句。因为滥用语句。因为滥用gotogotogotogoto语句,将会导致程序结构语句,将会导致程序结构语句,将会导致程序结构语句,将会导致程序结构无规律、可读性差。无规律、可读性差。无规律、可读性差。无规律、可读性差。第7页/共42页 while while while while语句语句语句语句v一般形式:一般形式:一般形式:一般形式:while(while(while(while(表达式表达式表达式表达式)循环体语句循环体语句循环体语句循环体语句;v执行流程:执行流程
10、:执行流程:执行流程:表达式循环体假(0)真(非0)while4.2.3 4.2.3 用用whilewhile语句实现循环语句实现循环第8页/共42页v特点:先判断表达式,后执行循环体特点:先判断表达式,后执行循环体特点:先判断表达式,后执行循环体特点:先判断表达式,后执行循环体v说明:说明:说明:说明:l循环体有可能一次也不执行循环体有可能一次也不执行循环体有可能一次也不执行循环体有可能一次也不执行l循环体可为任意类型语句循环体可为任意类型语句循环体可为任意类型语句循环体可为任意类型语句l下列情况,退出下列情况,退出下列情况,退出下列情况,退出whilewhilewhilewhile循环循环
11、循环循环u条件表达式不成立(为零)条件表达式不成立(为零)条件表达式不成立(为零)条件表达式不成立(为零)u循环体内遇循环体内遇循环体内遇循环体内遇break,gotobreak,gotobreak,gotobreak,gotol无限循环无限循环无限循环无限循环:while(1):while(1):while(1):while(1)循环体循环体循环体循环体;第9页/共42页P114例4.2.2 用while循环求/*/*1100求和*/#include void main()int i,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);循环初值
12、循环终值循环变量增值循环条件循环体第10页/共42页 do whiledo whiledo whiledo while语句语句语句语句v一般形式:一般形式:一般形式:一般形式:do do do do 循环体语句;循环体语句;循环体语句;循环体语句;while(while(while(while(表达式表达式表达式表达式););););v执行流程:执行流程:执行流程:执行流程:do循环体表达式假(0)真(非0)while4.2.4 4.2.4 用用do-whiledo-while语句实现循环语句实现循环第11页/共42页v特点:先执行循环体,后判断表达式特点:先执行循环体,后判断表达式特点:先执
13、行循环体,后判断表达式特点:先执行循环体,后判断表达式v说明:说明:说明:说明:l至少执行一次循环体至少执行一次循环体至少执行一次循环体至少执行一次循环体ldowhiledowhiledowhiledowhile可转化成可转化成可转化成可转化成whilewhilewhilewhile结构结构结构结构expr循环体假(0)真(非0)循环体While循环第12页/共42页用dowhile循环1100求和#include void main()int i,sum=0;i=1;do sum+=i;i+;while(i=100);printf(%d,sum);第13页/共42页whilewhile和和d
14、o-whiledo-while比较比较/*/#include void main()int i,sum=0;scanf(%d,&i);do sum+=i;i+;while(i=10);printf(%d,sum);#include void main()int i,sum=0;scanf(%d,&i);while(i=10)sum+=i;i+;printf(%d,sum);第14页/共42页复习复习复习复习:1.while 1.while 1.while 1.while循环循环循环循环 2.do 2.do 2.do 2.do whilewhilewhilewhile循环循环循环循环#inclu
15、de stdio.hmain()int sum,i;sum=0;i=1;while(i=100)sum=sum+i;i=i+2;printf(sum=%d,sum);例例例例:计算计算计算计算1 1 1 1到到到到100100100100之内的奇数和之内的奇数和之内的奇数和之内的奇数和本题的特点是对于是否要继续执行循环,由给出的条件决定的.适合while循环.思考:计算前20个奇数之和,给出循环次数的题目用什么?while(while(while(while(表达式表达式表达式表达式)循环体语句循环体语句循环体语句循环体语句;do do do do 循环体语句;循环体语句;循环体语句;循环体语
16、句;while(while(while(while(表达式表达式表达式表达式););););第15页/共42页 一般形式:一般形式:一般形式:一般形式:for(for(for(for(表达式表达式表达式表达式1 1 1 1 ;表达式表达式表达式表达式2 2 2 2 ;表达式表达式表达式表达式3 3 3 3 )循环体语句;循环体语句;循环体语句;循环体语句;执行流程:执行流程:执行流程:执行流程:表达式表达式2循环体假(0)真(非0)for表达式表达式1表达式表达式34.2.5 4.2.5 用用forfor语句实现循环语句实现循环1)1)1)1)先求解表达式先求解表达式先求解表达式先求解表达式1
17、 1 1 12)2)2)2)求解表达式求解表达式求解表达式求解表达式2,2,2,2,值为真值为真值为真值为真则执行循环体则执行循环体则执行循环体则执行循环体,然后然后然后然后执行第执行第执行第执行第3 3 3 3步步步步;值为假值为假值为假值为假,则结束循环则结束循环则结束循环则结束循环,转到第转到第转到第转到第5 5 5 5步步步步.3)3)3)3)求解表达式求解表达式求解表达式求解表达式3 3 3 34)4)4)4)转回第转回第转回第转回第2 2 2 2步继续执行步继续执行步继续执行步继续执行5)5)5)5)循环结束循环结束循环结束循环结束,执行执行执行执行forforforfor语语语语
18、句后面的程序句后面的程序句后面的程序句后面的程序.第16页/共42页forforforfor语句一般应用形式语句一般应用形式语句一般应用形式语句一般应用形式:for(for(for(for(循环变量赋初值;循环条件;循环变量增值循环变量赋初值;循环条件;循环变量增值循环变量赋初值;循环条件;循环变量增值循环变量赋初值;循环条件;循环变量增值)循环体语句;循环体语句;循环体语句;循环体语句;i=1;i=1;while(i=100)while(i=100)sum=sum+isum=sum+i;i=i+2;i=i+2;For(i=1;i=100;i=i+2)For(i=1;i=100;i=i+2)s
19、um=sum+isum=sum+i;解思考题解思考题解思考题解思考题:计算前计算前计算前计算前20202020个奇数和个奇数和个奇数和个奇数和.第17页/共42页例:例:#include#include main()main()int i=0;int i=0;for(i=0;i10;i+)for(i=0;i10;i+)putchar(a+i);putchar(a+i);运行结果:abcdefghij例:例:#include#include main()main()int i=0;int i=0;for(;i10;i+)for(;i10;i+)putchar(a+i);putchar(a+i);
20、例:例:#include#include main()main()int i=0;int i=0;for(;i10;putchar(a+i),i+)for(;i10;putchar(a+i),i+);第18页/共42页 说明:说明:说明:说明:lforforforfor语句中语句中语句中语句中表达式表达式表达式表达式1,1,1,1,表达式表达式表达式表达式2,2,2,2,表达式表达式表达式表达式3 3 3 3 类型任意,都可省略,类型任意,都可省略,类型任意,都可省略,类型任意,都可省略,循环体也可循环体也可循环体也可循环体也可省略省略省略省略,但但但但分号;不可省分号;不可省分号;不可省分号
21、;不可省l无限循环无限循环无限循环无限循环:for(;):for(;):for(;):for(;)lforforforfor语句可以转换成语句可以转换成语句可以转换成语句可以转换成whilewhilewhilewhile结构结构结构结构例例例例2:2:2:2:输出所有的输出所有的输出所有的输出所有的”水仙花数水仙花数水仙花数水仙花数”,”水仙花数水仙花数水仙花数水仙花数指的是一个指的是一个指的是一个指的是一个3 3 3 3位数位数位数位数,其各位数字立方和等于其各位数字立方和等于其各位数字立方和等于其各位数字立方和等于该数本身该数本身该数本身该数本身.第19页/共42页(1 1 1 1)循环语
22、句的循环体内,又包含另一个)循环语句的循环体内,又包含另一个)循环语句的循环体内,又包含另一个)循环语句的循环体内,又包含另一个完整的循环结构,称为循环的嵌套。循环嵌套的完整的循环结构,称为循环的嵌套。循环嵌套的完整的循环结构,称为循环的嵌套。循环嵌套的完整的循环结构,称为循环的嵌套。循环嵌套的概念,对所有高级语言都是一样的。概念,对所有高级语言都是一样的。概念,对所有高级语言都是一样的。概念,对所有高级语言都是一样的。(2 2 2 2)forforforfor语句和语句和语句和语句和whilewhilewhilewhile语句允许嵌套,语句允许嵌套,语句允许嵌套,语句允许嵌套,do-do-d
23、o-do-whilewhilewhilewhile语句也不例外。语句也不例外。语句也不例外。语句也不例外。4.2.6 4.2.6 循环的嵌套循环的嵌套第20页/共42页循环的嵌套循环的嵌套循环的嵌套循环的嵌套vv三种循环可互相嵌套三种循环可互相嵌套三种循环可互相嵌套三种循环可互相嵌套,层数不限层数不限层数不限层数不限vv外层循环可包含两个以上内循环外层循环可包含两个以上内循环外层循环可包含两个以上内循环外层循环可包含两个以上内循环,但不能相互交叉但不能相互交叉但不能相互交叉但不能相互交叉vv嵌套循环的执行流程嵌套循环的执行流程嵌套循环的执行流程嵌套循环的执行流程 1)while()while(
24、).(2)do do while();.while();3)while()do while();.(4)for(;)do while();while().内循环外循环内循环vv嵌套循环的跳转嵌套循环的跳转嵌套循环的跳转嵌套循环的跳转禁止:禁止:禁止:禁止:l l从外层跳入内层从外层跳入内层从外层跳入内层从外层跳入内层l l跳入同层的另一循环跳入同层的另一循环跳入同层的另一循环跳入同层的另一循环l l向上跳转向上跳转向上跳转向上跳转第21页/共42页循环嵌套,输出九九表循环嵌套,输出九九表123456789123456789246810121416183691215182124279182736
25、4554637281.ij#include#include void main()void main()int i,j;int i,j;for(i=1;i10;i+)for(i=1;i10;i+)printf(%4d,i);printf(%4d,i);printf(n-n);printf(n-n);for(i=1;i10;i+)for(i=1;i10;i+)for(j=1;j10;j+)for(j=1;j10;j+)printf(%4dn,i*j);printf(%4dn,i*j);printf(“n”)printf(“n”)第22页/共42页i10printf假(0)真(非0)i=1j+j=
26、1j10真(非0)假(0)i+for(i=1;i10;i+)for(j=1;j10;j+)printf(%4dn,i*j);外循环内循环第23页/共42页4.2.7 4.2.7 几种循环的比较几种循环的比较(1)(1)(1)(1)四种循环都可以用来处理同一问题,一般情四种循环都可以用来处理同一问题,一般情四种循环都可以用来处理同一问题,一般情四种循环都可以用来处理同一问题,一般情况下它们可以互相代替。况下它们可以互相代替。况下它们可以互相代替。况下它们可以互相代替。(2)while(2)while(2)while(2)while和和和和dodododowhilewhilewhilewhile循
27、环,只在循环,只在循环,只在循环,只在whilewhilewhilewhile后面指后面指后面指后面指定循环条件定循环条件定循环条件定循环条件,在,在,在,在循环体中应包含使循环趋于结束循环体中应包含使循环趋于结束循环体中应包含使循环趋于结束循环体中应包含使循环趋于结束的语句的语句的语句的语句(如如如如i+i+i+i+,或,或,或,或i=i+1i=i+1i=i+1i=i+1等等等等)。forforforfor循环可以在表达式循环可以在表达式循环可以在表达式循环可以在表达式3 3 3 3中包含使循环趋于结中包含使循环趋于结中包含使循环趋于结中包含使循环趋于结束的操作束的操作束的操作束的操作,甚至
28、可以将循环体中的操作全部放到,甚至可以将循环体中的操作全部放到,甚至可以将循环体中的操作全部放到,甚至可以将循环体中的操作全部放到表达式表达式表达式表达式3 3 3 3中。因此中。因此中。因此中。因此forforforfor语句的功能更强,凡用语句的功能更强,凡用语句的功能更强,凡用语句的功能更强,凡用whilewhilewhilewhile循环能完成的,用循环能完成的,用循环能完成的,用循环能完成的,用forforforfor循环都能实现循环都能实现循环都能实现循环都能实现。第24页/共42页(3)(3)(3)(3)用用用用whilewhilewhilewhile和和和和dodododowh
29、ilewhilewhilewhile循环时,循环变量初始循环时,循环变量初始循环时,循环变量初始循环时,循环变量初始化的操作应在化的操作应在化的操作应在化的操作应在whilewhilewhilewhile和和和和dodododowhilewhilewhilewhile语句之前完语句之前完语句之前完语句之前完成。而成。而成。而成。而forforforfor语句可以在表达式语句可以在表达式语句可以在表达式语句可以在表达式1 1 1 1中实现循环变量的中实现循环变量的中实现循环变量的中实现循环变量的初始化。初始化。初始化。初始化。(4)while(4)while(4)while(4)while循型、
30、循型、循型、循型、dodododowhilewhilewhilewhile循环和循环和循环和循环和forforforfor循环,可循环,可循环,可循环,可以用以用以用以用breakbreakbreakbreak语句跳出循环,用语句跳出循环,用语句跳出循环,用语句跳出循环,用continuecontinuecontinuecontinue语句结束语句结束语句结束语句结束本次循环本次循环本次循环本次循环。第25页/共42页 4.2.8 break4.2.8 break4.2.8 break4.2.8 break语句语句语句语句和和和和continuecontinuecontinuecontinue
31、语句语句语句语句 breakbreakbreakbreak语句语句语句语句 功能:在循环语句和功能:在循环语句和功能:在循环语句和功能:在循环语句和switchswitchswitchswitch语句中语句中语句中语句中,终止并跳出循环体或开关终止并跳出循环体或开关终止并跳出循环体或开关终止并跳出循环体或开关体体体体 说明:说明:说明:说明:breakbreakbreakbreak只能只能只能只能终止并跳出终止并跳出终止并跳出终止并跳出最近一层最近一层最近一层最近一层的结构的结构的结构的结构 breakbreakbreakbreak不能用于循环语句和不能用于循环语句和不能用于循环语句和不能用于
32、循环语句和switchswitchswitchswitch语句语句语句语句之外的任何其它语句之中之外的任何其它语句之中之外的任何其它语句之中之外的任何其它语句之中第26页/共42页exprbreak;假(0)真(非0)whiledobreak;.expr假(0)真(非0)while第27页/共42页expr2break;.假(0)真(非0)forexpr1expr3switchexpr语句组1break;语句组2break;语句组nbreak;语句组break;.const 1const 2const ndefaultcase 第28页/共42页例例 breakbreak举例:输出圆面积,面积
33、大于举例:输出圆面积,面积大于100100时停止时停止#define PI 3.14159main()int r;float area;for(r=1;r100)break;printf(r=%d,area=%.2fn,r,area);第29页/共42页例例 breakbreak举例:小写字母转换成大写字母举例:小写字母转换成大写字母,直至输入直至输入非字母字符非字母字符#include main()int i,j;char c;while(1)c=getchar();if(c=a&c=z)putchar(c-a+A);else break;第30页/共42页 continuecontinue
34、continuecontinue语句语句语句语句vv功能:结束本次循环,跳过功能:结束本次循环,跳过功能:结束本次循环,跳过功能:结束本次循环,跳过循环体中循环体中循环体中循环体中尚未执行的语句,尚未执行的语句,尚未执行的语句,尚未执行的语句,进行下一次是否执行循环体的判断进行下一次是否执行循环体的判断进行下一次是否执行循环体的判断进行下一次是否执行循环体的判断vv仅用于循环语句中仅用于循环语句中仅用于循环语句中仅用于循环语句中exprcontinue;假(0)真(非0)while真(非0)docontinue;.expr假(0)whileexpr2continue;.假(0)真(非0)for
35、expr1expr3第31页/共42页例例例例 求输入的十个整数中正数的个数及其平均值求输入的十个整数中正数的个数及其平均值求输入的十个整数中正数的个数及其平均值求输入的十个整数中正数的个数及其平均值#include main()int i,num=0,a;float sum=0;for(i=0;i10;i+)scanf(%d,&a);if(a=0)continue;num+;sum+=a;printf(%d plus integers sum:%4.2.0fn,num,sum);printf(Mean value:%4.2.2fn,sum/num);第32页/共42页4.2.9 4.2.9
36、程序举例程序举例t=1,pi=0,n=1.0,s=1当|t|1e-6pi=pi+tn=n+2s=-st=s/npi=pi*4输出pi分子:1,-1,1,-1分母:1,3,5,7,.第33页/共42页/*求PI*/#include#include main()int s;float n,t,pi;t=1;pi=0;n=1.0;s=1;while(fabs(t)=1e-6)pi=pi+t;n=n+2;s=-s;t=s/n;pi=pi*4;printf(pi=%10.6fn,pi);第34页/共42页例例例例2 2 2 2求求求求FibonacciFibonacciFibonacciFibonacc
37、i数列:数列:数列:数列:1 1 1 1,1 1 1 1,2 2 2 2,3 3 3 3,5 5 5 5,8 8 8 8,的前的前的前的前40404040个数个数个数个数f1=1,f2=1for i=1 to 20输出f1,f2f1=f1+f2f2=f2+f115342331597109467502551422935245782415781718553772584177111213938320405702887390881692138961041812865719641813462699227465632459863211449876765463683178112178309149303521
38、02334155第35页/共42页/*例例2 2求求FibonacciFibonacci数列数列*/#include main()long int f1,f2;int i;f1=1;f2=1;for(i=1;i=20;i+)printf(%12ld%12ld ,f1,f2);if(i%2=0)printf(n);f1=f1+f2;f2=f2+f1;第36页/共42页 例3 判断m是否素数读入mk=mi=2当ikm被i整除真假用break结束循环i=i+1ik+1真假输出:m”是素数”输出:m”不是素数”第37页/共42页#include#include main()int m,i,k;scan
39、f(%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);例3 判断m是否素数源代码第38页/共42页例4 求3200以内素数#include“stdio.h“void main()int ni,nj;for(ni=3;ni=200;ni+)for(nj=2;nj=ni)printf(“t%d“,ni);内循环外循环第39页/共42页例5 数字的倒序输出#include“stdio.h“main()int a,r;scanf(“%d”,&a);do r=a%10;printf(“%dt”,r);a=a/10;while(a!=0);第40页/共42页思考题1、如何求20!?(20!=1*2*3*20)2、如何求1!+2!+3!+20!3、找出1100之间的全部“同构数”,它们出现在它的平方数的右端。如:6的平方是36、6出现在36的右端,6就是一个同构数。4、用穷举算法解百马百担问题(有100匹马驮100担货,大马驮3担,中马驮2 担,两匹小马驮1担,问有大、中、小马各多少)第41页/共42页感谢您的观看!第42页/共42页
限制150内