版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、循环就是重复 时钟的循环是无限循环 循环是在满足一定条件时重复执行一段程序,问题:将任意若干大写字母转化为小写字母显示,算法:将处理一个字母时的方法扩展到处理多个字母,向后跳转,向前跳转,3,实现循环的方法( 四种):,1、用 if 语句和 goto 语句构成循环 2、用 while 语句 3、用 do - while 语句 4、用 for 语句,4,goto 语句标号,goto 语句,goto 语句的功能是无条件地转到标号所指的语句,goto语句的一般形式:,语句标号:用于定义程序中的某个位置 构成:标识符: 如:start:,破坏程序的结构,应避免使用,用 if - goto 语句构成循环
2、,#include void main ( ) int k = 1, s = 0; loop: if ( k = 3 ) s = s + k; k +; goto loop; printf (s =%dn,s); ,【例6.1】计算 s =,6,while 循环,while (表达式) 语句,用 while 语句实现当型循环,While语句的一般形式:,分析:这是一个累加求和问题 s = 1 + 2 +3,和的 新值,和的 当前值,求和项 当前值,【例6.1】计算 s =,s = 0 + 1 s = 1 + 2 s = 3 + 3,sk = sk-1 + k s = s + k,s = 0 s
3、 = s + 1 s = s + 2 s = s + 3,#include void main ( ) int k, s ; s = 0; k = 1; while ( k = 3 ) s = s + k; k+; printf ( s =%dn, s); ,#include void main ( ) int k, s ; s = 0; k = 1; while ( k = 3 ) s = s + k; k+; printf ( s =%dn, s); , 求和项增值 修改循环条件,while ( k = 3 ) s = s + k; k+; ,if ( k =3 ) s = s + k;
4、k+; if ( k =3 ) s = s + k; k+; if ( k =3 ) s = s + k; k+; ,? 有什么作用,【例6.2】 求任意两个正整数 m 和 n 的最大公约数和最小公倍数,1. 用辗转相除法求最大公约数 m 对 n 求余数为 a,若 a0,则 m n,n a,继续求余;否则 n 为最大公约数 例如,设 m=12, n=21,计算过程如下:,计算次数 被除数 除数 余数,1 12 2112,2,21,12,9,3,12,9,3,4,9,3,0,3,#include void main ( ) int m, n, m1, n1, a; printf (输入两个正整数
5、:); scanf (%d, %d, ,13,do-while语句,do 语句 while ( 表达式 ) ;,形式为:,do-while 语句用来实现直到型循环,不可省略! 切记切记 !,【例6.1】计算 s =,#include void main ( ) int k, s ; s = 0; k = 1; do s = s + k; k+; while ( k = 3); printf ( s =% dn, s); ,#include void main ( ) int k, s ; s = 0; k = 1; while ( k = 3 ) s = s + k; k+; printf (
6、 s =%dn, s); ,16,for 循环,表达式1在进入循环之前求解 表达式3是循环体的一部分,for 循环的一般形式:,for ( 表达式1; 表达式2; 表达式3 ) 语句,表达式1,;,表达式3,;,这个分号 不能移走,这个分号 不能丢掉,for ( 表达式1 ; 表达式2 ; 表达式3 ) 语句,表达式1可以移到 for语句的前边,表达式3可以移到 内嵌语句的后边,表达式2为空 值永远为真 成为死循环,说明,1. 表达式1省略时,应在 for 前给循环变量赋初值 如:k = 1; for ( ; k = 3 ; k+ ) s = s + k;,2. 表达式2省略时,将成为“死循环
7、” 需要在循环体中引入 break 语句以退出循环 如:for ( k =1; ; k+) if ( k 10 ) break; s += k; ,3. 表达式3省略时,循环体内应有使循环条件改变的语句 如:for ( k = 1; k = 10 ; ) s += k; k += 2; ,如:k = 1;k = 1; for ( ; k = 3; )while ( k = 3 ) s = s + k; s = s + k; k+;k+; ,4. 同时省略表达式1和表达式3,只有表达式2,相当于while语句,5. 表达式2一般是关系表达式或逻辑表达式,也可以是数值表达式或字符表达式,只要其值不
8、等于0 就执行循环体,如:for( k = 1; k - 4; k+) s = s + k; 当 k 的值等于4时终止循环。k - 4 是数值表达式。,#include void main ( ) char c; for ( ; (c = getchar ( ) != n; ) putchar (c ); putchar (n); ,读入一个字符,当它不是回车符时就输出。,【例6.4】读程序,判断程序的功能。,printf (n);,程序段1:for ( s = 0, k = 1; k = 3; k+ ) s = s + k;,程序段4 :内嵌语句写到表达式3前 for( s = 0, k =
9、 1; k = 3; ss + k, k+ );,程序段2 :s = 0; k = 1; 表达式1移到前面for ( ; k = 3; s = s + k , k+ );,程序段3 : for(s=0, k=1;k=3;) 表达式3移到后面s = s + k;k+;,【例6.1】计算 s =,程序段5:s = 0; k = 1; 表达式1和3均移出for( ; k = 3; ) s = s + k; k+; ,程序段6 :s = 0; 标准写法for( k = 1; k = 3; k+ ) s = s + k;,条件,条件 初始化,条件 修改,24,循环的嵌套,一个循环体内包含着另一个完整的循
10、环结构,称为循环嵌套 内嵌的循环中又可以嵌套循环,从而构成多重循环 三种循环都可以互相嵌套,25,几种嵌套形式:,(1)while 嵌套 while while ( ) . while ( ) ,(2) do-while 嵌套 do-while do do while( ); while( );,(3) for 嵌套 for for ( ; ; ) for ( ; ; ) ,(4) while 嵌套 do-while while ( ) do while ( ); ,(5) for 嵌套 while for (; ; ) while ( ) ,(6) do-while 嵌套 for do fo
11、r ( ; ; ) while ( );,【例6.5】 打印九九乘法口诀,#include void main ( ) int m, n; m = 1 ; while ( m =9 ) n = 1; while ( n = m ) printf (%1d%1d=%-4d, m, n, m*n ); n+; printf (n); m+; ,?,#include void main ( ) int m, n; for ( m =1; m =9 ; m+ ) for ( n = 1; n = m; n+ ) printf (%1d%1d=%-4d, m, n, m*n ); printf (n);
12、 ,29,几种循环的比较,while (表达式) 语句,do 语句 while (表达式),for (表达式1;表达式2;表达式3) 语句,(1) 循环的控制,(3) for 循环功能强,使用灵活 两个“界限不清”,使程序设计较随意,(4) 都可以用 break 语句结束循环 用 continue 语句结束本次循环,(2) 循环体的执行 while循环:先判断条件,循环体可能一次也不执行 do while循环:后判断条件,循环体至少执行一次,for (表达式1;表达式2;表达式3) 语句,31,break 语句,用 break 语句可以结束 switch 结构和三种循环,【例6.6】 判断整数
13、 m 是否为素数。,分析:素数m是不能被整数 r ( 1rm )整除的数,即如果m不是素数,则必然存在 r、t(1r、tm)使得 m = r t 成立,r 的取值范围可以缩小到 2 k = m。,#include #include void main ( ) int m, i, k; printf (输入一个整数:); scanf (%d, ,结束循环 break 总是与 if 一起使用,34,用 continue 语句结束本次循环,即忽略循环体中剩余的语句开始下一次循环,【例6.7】打印100200间所有不能被 3 整除的数,#include void main ( ) int n; for
14、 ( n = 100; n = 200; n+) if ( n%3 = 0) continue; printf (%d , n); ,continue 语句,能整除,不打印,35,程序举例,【例6.8】 用下面的公式计算的近似值,直到最后一项的绝对值小于 10-4 为止。, 1 1 1 = 1 - + - + 4 3 5 7,分析: 1 1 累加公式为:pi = pi +( - ) n n+2 其中n = 1、5、9、,pi 求和结果,其初值为1,n 初值为1,每次增加 4,t1 第一项,值为 1/(n-2),t2 第二项,值为1/n 初值为1,使条件为真,| t2 |10-4 循环控制条件,
15、其中:,#include #include void main ( ) float pi, n, t1, t2; pi = 1; n = 1; t2 = 1; while( fabs ( t2 ) = 1e-4 ) n = n + 4; t1 = 1 / ( n - 2 ); t2 = 1 / n; pi = pi - t1 + t2; printf (=%.6fn, 4 * pi); ,n 改为整型如何?,用累加公式: ( -1 ) n+1 s = n = 1 2n - 1 重新设计该程序。,【例6.9】 用下面的递推公式,求 Fibonacci 数列1,1,2,3,5,8的前40项。 F1
16、 = 1n 1 F2 = 1n 2 Fn = Fn-1 + Fn-2n 3,分析:,(1) F1、F2 直接赋值并输出,(2) 进行 19 次循环,每次计算并输出两项,注意:此数列增长很快,宜用长整型。,(3) 计算 F3 = F1+ F2 由于此后 F1已无用,F3可存于 F1,即 F3 = F1 = F1+ F2,计算 F4 = F2+ F3 同样,F3已在 F1中,F4可存于F2,即 F4 = F2 = F2 + F3 = F2 + F1,依此类推,计算出F5、F6直至F39、F40,#include void main ( ) int i; long int f1, f2; f1 =
17、1; f2 = 1; printf (%16ld%16ld, f1, f2 ); for ( i = 2; i = 20; i+) f1 = f1 + f2; f2 = f2 + f1; printf (%16ld%16ld, f1, f2 ); if ( i % 2 = 0 ) printf (n); ,【例6.10】 求100200之间的全部素数。,分析:判断m是否为素数(例5.6) #include #include void main ( ) int m, i, k; printf (输入一个整数:); scanf (%d, else printf (%d不是素数n, m); ,for
18、 ( m = 101; m 200; m = m + 2 ) ,if ( i k )printf (%6d, m ); ,#include #include void main ( ) int m, i, k, n = 0; for ( m = 101; m k ) printf (%6d, m); n+; ,【例6.11】张丘建的“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何 ?,分析:cocks + hens + chicks =100 5 * cocks +3 * hens + chicks/3 = 100 易知:0cocks19、0hens33、 0chicks100,解题思路:依次取 cocks 的值域中的值,再解方程组求其余两数,cocks = 0 当cocks19时 试算 hens、chicks cocks 加1 ,cocks = 0 当cocks19时 hens = 0 当hens33时 试算 c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年辽宁省庄河市高二生物下册期末考试检测卷及完整答案【易错题】
- 2025年云南省弥勒市高二生物下册期末考试模拟卷含答案(培优B卷)
- 2025年江苏省海门市高二生物下册期末考试考试卷及参考答案(B卷)
- 2026年辽宁省调兵山市高二生物下册期末考试检测卷【含答案】
- 2026年河北省涿州市高二生物下册期末考试模拟卷附答案(B卷)
- 2026年云南省弥勒市高二生物下册期末考试检测卷含完整答案【夺冠】
- 2025年江西省德兴市高二生物下册期末考试测试卷附答案【培优】
- 2026年江苏省东台市高二生物下册期末考试考试卷及完整答案(名师系列)
- 2026年辽宁省灯塔市高二生物下册期末考试检测卷及答案【新】
- 2025年黑龙江省北安市高二生物下册期末考试模拟卷及参考答案(培优)
- 2025-2026学年八年级语文下学期期末模拟卷及答案
- 湖南省永州市2025-2026学年高一下学期期末考试数学自编试卷(人教A版)(原卷版)
- 端午节父亲节双节主题班会课件
- 2025-2026学年度江苏省无锡市七年级下学期期末测试模拟卷(含答案)
- 铁路专用线勘察测量方案
- 城市公交车辆日常安全例检项目及流程
- 2026上海农林职业技术学院公开招聘8名笔试参考试题及答案解析
- 2025年辽宁高中学业水平合格性考试化学试卷真题(含答案详解)
- 2026年麻风病防治知识竞赛复习押题宝典题库附答案详解(预热题)
- 2025年生殖医学(副高)高级职称考试题库及答案
- DB35T 2290-2026 非物质文化遗产 福州茉莉花茶窨制工艺
评论
0/150
提交评论