第05章循环结构程序设计 全国计算机等级考试二级 C语言程序设计培训_第1页
第05章循环结构程序设计 全国计算机等级考试二级 C语言程序设计培训_第2页
第05章循环结构程序设计 全国计算机等级考试二级 C语言程序设计培训_第3页
第05章循环结构程序设计 全国计算机等级考试二级 C语言程序设计培训_第4页
第05章循环结构程序设计 全国计算机等级考试二级 C语言程序设计培训_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

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

文档简介

第五章循环结构程序设计 5 1while语句5 2do while语句5 3for语句5 4goto语句以及用goto语句构成的循环5 5break语句和continue语句5 6循环的嵌套5 7循环结构程序设计举例 在C语言中可以用以下语句来实现循环 1 用goto语句和if语句构成循环 2 用while语句 3 用do while语句 4 用for语句 循环 就是在给定的条件成立时反复执行某一程序段 被反复执行的程序段称为循环体 5 1while语句 真 非零 循环体 假 零 1 while语句的形式 while 表达式 循环体 2 while语句常称为 当型 循环语句 3 说明 先判断表达式 后执行语句 表达式同if语句后的表达式一样 可以是任何类型的表达式 循环体多于一句时 用一对 括起 while循环结构常用于循环次数不固定 根据是否满足某个条件决定循环与否的情况 编程求 S 1 2 3 100 0 S 1 2 100 S 1 S S 2 S S 100 S 作100次加法 S i S 累加器 计数器 i 1 s 0 while i 100 s s i i printf n1 2 3 100 d s 循环变量的初始化计数器的初始化 累加器的初始化 循环控制条件 累加 修改循环变量 循环语句的三要素 循环次数不固定的循环语句 例5 1 编程求 直到累加的和大于或等于10000为止 includevoidmain inti sum i 1 sum 0 while sum 10000 sum i i i printf n d sum d n i 1 sum 变量赋初值 循环条件 累加 改变循环条件 注意 表达式在判断前 必须要有明确的值 循环体中一般有改变条件表达式的语句 while 表达式 后面没有分号 例5 3用迭代法求方程f x x3 x 1的根 要求误差小于1e 6 迭代法是一种逐次逼近法 这种方法使用某个固定公式 迭代公式 反复校正根的近似值 使之逐步精确化 直至满足精度要求的结果 迭代法的求根过程分成两步 1 先提供根的某个猜测值 即所谓迭代初值 2 将迭代初值逐步加工成满足精度要求的根 迭代法的设计思想是 将隐式方程归结为计算一组显式公式 也就是说 迭代过程实质上是一个逐步显式化的过程 include stdio h include math h voidmain doublex0 x1 x0 0 0 x1 pow x0 1 1 3 0 while fabs x1 x0 1e 6 x0 x1 x1 pow x0 1 1 3 0 printf f n x1 国家等级考试练习 1 若有以下程序 main inty 10 while y printf y d n y 程序运行的结果是 a y 0b y 1c y 1d 死循环 B 2 有以下程序 main intx 0 y 5 z 3 while z printf d d d n x y z 程序执行后输出的结果是 3 2 1 3 有以下程序main intk 5 n 0 while k 0 switch k default break case1 n k case2 case3 n k k printf d n n 程序运行后的结果是 a 0b 4c 6d 7 D 4 有以下程序 若运行时从键盘输入18 11 则程序的输出结果是 main inta b printf Entera b scanf d d 5 以下程序的输出结果是 main intn 12345 d while n 0 d n 10 printf d d n 10 11 54321 5 2do while语句 1 do while的形式 do 循环体 while 表达式 2 do while语句常称为 直到型 循环语句 真 非零 循环体 假 零 3 说明 先执行语句 后判断表达式 第一次条件为真时 while do while等价 第一次条件为假时 二者不同 编程求 直到累加的和大于或等于10000为止 includevoidmain inti sum i 1 sum 0 do sum i i i while sum 10000 printf n d sum d n i 1 sum 变量赋初值 循环条件 累加 改变循环条件 注意 在if while语句中 表达式后面都没有分号 而在do while语句的表达式后面则必须加分号 do while和while语句相互替换时 要注意修改循环控制条件 国家等级考试练习 1 有以下程序段intn t 1 s 0 scanf d 为了使程序不陷入死循环 从键盘输入的数据应该是 a 任意正奇数b 任意负偶数c 任意正偶数d 任意负奇数 D 2 若变量已正确定义 有以下程序段i 0 doprintf d i while i printf d n i 其输出结果是 a 0 0b 0 1c 1 1d 死循环 B 3 执行下面程序段的结果是 intx 234 do printf 3d n x while x 234 5 3for语句 1 for的形式 for 初始表达式1 条件表达式2 循环表达式3 循环体 表达式1 用于循环开始前为循环变量设置初始值 表达式2 控制循环执行的条件 决定循环次数 表达式3 循环控制变量修改表达式 循环体语句 被重复执行的语句 表达式3 计算表达式1 循环体 零 非零 for的下一条语句 2 执行过程 for i 1 i 100 i sum sum i 例如 它相当于以下语句 i 1 while i 100 sum sum i i 表达式1 while 表达式2 表达式3 循环体 3 说明 三个表达式都可以是逗号表达式 三个表达式都是任选项 都可以省略 但要注意省略表达式后 分号间隔符不能省略 4 for语句中表达式省略的形式 1 for语句一般形式中的 表达式1 可以省略 如 sum 0 i 1 for i 100 i sum sum i 2 表达式2省略 即不判断循环条件 循环无终止地进行下去 如 for sum 0 i 1 i if i 100 break sum sum i 3 表达式3也可以省略 但此时保证循环能正常结束如 for sum 0 i 1 i 100 sum sum i i 4 可以省略表达式1和表达式3 只有表达式2 如 i 1 sum 0 for i 100 sum sum i i i 1 sum 0 while i 100 sum sum i i 相当于 while 1 循环体 即不设初值 不判断条件 循环变量不增值 无终止地执行循环体 5 三个表达式都可省略 如for 循环体 如 sum 0 i 1 for if i 100 break sum sum i i 相当于 6 循环体为空语句对for语句 循环体为空语句的一般形式为 for 表达式1 表达式2 表达式3 如 for sum 0 i 1 i 100 sum i i 国家等级考试练习 1 有以下程序main inti for i 1 i 40 i if i 5 0 if i 8 0 printf d i printf n 则执行后的输出结果是 a 5b 24c 32d 40 C 2 若有以下程序段 且变量已正确的定义和赋值for s 1 0 k 1 k n k s s 1 0 k k 1 printf s f n n s 请填空 使下面程序段的功能与之完全相同s 1 0 k 1 while s s 1 0 k k 1 printf s f n n s k n k 3 有以下程序 includemain inty 9 for y 0 y if y 3 0 printf d y 程序运行的结果是 a 741b 963c 852d 875421 C 4 设j为int型变量 则下面for循环语句的执行结果是 for j 10 j 3 j if j 3 j j j printf d j 74 1 在进入累加前先给累加器赋初值 一般为0 2 用循环语句实现累加 for 循环变量赋初值 循环条件 循环变量改变规律 3 循环体语句的设计 累加器当前值 累加器原值 循环变量当前值 典型例题分析 例5 4 求累加和1 2 3 1000 基本方法 属于 累加器 类型问题 累加器赋初值 求偶数和2 4 6 100 参考程序 voidmain longintk s s 0 for k 1 k 1000 k s s k printf s ld s 累加 思考 1 给累乘器赋初值 一般为1 2 用循环语句实现累乘 for 循环变量赋初值 循环条件 循环变量改变规律 3 循环体设计 累乘器当前值 累乘器原值 循环变量当前值 例5 5 求累乘积 如 1 2 3 100 基本方法 属于 累乘器 类型问题 累乘器赋初值 求n 1 2 3 n 参考程序 voidmain doubles 1 intk for k 1 k 100 k s s k printf s lf s 累乘 思考 例5 6判断一个数是否为素数 一个数x在 2 sqrt x 范围内没有因子 我们就称其为素数 质数 主要编程方法 循环变量终值法 标记变量法 include math h voidmain intx k scanf d 排除法 如果有因子 不再往下判断是否是素数 循环变量终值法 for k 2 k sqrt x k if x k 0 break if k sqrt x printf disaprime x elseprintf disnotaprime x 在判断范围内无因子 程序正常终止 有因子 程序非正常终止 include math h voidmain intx k f 1 scanf d 排除法 如果有因子 不再往下判断是否是素数 for k 2 k sqrt x k if x k 0 f 0 break if f 1 printf disaprime x elseprintf disnotaprime x 在判断范围内无因子 程序正常终止 有因子 程序非正常终止 标记变量法 编程方法 递推法 例 裴波那契数列的第1 2项分别为1 1 以后各项的值均是其前两项之和 求前30项菲波那契数 所谓递推法就是从初值出发 归纳出新值与旧值间的关系 直到求出所需值为止 新值的求出依赖于旧值 不知道旧值 无法推导出新值 数学上递推公式正是这一类问题 f1 1 f2 1 f3 2 f4 3 fn fn 1 fn 2 f1 第一个数f2 第二个数f3 第三个数f1 1 f2 1 f3 f1 f2 以后只要改变f1 f2的值 即可求出下一个数 f1 f2 f2 f3 f3 f1 f2 递推 voidmain longf1 1 f2 1 f3 intk 参考程序 printf ld t ld t f1 f2 for k 3 k 30 k f3 f1 f2 printf ld t f3 f1 f2 f2 f3 注意f1 f2 f3 x的类型 递推 1 break语句 1 语句形式 break 2 作用 结束break所在的switch语句 结束本层循环 跳出break所在的循环结构 5 5break语句和continue语句 例5 10 求300以内能被17整除的最大的数 include stdio h voidmain intx k for x 300 x 1 x if x 17 0 break printf x d n x 找到满足条件的最大数 结束循环 1 语句形式 continue 2 语句作用 结束本次循环 2 continue语句 3 语句执行流程 continue语句可以结束本次循环 即不再执行循环体中continue语句之后的语句 对于while和do while而言 转而执行条件的判断 对于for语句而言 转而执行表达式3 例5 11 求300以内能被17整除的所有整数 include stdio h voidmain intx k for x 1 x 300 x if x 17 0 continue printf d t x while 条件 语句A break 语句B 真 语句B 条件 语句A break 假 结束循环 4 break语句与continue语句的区别 至此位置 while 条件 语句A continue 语句B 真 语句B 条件 语句A continue 假 结束循环 至此位置 include stdio h voidmain inta b for a 1 b 1 a 10 break if b 3 1 b 3 continue printf d n a 例5 12 分析以下程序的运行结果 程序运行结果 4 国家等级考试练习 1 有以下程序main inti 0 s 0 for if i 3 i 5 continue if i 6 break i s i printf d n s 程序运行后的输出结果是 a 10b 13c 21d 死循环 D 2 有以下程序main inta 1 b for b 1 b 8 break if a 2 1 a 5 continue a 3 printf d n b 程序运行后的输出结果是 a 3b 4c 5d 6 B 3 有以下程序的运行结果是 main inti j for i 1 i 10 i if i 3 0 continue printf 3d i printf n a 12457810b 12345678910c 369d 123 A 在循环体语句中又包含有另一个完整的循环结构的形式 称为循环的嵌套 如果内循环体中又有嵌套的循环语句 则构成多重循环 5 6循环的嵌套 嵌套在循环体内的循环体称为内循环 外面的循环称为外循环 while do while for三种循环都可以互相嵌套 循环语句之间的关系 for i 1 i 3 i for j 1 j 3 j printf printf n 真 真 外循环初始条件 内循环初始条件 内循环体 外循环条件 假 内循环条件 假 内循环循环条件 外循环循环条件 循环结束 二重循环嵌套结构执行流程 国家等级考试练习 1 有以下程序main inti j for i 1 i 4 i for j i j 4 j printf d d d i j i j printf n 程序运行后的输出结果是 B a 1 1 11 2 21 3 32 1 22 2 43 1 3 b 1 1 11 2 21 3 32 2 42 3 63 3 9 c 1 1 11 2 22 2 4 1 3 32 3 63 3 9 d 1 1 12 1 22 2 43 1 33 2 63 3 9 2 有以下程序main inti j x 0 for i 0 i 2 i x for j 0 j 3 j if j 2 continue x x printf x d n x 程序运行后的输出结果是 a x 4b x 8c x 6d x 12 B 3 执行以下程序后 输出 的个数是 includemain inti j for i 1 i 5 i for j 2 j i j putchar 6 例5 13 输出图形 编程分析 采用双重循环 一行一行输出 每一行输出步骤 一般3步 例如本题 共4行 若行号用i表示 1 光标定位 输出空格代替 每行输出4 i个空格 3 每输完一行光标换行 n 2 输出图形 则每一行有2 i 1个 号 include stdio h voidmain inti j k for i 1 i 4 i for j 1 j 4 i j printf for k 1 k 2 i 1 k printf printf n 例5 7用0 9这十个数字可以组成多少无重复的三位数 编程方法 枚举法 按问题本身的性质 一一列举出该问题所有可能的解 并在逐一列举的过程中 检验每个可能解是否是问题的真正解 若是 我们采纳这个解 否则抛弃它 对于所列举的值 既不能遗漏也不能重复 include stdio h voidmain a b c代表百位 十位 个位 inta b c num 0 for a 1 a 9 a for b 0 b 9 b for c 0 c 9 c if a b 5 7循环结构程序设计举例 例5 14 求 include stdio h voidmain floats 0 f1 2 f2 1 f 1 t n 累加器赋初值 for n 1 n 10 n s s f f1 f2 累加器当前值 累加器原来的值 新的要加的数据 f f 1 t f2 f2 f1 f1 f1 t 为求下一个要加的数据做准备 printf s f n s 例5 15 输入任意一个整数 将其逆序输出 例如输入1234 输出4321 include stdio h voidmain longy n scanf ld 例5 16 猴子第一天摘下若干个桃子 当即吃了一半 又多吃了一个 以后每天早晨猴子都吃掉前一天剩下的一半多一个 到第5天时 猴子再去吃桃子时发现只剩下1个桃子 问第一天猴子摘了多少个桃子 include stdio h voidmain intx0 1 n x1 for n 4 n 1 n x1 x0 1 2 x0 x1 printf d x 例5 17 猜数游戏 任意设置一个整数 请用户从键盘上输入数据猜想设值的数是什么 告诉用户是猜大了还是小了 10次以内猜对 用户获胜 否则 告诉用户设置的数据是什么 include stdio h voidmain intnum 123 x n printf hint 0num printf bigger n if x num printf smaller n if n 11

温馨提示

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

评论

0/150

提交评论