《循环控制》PPT课件.ppt

上传人:san****019 文档编号:20738881 上传时间:2021-04-17 格式:PPT 页数:32 大小:433.60KB
收藏 版权申诉 举报 下载
《循环控制》PPT课件.ppt_第1页
第1页 / 共32页
《循环控制》PPT课件.ppt_第2页
第2页 / 共32页
《循环控制》PPT课件.ppt_第3页
第3页 / 共32页
资源描述:

《《循环控制》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《循环控制》PPT课件.ppt(32页珍藏版)》请在装配图网上搜索。

1、第六章 循环控制 循环结构是一种重要的程序结构,它与顺序结构、分支结构 一起构成三大基本结构。 循环是相似重复 , 重复是完成工作的重要方法 : 实例 1. 考试后老师要对考试情况进行汇总,计算出全班 N个学 生的平均分。 实例 2. 到超市购物完毕发现小票上写着共计 22件 实例 3. 听说某某书写得非常精彩,冲到书店按分类找到书架 循环的共同点: 重复发生前通常需要做一些准备工作。 被重复的操作是“相似”的而不是“相同”的 (3) 重复一定有终止的时候。 对重复操作进行控制 条件判断 条件判断 操 作 操 作 C语言中提供了三种循环控制语句: for语句、 while语句和 do whil

2、e语句,前两个是“先判断后循环”的模式,后一个是 “先循环后判断”的模式。 概述 C语言可实现循环的语句: 用 goto 和 if 构成循环 while 语句 do while 语句 for 语句 goto语句及用 goto构成循环 goto语句一般格式: goto 语句标号 ; . 标号:语句 ; 功能:无条件转移语句 说明: 不能用整数作标号 标号只能出现在 goto所在函数内 ,且唯一 标号只能加在可执行语句前面 限制使用 goto语句 求 1 100的累计和。 根据已有的知识,可以用“ 1+2+100” 来求解,但显然很繁 琐。现在换个思路来考虑: 首先设置一个累计器 sum,其初值为

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

4、 语句 例 用 if 和 goto语句构成循环,求 /*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+1 sum=1+2=3 sum=3+3=6 sum=6+4 sum=4950+100=5050 循环初值 循环终值 循环变量增值 循环条件 循环体 例 从键盘输入一组数据,以 0结束输入,求数据和 /*ch5_11.c*/ #include main() int number,sum=0; read_loop: scanf(%d,

5、if(!number) goto print_sum; sum+=number; goto read_loop; print_sum: printf(The total sum is %dn,sum); while语句 一般形式 : while(表达式 ) 循环体语句; 执行流程 : expr 循环体 假 (0) 真 (非 0) while 特点:先判断表达式,后执行循环体 说明: 循环体有可能一次也不执行 循环体可为任意类型语句 下列情况,退出 while循环 条件表达式不成立(为零) 循环体内遇 break,return,goto 无限循环 : while(1) 循环体 ; 例 用 whi

6、le循环求 /*ch5_2.c*/ #include main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%d,sum); 循环初值 循环终值 循环变量增值 循环条件 循环体 例 显示 110的平方 /*ch5_21.c*/ #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 dowhile语句

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

8、 main() int i,sum=0; scanf(%d, do sum+=i; i+; while(i=10); printf(%d,sum); main() int i,sum=0; scanf(%d, while(i=10) sum+=i; i+; printf(%d,sum); for语句 一般形式: for(expr1 ; expr2 ; expr3) 循环体语句; 执行流程 : expr2 循环体 假 (0) 真 (非 0) for expr1 expr3 for语句一般应用形式 : for(循环变量赋初值;循环条件;循环变量增值 ) 循环体语句; 说明: for语句中 expr

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

10、数 是正整数 c,则 gcd(a,b)=gcd(b,c)。与普通的短除法求最大公约数 相比,辗转相除法可以更快地求得结果。例如,用辗转相除法求 gcd( 3324, 1044)的具体过程 : 3324 1044=3 192 这说明 3324与 1044的最大公约数就等于 1044与 192的最大公约数 。 求 1044与 192的最大公约数可以再次利用辗转相除法 , 并把这一过程重复下 去 , 直到求得的余数为 0。 1044 192= 5 84 192 84 = 2 24 84 24 = 3 12 24 12 = 2 0 最后一次的除数 12就是所求结果,即 gcd(3324,1044)=1

11、2 #include main( ) int a,b,c; printf(Input two integers ( 0) : ); scanf(%d%d, printf(gcd(%d,%d) = ,a,b); while(b0) c=a%b; a=b; /* 把刚才的除数放到 a中 */ b=c; /* 把刚才的余数放到 b中 */ printf(%d,a); (1) 循环体中 a=b的操作和 b=c的操作能否颠倒次序 ? (2) 能不能把程序中的后两个 printf合并到一起 , 写在 while循环的后面 ? (3) 从键盘输入的两个数前大后小是正常情况 , 如果前小后大程序还能求出正确

12、结果吗 ? (4) 在例 6.7中并没有对键盘输入两个整数的正确性进行判断 , 如果输入数据有 问题 , 比如输入的是负数或零 , 程序可能出现异常结果 。 你能否为该程序加上判 断功能 ? 循环的嵌套 三种循环可互相嵌套 ,层数不限 外层循环可包含两个以上内循环 ,但不能相互交叉 嵌套循环的执行流程 (1) while() while() . (2) do do while( ); . while( ); (3) while() do while( ); . (4) for( ; ;) do while(); while() . 嵌套循环的跳转 禁止: 从外层跳入内层 跳入同层的另一循环 向

13、上跳转 例 循环嵌套,输出九九表 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 9 18 27 36 45 54 63 72 81 . i 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); i10 printf 假 (0) 真 (非 0) i=1

14、 j+ j=1 j10 真 (非 0) 假 (0) i+ for(i=1;i10;i+) for(j=1;j10;j+) printf(j=9)?%4dn:%4d,i*j); 外循环 内循环 为了使循环控制更加灵活,语言提供了 break语句和 continue语句。 1一般格式: break; continue; 2功能 ( 1) break:强行结束循环,转向执行循环语句的下一条语句。 ( 2) continue:对于 for循环,跳过循环体其余语句,转向循 环变量增量表达式的计算;对于 while和 do-while循环,跳过循 环体其余语句,但转向循环继续条件的判定。 3 break和

15、 continue语句对循环控制的影响如图 5-4所示。 4说明 ( 1) break能用于循环语句和 switch语句中, continue只能用 于循环语句中。 ( 2)循环嵌套时, break和 continue只影响包含它们的最内层 循环,与外层循环无关。 break语句与 continue语句 expr break; 假 (0) 真 (非 0) while do break; . expr 假 (0) 真 (非 0) while expr2 break; . 假 (0) 真 (非 0) for expr1 expr3 switch expr 语句组 1 break; 语句组 2 br

16、eak; 语句组 n break; 语句组 break; . const 1 const 2 const n default case 例 break举例:输出圆面积,面积大于 100时停止 #define PI 3.14159 main() int r; float area; for(r=1;r100) break; printf(r=%d,area=%.2fn,r,area); continue语句 功能:结束本次循环,跳过 循环体中 尚未执行的 语句,进行下一次是否执行循环体的判断 仅用于循环语句中 expr continue; 假 (0) 真 (非 0) while 真 (非 0)

17、do continue; . expr 假 (0) while expr2 continue; . 假 (0) 真 (非 0) for expr1 expr3 例 求输入的十个整数中正数的个数及其平均值 /*ch5_12.c*/ #include main() int i,num=0,a; float sum=0; for(i=1;i=10;i+) scanf(%d, if(a=0) continue; num+; sum+=a; printf(%d plus integers sum :%6.0fn,num,sum); printf(Mean value:%6.2fn,sum/num); 程

18、序举例 t=1,pi=0,n=1.0,s=1 当 |t|1e-6 pi=pi+t n=n+2 s=-s t=s/n pi=pi*4 输出 pi 分子: 1, -1, 1, -1 分母: 1, 3, 5, 7, . 例 求 Fibonacci数列: 1, 1, 2, 3, 5, 8, 的前 40个数 f1=1,f2=1 for i=1 to 20 输出 f1,f2 f1=f1+f2 f2=f2+f1 1 5 34 233 1597 10946 75025 514229 3524578 24157817 1 8 55 377 2584 17711 121393 832040 5702887 390

19、88169 2 13 89 610 4181 28657 196418 1346269 9227465 63245986 3 21 144 987 6765 46368 317811 2178309 14930352 102334155 例 判断 m是否素数 读入 m k=m i=2 当 ik m被 i整除 真 假 用 break 结束循环 i=i+1 ik+1 真 假 输出 :m”是素数 ” 输出 :m”不 是素数 ” 例:编程序 sushu.c,求 100-200之间所的的素数。 #include math.h #include stdio.h main() int m,k,i,n=0; for(m=101;m=200;m+=2) k=sqrt(m); for(i=2;i=k+1) printf( %d,m);n+; if (n%10=0) printf(n); printf(n);

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


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