第二章(2) 循环控制.ppt_第1页
第二章(2) 循环控制.ppt_第2页
第二章(2) 循环控制.ppt_第3页
第二章(2) 循环控制.ppt_第4页
第二章(2) 循环控制.ppt_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

第2章循环控制 济南大学信息科学与工程学院 概述while语句do while语句for语句循环的嵌套break语句和continue语句 第二章循环控制 2 3 1概述 在实际问题中 常常遇到需要重复处理的工作 计算机运算速度快 适宜用于重复性的工作 循环控制是结构化程序设计的基本结构之一 它和顺序结构 选择结构共同作为各种复杂程序的基本构造单元 典型例子 求n 如果一对兔子每月能生1对小兔子 而每对小兔在它出生后的第3个月里 又能开始生1对小兔子 假定在不发生死亡的情况下 由1对初生的兔子开始 1年后能繁殖成多少对兔子 猴子吃桃 国际象棋棋盘放麦子百马百担 百鸡百钱2 x 5 斐波拉契数列 循环控制结构一般由四部分组成 进入循环的初始条件 退出循环的条件 循环体 循环体需要完成的功能 需要重复执行的语句 循环变量的修正 根据进入条件和退出条件 循环控制结构可以分为三种形式 while结构 退出条件是进入条件的反条件 即满足条件时进入 重复执行循环体直到进入的条件不再满足为止 do while结构 无条件进入 执行一次循环体后再判断是否满足再进入循环的条件 for结构 与while结构类似 但结构更紧凑 适用于循环之前循环次数就已经确定的情况 循环变量 控制循环的一个标记变量 使用形式 while 表达式 语句序列 特点 先判断表达式 后执行语句 2 2 2while语句 注意和if 表达式 语句序列 的区别哦 例 求1 2 3 100的值 分析 0 1 2 3 4 例 求1 2 3 100 main inti sum i 1 sum 0 while i 100 sum sum i i printf sum d n sum 注意 While起作用的范围 注意 要有改变循环结束条件的语句 Ex4 5 c main inti n sum i 1 sum 0 while i n sum sum i i printf sum d n sum 计算1 2 3 n n为任意正整数 scanf d 思考问题 循环结束后循环变量的值是多少 main inti sum i 1 sum 0 while i n sum sum i i i 2 printf sum d n sum scanf d 计算1 3 5 7 n n为奇数 例 输入10个数 求这10个数的和 main inti sum n i 1 sum 0 while i 10 scanf d printf sum d n sum 循环变量是i 但求sum时与i无关 i仅仅控制循环次数 输入若干个数 以0结束 求这若干个数的和并输出 main inti sum sum 0 while i 0 sum sum i scanf d printf sum d n sum scanf d 2 2 3do while语句 使用形式 do循环体语句while 表达式 特点 先执行循环体语句 后判断表达式 注意 循环部分为多个语句时 必须用大括号构成复合语句 循环体中应有使循环趋于结束的语句 例 求1 2 3 100 inti sum i 1 sum 0 do sum sum i i While i 100 printf d n sum main While和do while循环的比较 main intsum 0 i scanf d main intsum 0 i scanf d 2 2 4for语句 一般形式 for 表达式1 表达式2 表达式3 复合语句 一般使用格式 for 循环变量赋初值 循环条件表达式 循环变量修正 循环体 执行过程 1 求解表达式1 2 求解表达式2 若其值为真 值为非0 则执行for语句中指定的内嵌语句 然后执行 3 若为假 值为0 则结束循环 转到 5 3 求解表达式3 4 转回执行 2 5 循环结束 执行for语句下面的一个语句 例 求1 2 3 100 main inti sum 0 for i 1 i 100 i sum sum i printf d sum 循环变量赋初值 循环条件 循环变量修正 循环体 例 计算某个班英语成绩的平均分 学生人数和每个学生的成绩由键盘输入 main inti n floatsum ave sum 0 for i 1 i n i ave sum n printf aveis f ave scanf d scanf d 想想这条语句是否能放到循环体内 for语句的三个表达式都可以缺省 但两个分号不能缺省 如果在for语句之前已经给循环变量赋初值 则for语句的循环变量赋初值部分可以省略 但其后的分号不省略 也可以将循环变量修正值的工作纳入到循环体中去做 说明 i 1 for i 10 i m m i 如 for i 1 i 10 m m i i 如 也可以省略for语句的第一和第三部分 i 1 for i 10 m m i i 如 for 但是注意不能两处同时修正值 通常不缺省表达式2 有时缺省表达式2 此时不判断循环条件 循环将无终止的执行 即认为表达式2始终为真 在循环体内用if和break控制循环结束 for i 1 i if 条件 break sum sum i 如果有多个循环变量赋初值 或多个循环变量值要修正 应在各变量之间用逗号隔开 for i 1 j 10 i j i j k i j 如 循环条件表达式一般是关系表达式或逻辑表达式 但也可以是数值表达式或字符表达式 每次系统判断该表达式的结果不为0 就执行一遍循环体 for m 0 c getchar m m c 如 考虑问题 运行程序时如何停止循环 求n 例 猴子吃桃 猴子第一天摘了若干个桃子 当即吃了一半 还不过瘾 又多吃了一个 第二天又将剩下的桃子吃了一半 又多吃了一个 以后每天都吃掉前一天剩下的一半零一个 到第十天想吃时 只剩下一个桃子了 问第一天共摘了多少桃子 分析 循环10天 day从9循环到1设x1为前一天桃子数 设x2为第二天桃子数 则x2 x1 2 1 所以x1 x2 1 2每次循环 x1 x2 1 2 x2 x1 猴子吃桃程序 intday x2 x1 x2 1 for day 9 day 1 day x1 x2 1 2 x2 x1 printf pearare d n x1 Monkey c 上一次课程回顾 do while的使用格式do 循环体语句 while 表达式 for的使用格式 for 循环变量赋初值 循环条件表达式 循环变量修正 循环体 输入一个数 判断该数是否为素数 算法提示 1 可以让除数从2 n 1逐个去除该数n 判断是否被其中的任何一个整数整除 如果是 则说明不是素数 如果一直都没有出现过整除现象 则说明该数是素数 main intflag n i Scanf d 输入一个数 判断该数是否为水仙花数 水仙花数是一个3位数 该数等于各位数的立方和 例如 153 13 53 33 for while do while的互相转化 i 1 sum 0 do sum sum i i While i 100 for i 1 i 100 i sum sum i i 1 sum 0 while i 100 sum sum i i 循环控制变量赋初值 循环控制变量赋初值 循环控制变量赋初值 循环终止条件 循环终止条件 循环终止条件 循环变量修正 循环变量修正 循环变量修正 几种循环的比较 1 C语言中的三种循环结构都由表达式控制执行一个循环体 一般情况下可以相互代替 2 用while和do while循环时 循环变量初始化的操作应在while和do while语句之前完成 而for语句一般在表达式1中实现循环变量的初始化 3 在循环的执行过程中 应不断的改变循环控制表达式的值 以便逐步形成使它为0的条件 否则将可能出现死循环 4 三种循环可以相互嵌套 形成多重循环 外循环可以包含多个或多重内循环 循环之间可以并列但不能相交 并列的循环控制变量可以同名 但嵌套的循环控制变量不能同名 2 2 6循环的嵌套 一个循环体内又包含另一个完整的循环结构 称为循环嵌套 内层的循环中还可以嵌套循环 构成多重循环 while while for for do do while while while for for do while while do while 输出99表 1 1 12 1 22 2 43 1 33 2 63 3 94 1 44 2 84 3 124 4 16 分析 分行和列考虑 共9行 第i行i列 for i 1 i j i printf d d d i j i j for j 1 j 9 j printf n main inti j 例 输出如图所示的矩形 main printf n printf n printf n printf n main inti j i 1 while i 4 while j 5 printf j j 1 printf n i 本例题讲解要领 模拟初学者进行程序设计时的思路和特点 程序从原始设计状态不断完善和修正 huatu c includemain inti j i 1 while i 4 for j 1 j 5 j putchar putchar n i includemain inti j for i 1 i 4 i for j 1 j 5 j putchar putchar n 例 输出如图所示的矩形 内外层循环的控制变量不能重名 循环嵌套算法时间复杂度分析 includemain inti j for i 1 i 4 i for j 1 j 5 j putchar putchar n 总的循环次数为i j次 如果i和j终值都为n 则算法的时间复杂度为O n2 例 输出如图所示的三角形 特点 第i行有i个星号 includemain inti j for i 1 i 4 i for j 1 j putchar putchar n j i 例 输出如图所示的等腰三角形 特点 一共有4行 第i行有2i 1个星号 第i行的第1个星号前有4 i个空格 includemain inti j for i 1 i 4 i for j 1 j 4 i j putchar 32 for j 1 j 2 i 1 j putchar putchar n 2 2 7break语句和continue语句 一 break语句 2 功能 中止当前循环语句或switch语句的执行 3 说明 若是多重循环 break只能使流程跳出离break最近的一层 break只用于switch语句和循环语句 while break 例 计算r 1到r 10时的圆面积 直到面积大于100为止 main floatr area for r 1 r100 break printf 6 2f n area 输出结果 3 1412 5628 2650 2478 50 二 continue语句 2 功能 提前结束本次循环体的执行 不再执行循环体中continue后面的语句 接着进行下一次是否执行循环的判定 3 说明 continue语句只能用于循环语句中 它是一种具有特殊功能的转移语句 continue与break不同 continue语句只结束本次循环 而不是终止整个循环的执行 而break语句则结束整个循环 不再判断循环条件是否成立 while continue 例 把10到20之间能被3整除的数输出 main intn for n 10 n 20 n if n 3 0 continue printf d n break 121518 12 for continue 素数的改进 素数是除了1和它自身不能被任一个数整除的数 算法提示 1 可以让除数从2 n 1逐个去除该数n 判断是否被其中的任何一个整数整除 如果是 则说明不是素数 如果一直都没有出现过整除现象 则说明该数是素数 改进 for i 2 i n printf dissushu n main intflag n i Scanf d 判断素数 算法改进2 可以进一步减少循环次数 循环的终止条件可缩小为n 2 或 k n 2 或k for i 2 i k 1 printf dissushu n 例 打印3 100之间的全部素数 for m 3 m 100 m 2 k sqrt m for i 2 i k i if m k 0 break if i printf 5d m k 1 main inti k m 百鸡百钱问题 一只公鸡值5元 一只母鸡值3元 三只小鸡值1元 总共有100元钱要买一百只鸡 问有多少种方案 求s a aa aaa aaaa

温馨提示

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

评论

0/150

提交评论