第06章循环控制.ppt

上传人:王** 文档编号:529433 上传时间:2023-11-14 格式:PPT 页数:32 大小:686KB
下载 相关 举报
第06章循环控制.ppt_第1页
第1页 / 共32页
第06章循环控制.ppt_第2页
第2页 / 共32页
第06章循环控制.ppt_第3页
第3页 / 共32页
第06章循环控制.ppt_第4页
第4页 / 共32页
第06章循环控制.ppt_第5页
第5页 / 共32页
第06章循环控制.ppt_第6页
第6页 / 共32页
第06章循环控制.ppt_第7页
第7页 / 共32页
第06章循环控制.ppt_第8页
第8页 / 共32页
第06章循环控制.ppt_第9页
第9页 / 共32页
第06章循环控制.ppt_第10页
第10页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第06章循环控制.ppt》由会员分享,可在线阅读,更多相关《第06章循环控制.ppt(32页珍藏版)》请在优知文库上搜索。

1、第六章 循环控制 循环结构是一种重要的程序结构,它与顺序结构、分支结构循环结构是一种重要的程序结构,它与顺序结构、分支结构一起构成三大基本结构。一起构成三大基本结构。循环是相似重复循环是相似重复,重复是完成工作的重要方法重复是完成工作的重要方法:实例实例1.考试后老师要对考试情况进行汇总,计算出全班考试后老师要对考试情况进行汇总,计算出全班N个学生个学生的平均分。的平均分。实例实例2.到超市购物完毕发现小票上写着共计到超市购物完毕发现小票上写着共计22件件 实例实例3.听说某某书写得非常精彩,冲到书店按分类找到书架听说某某书写得非常精彩,冲到书店按分类找到书架 循环的共同点:循环的共同点:重复

2、发生前通常需要做一些准备工作。重复发生前通常需要做一些准备工作。被重复的操作是被重复的操作是“相似相似”的而不是的而不是“相同相同”的的(3)重复一定有终止的时候。重复一定有终止的时候。对重复操作进行控制对重复操作进行控制 条件判断条件判断条件判断条件判断操操 作作操操 作作C语言中提供了三种循环控制语句:语言中提供了三种循环控制语句:for语句、语句、while语句和语句和dowhile语句,前两个是语句,前两个是“先判断后循环先判断后循环”的模式,后一个是的模式,后一个是“先循环后判断先循环后判断”的模式。的模式。概述C语言可实现循环的语句:用goto 和 if 构成循环while 语句d

3、o while 语句for 语句goto语句及用goto构成循环goto语句一般格式:goto 语句标号;.标号:语句;v功能:无条件转移语句v说明:l不能用整数作标号l标号只能出现在goto所在函数内,且唯一l标号只能加在可执行语句前面l限制使用goto语句求求1100的累计和。的累计和。根据已有的知识,可以用根据已有的知识,可以用“1+2+100”来求解,但显然很繁来求解,但显然很繁琐。现在换个思路来考虑:琐。现在换个思路来考虑:首先设置一个累计器首先设置一个累计器sum,其初值为,其初值为0,利用,利用sum+=n来计算(来计算(n依次取依次取1、2、100),只要解决以下),只要解决以

4、下3个问题即可:个问题即可:(1)将)将n的初值置为的初值置为1;(2)每执行)每执行1次次“sum+=n”后,后,n增增1;(3)当)当n增到增到101时,停止计算。此时,时,停止计算。此时,sum的值就是的值就是1100的累计和。的累计和。根据已有的知识,单独实现每一步都不难。但是,由于需要根据已有的知识,单独实现每一步都不难。但是,由于需要经常使用这种重复计算结构(称为循环结构),经常使用这种重复计算结构(称为循环结构),C语言提供了语言提供了3条循环语句来实现,以简化、并规范循环结构程序设计。条循环语句来实现,以简化、并规范循环结构程序设计。在语言中,可用以下语句实现循环:在语言中,可

5、用以下语句实现循环:(1)用)用for语句。语句。(2)用)用do-while语句。语句。(3)用)用while语句。语句。(4)用用GOTO 语句语句Ch5_1.c例 用if 和goto语句构成循环,求1001nn/*ch5_1.c*/#include main()int i,sum=0;i=1;loop:if(i=100)sum+=i;i+;goto loop;printf(%d,sum);sum=0+1sum=1+2=3sum=3+3=6sum=6+4sum=4950+100=5050循环初值循环终值循环变量增值循环条件循环体Ch5_11.c例 从键盘输入一组数据,以0结束输入,求数据和

6、/*ch5_11.c*/#include main()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语句v一般形式:while(表达式)循环体语句;v执行流程:expr循环体假(0)真(非0)whilev特点:先判断表达式,后执行循环体v说明:l循环体有可能一次也不执行l循环体可为任意类型语句l下列情况,退出while循环u条件表达式不成立(为零)u循环

7、体内遇break,return,gotol无限循环:while(1)循环体;Ch5_2.c例 用while循环求 1001nn/*ch5_2.c*/#include main()int i,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);循环初值循环终值循环变量增值循环条件循环体Ch5_21.c例 显示110的平方/*ch5_21.c*/#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

8、=498*8=649*9=8110*10=100dowhile语句v一般形式:do 循环体语句;while(表达式);v执行流程:do循环体expr假(0)真(非0)whilev特点:先执行循环体,后判断表达式v说明:l至少执行一次循环体ldowhile可转化成while结构expr循环体假(0)真(非0)循环体While循环Ch5_3.c例 用dowhile循环求 1001nn/*ch5_3.c*/#include main()int i,sum=0;i=1;do sum+=i;i+;while(i=100);printf(%d,sum);Ch5_4.c例 while和dowhile比较/*

9、ch5_4.c*/#include main()int i,sum=0;scanf(%d,&i);do sum+=i;i+;while(i=10);printf(%d,sum);main()int i,sum=0;scanf(%d,&i);while(i=10)sum+=i;i+;printf(%d,sum);for语句v一般形式:for(expr1;expr2;expr3)循环体语句;v执行流程:expr2循环体假(0)真(非0)forexpr1expr3vfor语句一般应用形式:for(循环变量赋初值;循环条件;循环变量增值)循环体语句;v说明:lfor语句中expr1,expr2,exp

10、r3 类型任意,都可省略,但分号;不可省l无限循环:for(;)lfor语句可以转换成while结构expr1;while(expr2)循环体语句;expr3;例 用for循环求 1001nn#include main()int i,sum=0;for(i=1;i=100;i+)sum+=i;printf(%d,sum);【例例6.7】编写程序,用编写程序,用“辗转相除法辗转相除法”求两个正整数的最大公约求两个正整数的最大公约数。数。分析:分析:“辗转相除法辗转相除法”求最大公约数基于数学上的知识:对于两个求最大公约数基于数学上的知识:对于两个正整数正整数a和和b,记,记gcd(a,b)表示表

11、示a与与b的最大公约数,若的最大公约数,若a除以除以b的余数的余数是正整数是正整数c,则,则gcd(a,b)=gcd(b,c)。与普通的短除法求最大公约数。与普通的短除法求最大公约数相比,辗转相除法可以更快地求得结果。例如,用辗转相除法求相比,辗转相除法可以更快地求得结果。例如,用辗转相除法求gcd(3324,1044)的具体过程)的具体过程:33241044=3192这说明这说明3324与与1044的最大公约数就等于的最大公约数就等于1044与与192的最大公约数。求的最大公约数。求1044与与192的最大公约数可以再次利用辗转相除法,并把这一过程重复下的最大公约数可以再次利用辗转相除法,并

12、把这一过程重复下去,直到求得的余数为去,直到求得的余数为0。1044 192=584 192 84=224 84 24=312 24 12=20 最后一次的除数最后一次的除数12就是所求结果,即就是所求结果,即gcd(3324,1044)=12#include main()int a,b,c;printf(Input two integers(0):);scanf(%d%d,&a,&b);printf(gcd(%d,%d)=,a,b);while(b0)c=a%b;a=b;/*把刚才的除数放到把刚才的除数放到a中中*/b=c;/*把刚才的余数放到把刚才的余数放到b中中*/printf(%d,a

13、);(1)循环体中循环体中a=b的操作和的操作和b=c的操作能否颠倒次序?的操作能否颠倒次序?(2)能不能把程序中的后两个能不能把程序中的后两个printf合并到一起,写在合并到一起,写在while循环的后面?循环的后面?(3)从键盘输入的两个数前大后小是正常情况,如果前小后大程序还能求出正确从键盘输入的两个数前大后小是正常情况,如果前小后大程序还能求出正确结果吗?结果吗?(4)在例在例6.7中并没有对键盘输入两个整数的正确性进行判断,如果输入数据有问中并没有对键盘输入两个整数的正确性进行判断,如果输入数据有问题,比如输入的是负数或零,程序可能出现异常结果。你能否为该程序加上判断功题,比如输入

14、的是负数或零,程序可能出现异常结果。你能否为该程序加上判断功能?能?循环的嵌套v三种循环可互相嵌套,层数不限v外层循环可包含两个以上内循环,但不能相互交叉v嵌套循环的执行流程(1)while()while().(2)do do while();.while();(3)while()do while();.(4)for(;)do while();while().v嵌套循环的跳转禁止:l从外层跳入内层l跳入同层的另一循环l向上跳转Ch5_5.c例 循环嵌套,输出九九表1234567891234567892468101214161836912151821242791827364554637281.i

15、j/*ch5_5.c*/#include main()int i,j;for(i=1;i10;i+)printf(%4d,i);printf(n-n);for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?%4dn:%4d,i*j);i10printf假(0)真(非0)i=1j+j=1j10真(非0)假(0)i+for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?%4dn:%4d,i*j);外循环内循环为了使循环控制更加灵活,语言提供了为了使循环控制更加灵活,语言提供了break语句和语句和continue语句。语句。1一般格式:一

16、般格式:break;continue;2功能功能(1)break:强行结束循环,转向执行循环语句的下一条语句。:强行结束循环,转向执行循环语句的下一条语句。(2)continue:对于:对于for循环,跳过循环体其余语句,转向循循环,跳过循环体其余语句,转向循环变量增量表达式的计算;对于环变量增量表达式的计算;对于while和和do-while循环,跳过循循环,跳过循环体其余语句,但转向循环继续条件的判定。环体其余语句,但转向循环继续条件的判定。3break和和continue语句对循环控制的影响如图语句对循环控制的影响如图5-4所示。所示。4说明说明(1)break能用于循环语句和能用于循环语句和switch语句中,语句中,continue只能用只能用于循环语句中。于循环语句中。(2)循环嵌套时,)循环嵌套时,break和和continue只影响包含它们的最内层只影响包含它们的最内层循环,与外层循环无关。循环,与外层循环无关。break语句与语句与continue语句语句exprbreak;假(0)真(非0)whiledobreak;.expr假(0)真(非0)whileexpr2b

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

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