C语言中 循环结构ppt课件_第1页
C语言中 循环结构ppt课件_第2页
C语言中 循环结构ppt课件_第3页
C语言中 循环结构ppt课件_第4页
C语言中 循环结构ppt课件_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章循环控制结构 1 本章知识点 while语句的一般形式及应用for语句的一般形式及应用do while语句的一般形式及应用多重循环结构的使用break语句和continue语句 2 5 1while语句 语句的一般形式如下 while 表达式 循环体语句说明 while语句属于 当型 循环 图5 1while语句流程图 说明 1 while是关键字 while后圆括号内的表达式一般是关系表达式或逻辑表达式 但也可以是C语言中任意合法的表达式 2 循环体语句可以是一条语句 也可以是多条语句 如果循环体语句包含多条语句 则需要用一对花括号 把循环体语句括起来 采用复合语句的形式 while 表达式 循环体语句 例5 1 求前100个自然数的和 includeintmain intn sum n 1 sum 0 变量赋初值 while n 100 sum sum n 累加求和 n 修改基本数据项n printf sum d n sum return0 5 需要注意的几个问题 1 累加求和算法 这个程序采用的算法思想称为累加求和 即 不断用新累加的值取代变量的旧值 最终得到求和结果 变量sum也叫 累加器 初值一般为0 2 必须给变量赋初值 3 正确判断条件的边界值 4 避免出现 死循环 5 可能出现循环体不执行 6 while后面圆括号内的表达式一般为关系表达式或逻辑表达式 但也可以是其它类型的表达式 例5 2 使用while语句求n includeintmain intn i 1 doublesum 1 printf 请输入一个正整数 scanf d 7 循环三要素之间的关系 循环变量赋初值 判断控制表达式和修改循环变量是所谓的 循环三要素 一般来说 进入循环之前 应该给循环变量赋初值 确保循环能够正常开始 在控制表达式中判断循环变量是否达到循环的终止值 在循环体中对循环变量进行修改 以使循环正常的趋向终止 在编写程序时要注意他们的位置关系 例5 3 编写程序 输入一个字符序列 直至换行为止 统计出大写字母 小写字母 数字 空格和其他字符的个数 intmain charch inta b c d e a b c d e 0 while ch getchar n if ch A 9 5 2for语句 for语句的一般形式如下 for 表达式1 表达式2 表达式3 循环体语句说明 for语句属于 计数 型循环 11 for语句流程图 For语句最常用 最简单的形式 for 循环变量赋初值 循环条件 循环变量增值 12 例5 1 求前100个自然数的和 includeintmain intn sum 0 for n 1 n 100 n sum sum n printf sum d n sum return0 例5 4 设n 30 编写程序 计算并输出S n 的值 S n 1 2 3 4 3 4 5 6 5 6 7 8 1 n 1 2n 1 2n 2n 1 2n 2 include includeintmain intn floats 0 for n 1 n 30 n s s pow 1 n 1 2 n 1 2 n 2 n 1 2 n 2 printf s n f s return0 13 关于for语句的几点说明 1 循环体语句可以是简单语句也可以是使用一对花括号括起来的复合语句 如果是一个语句 也可以和for写在一行上 这样使程序看起来更加简洁 如果循环体包含多条语句 最好是另起一行 采用一对花括号括起来的复合语句形式 增加程序的可读性 2 表达式的省略 for语句中的三个表达式均可以省略 但是两个分号不能省略 for 循环变量赋初值 循环条件 循环变量增值 for 表达式1 表达式2 表达式3 循环体语句 例5 5 编写程序 输出所有的水仙花数 水仙花数是指一个3位数 其各位数字的立方和等于该数本身 例如 153 13 53 33 153 所以153就是水仙花数 intmain inta b c i for i 100 i 999 i a i 100 b i 10 10 c i 10 if i a a a b b b c c c printf d n i printf n 15 例5 11 判断m是否为素数 程序分析 所谓素数 就是一个正整数 除了本身和1以外并没有任何其他因子 例如2 3 5 7就是素数 intmain intm i k flag 定义标志变量 scanf d 16 5 3do while语句 for语句的一般形式如下 do循环体语句While 表达式 说明 dowhile语句属于 直到型 循环 1 do while语句中 While 表达式 后面的分号是不能省略的 这一点是和while语句不一样的 2 do while语句是先执行循环体语句 后判断表达式 因此无论条件是否成立 将至少执行一次循环体 而while语句是先判断表达式 后执行循环体语句 因此 如果表达式在第一次判断时就不成立 则循环体一次也不执行 注意 1 在计算机解决实际问题时 常常会用到类似本程序的 穷举法 穷举法 解决的问题一般具有这种特点 如果问题有解 一组或多组 必定全在某个集合中 如果这个集合内无解 集合外也肯定无解 这样 在解决问题时 就可以将集合中的元素一一列举出来 验证是否为问题的解 本题就是一一验证100 999之间所有的数 最终找出答案 2 程序中在做是否相等关系判断 i a a a b b b c c c 使用到了关系运算符 而不是 后者是赋值运算符 在c语言中这两种运算符形式是不一样的 要注意区别 20 图5 5do while语句流程图 While语句和do while语句的比较 一般来说 对于同一个问题 使用While语句或do while语句结果是一样的 但有时并不一样 比较以下两段程序 21 includeintmain intn sum 0 scanf d includeintmain intn sum 0 scanf d intmain charc do c getchar while c A printf 校验成功 n return0 例5 6 编写程序 实现对用户输入口令的校验 用户输入的口令如果与预设口令不一致 则需要重新输入 直到与预设口令一致为止 voidmain doublen 1 0 d 1 0 pi 0 0 intsign 1 do pi pi d n n 2 sign sign 改变数据项的符号 d sign n 求出数据项 while fabs d 1 0e 6 pi 4 0 pi printf pi 10 7lf n pi 23 三种循环的比较 1 while和do while语句一般实现标志式循环 即无法预知循环的次数 循环只是在一定条件下进行 而for语句大多实现计数式循环 2 一般来说 while和do while语句的循环变量赋初值在循环语句之前 循环结束条件是while后面圆括号内的表达式 循环体中包含循环变量修改语句 一般for循环则是循环三要素集于一行 因此 for循环语句功能更强大 形式更简洁 使用更灵活 3 while和for是先测试循环条件 后执行循环体语句 循环体可能一次也不执行 而do while语句是先执行循环体语句 后测试循环条件 所以循环体至少被执行一次 5 4多重循环结构 嵌套循环 并列循环 交叉循环 错误 循环的嵌套是指一个循环语句的循环体内完整的包含另一个完整的循环结构 前述三种循环结构 while循环 for循环 do while循环 可以任意组合嵌套 循环的嵌套有双重循环嵌套和多重循环嵌套 但一般使用两重或三重的比较多 若嵌套层数太多 就降低了程序的可读性和执行效率 如果是多重循环 外循环和内循环应选用不同的循环控制变量 26 双重循环嵌套 嵌套层次数为2层的循环嵌套执行过程是 首先进行外层循环的条件判断 当外层循环条件成立时顺序执行外层循环体语句 遇到内层循环 则进行内层循环条件判断 并在内层循环条件成立的情况下反复执行内层循环体语句 当内层循环因循环条件不成立而退出后重新返回到外层循环并顺序执行外层循环体的其它语句 外层循环体执行一次后 重新进行下一次的外层循环条件判断 若条件依然成立 则重复上述过程 直到外层循环条件不成立时 退出双重循环嵌套 执行后面其它语句 例5 8 编写程序 输出1000以内所有的完数 如果一个整数的因子之和等于这个数本身 这个数就被称为完数 例如 1 2 3是6的因子 并且6 1 2 3 所以6是完数 程序分析 此题应该分成两步来做 第一步 判断一个数n是否为完数 可以定义一个变量s作为 累加器 此问题仍然需要用前面讲过的 穷举法 从1 n 1逐一去除n 如果能除尽 就说明是n的因子 把它累加到s上 可以选用for循环 第二步 外层循环对1000以内的所有正整数一一进行判断 利用第一步的方法 逐个判断n的因子之和s是否等于n 若相等 则显示输出 同样选用for循环 28 includeintmain inti n s for n 2 n 1000 n 外循环 s 0 for i 1 i n i 内循环求出n的所有因子之和 if n i 0 s i if n s 判断a是否等于所有因子之和 printf d n n return0 例5 9 打印九九乘法口诀表 程序分析 乘法口诀表的形式如下 1 1 11 2 22 2 41 3 32 3 63 3 91 4 42 4 83 4 124 4 16 1 9 92 9 183 9 274 9 365 9 456 9 547 9 638 9 729 9 81 includeintmain inti j for i 1 i 9 i 外循环控制输出行 for j 1 j i j 输出该行的内容 printf 2d d 2d j i i j printf n 每行结束后输出换行 return0 5 5break语句和continue语句 5 5 1break语句break语句可以使流程跳出switch结构 它也可以用在while语句 for语句和do while语句中 可使程序跳出本层循环结构 接着执行循环体下面的语句 其一般形式如下 break 33 例子 intr floatarea pi 3 14159 for r 1 r100 break printf r d area f n r area 说明 1 break语句只能用于while for和do while循环语句以及switch语句中 不能用于其他语句 2 如果break语句用在多重循环结构体中 使用break语句只能使程序退出break语句所在的最内层循环 5 5 2continue语句continue语句的作用是结束本次循环 即跳过循环体中下面尚未执行的语句 接着进行下一次是否执行循环体的判断 其一般形式如下 continue continue语句只能用于循环结构中 inti n score floatsum 0 aver printf 请输入学生的个数 scanf d 35 例5 10 输入若干学生的成绩 求平均值 5 5break语句和continue语句 continue语句的作用是结束本次循环 即跳过循环体中下面尚未执行的语句 接着进行下一次是否执行循环体的判断 其一般形式如下 continue 注意 continue语句只能用于循环结构中 对于while和do while语句 continue语句使程序结束本次循环 跳转到循环条件的判断部分 根据条件判断是否进行下一次循环 对于for语句 continue语句使程序不再执行循环体中下面尚未执行的语句 直接跳转去执行 表达式3 然后再对循环条件 表达式2进行判断 根据条件判断是否进行下一次循环 5 6应用程序举例 37 例5 12 从键盘输入两个正整数m和n 求它们的最大公约数和最小公倍数 方法一 根据最大公约数的数学定义 使用for循环查找即能整除m又能整除n的最大的数就是m n的最大公约数 intm n k max x y z printf inputmandn n scanf d 方法二 辗转相除法 首先定义一个变量r 用来存储m除以n的余数 Step1 将两个数中的大者放在m中 小者放在n中 Step2 求m除以n的余数r 即r m n Step3 若r不等于0 转Step4 若r等于0 则此时的n就是最大公约数 转Step5Step4 把n的值赋给m 把r的值赋给n 即mn nr 然后转Step2 Step5 跳出循环结构 执行循环结构的下一个语句 intm n r x y z k scanf d intf1 f2 f3 i f1 1 f2 1 printf 10d 10d f1 f2 for i 3 i 30 i 从第三项开始计算 f3 f1 f2 printf 10d f3 if i 5 0 printf n 每输出

温馨提示

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

评论

0/150

提交评论