已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章循环结构程序设计 概述goto语句while do while语句for语句循环的嵌套循环的比较break语句和continue语句程序举例 0 本章内容 2 1 概述 循环就是在满足一定条件时重复执行一段程序实现循环的语句 四种 用goto语句和if语句构成循环不提倡用while语句当型循环 先判断后执行用do while语句直到型循环 先执行后判断用for语句多功能 3 4 2 goto语句 goto语句被称为无条件转向语句格式goto语句标号 功能遇到goto语句 就转到语句标号处继续执行 多与if语句配合实现循环 语句标号 用于定义程序中的某个位置 用标识符表示 不能只用数字如 gotostart4 goto206 因为滥用goto语句会破坏程序的结构化 所以应限制使用 5 2 goto语句 用if goto语句构成的循环 例1 求累加和程序如下 算法 1 设一个变量sum作为累加器并赋初值0 2 输入数据或利用某变量自动产生一个数据 3 利用赋值语句先算右边表达式的特点 执行语句 sum sum 变量 结果 sum 5050 includevoidmain inti 1 sum 0 L if i 100 sum sum i i gotoL printf sum d sum 6 3 while语句 当型循环 格式 while 表达式 循环体语句 执行过程 当表达式的值为真 非0 时 执行其中的内嵌语句 循环体 然后回过头来再判断表达式的值 如此重复 直到表达式为假 0 结束循环 特点 先判断表达式 后执行循环体说明 若循环体中包含一条以上语句 应以复合语句形式出现 循环前 必须给循环控制变量赋初值循环体有可能一次也不执行下列情况 退出while循环条件表达式不成立 为零 循环体内遇break return while i 100 sum i i 7 3 while语句 当型循环 例2 用while循环求1 2 3 100的值 includemain inti 1 sum 0 while i 100 sum sum i i printf sum d sum 运行结果 sum 5050 例3 用while循环求1 3 5 99的值1 1 3 1 5 1 99的值 学生练习 8 3 while语句 当型循环 例4 分别统计输入的字符串中数字和其他字符的个数 includevoidmain charch intnum 0 chn 0 while ch getchar n if ch 0 例5 分别统计输入的字符串中大写英文字母 空格和其他字符的个数 学生练习 includemain charch intletter 0 space 0 other 0 printf Enterastring while ch getchar n if ch A 9 4 do while语句 直到型循环 格式 执行过程 先执行语句 再判表达式的值 若 0 再执行语句 否则结束循环 特点 先执行循环体 后判断表达式说明 循环体至少执行一次do while可转化成while结构 do循环体语句 while 表达式 do sum i i while i 100 10 4 do while语句 直到型循环 voidmain intx d printf inputanumber scanf d 例6 从键盘输入一个数 将其数字按逆序输出 11 5 for语句 格式 for 表达式1 表达式2 表达式3 循环体语句 执行过程 首先计算expr1 接着执行expr2 若expr2的值 0 则执行循环体语句 接着计算expr3 再判断expr2的值 依此重复下去 直到expr2的值 0 假 说明 expr1在进入循环之前求解 循环变量赋初值 expr3是循环体的一部分for语句中expr1 expr2 expr3类型任意 都可省略 但分号 不可省无限循环 for for语句可以转换成while结构 一种形式更为灵活的循环语句 expr1 while expr2 循环体语句 expr3 12 5 for语句 for循环的其它形式 表达式1可以移到for语句的前面 表达式1 表达式2 表达式3 循环体语句 表达式1 这个分号不能移走 表达式3可以移到内嵌语句的后边 表达式3 这个分号不能丢掉 表达式2为空值永远为真成为死循环 for 13 5 for语句 用for语句求累加和 for i 1 i 100 i sum i for语句与while do while互换用 但for直观 简单 方便 i 1 while i 100 sum i i i 1 do sum i i while i 100 14 5 for语句 voidmain inti for i 1 i 99 i if i 2 例7 输出1 99之间不能被2和3整除的数 15 5 for语句 例8 输出1 99之间不能被2和3整除的数 按5个数一行的格式排列 voidmain inti j 0 for i 1 i 99 i if i 2 例9 输出100 200之间7的倍数 按7个数一行的格式排列 学生练习 16 5 for语句 例10 用 4 1 公式求pi的近似值 直到最后一项的绝对值 1e 6为止 算法 1 定义变量 n 1 分母 s 1 0 分子 pi 1 0 和 t 分式 2 n 2 s s t s n pi t 直到 t 1e 6为止 while fabs t 1e 6 include include math h main intn 1 floats 1 0 pi 1 0 t do n 2 s s t s n pi t while fabs t 1e 6 printf pi 10 6f n pi 4 小测验 例1 下面程序的运行结果是main inta 1 b 2 c 2 t while a b c t a a b b t c printf d d d a b c A 1 2 0B 2 1 0C 1 2 1D 2 1 1 例2 有以下程序main intx 3 do printf d x 2 while x 程序执行后的输出结果是A 1B 30C 1 2D 死循环 例3 下面程序的运行结果是main inti s 0 for i 1 i 10 i 2 s i 1 printf d n s A 自然数1 9的累加和B 自然数1 10的累加和C 自然数1 9中的奇数之加和D 自然数1 10中的偶数之和 17 6 循环的嵌套 循环嵌套是指一个循环体内包含了另一个完整的循环结构内嵌的循环还可以嵌套循环 从而构成多重循环三种循环可互相嵌套 层数不限外层循环可包含两个以上内循环 但不能相互交叉 例如 do while for while for for while 18 6 循环的嵌套 说明 嵌套的循环控制变量不能相同内循环变化快 外循环变化慢正确确定循环体 关键 循环控制变量常与求解的问题挂钩 例11 main inti j x y for i 1 i 5 i for j 1 j 3 j printf x d n i j printf y d n i j 当i 1时 j 1 1 3 x 1 1 2 j j 2 2 3 x 1 2 3 j j 3 3 3 x 1 3 4 j i 当i 2时 j 1 1 3 x 2 1 3 j j 2 2 3 x 2 2 4 j j 3 3 3 x 2 3 5 j i 当i 5时 j 1 1 3 x 5 1 6 j j 2 2 3 x 5 2 7 j j 3 3 3 x 5 3 8 j i y i j 6 4 2 外循环执行5次慢 内循环执行3次快 循环体执行15次快 独立于循环体之外 19 6 循环的嵌套 例12 读程序写结果 学生练习 main inti j x y for i 1 i 9 i for j 1 j i j printf 1d 1d 2d i j i j printf n 1 1 12 1 22 2 43 1 33 2 63 3 94 1 44 2 84 3 124 4 165 1 55 2 105 3 155 4 205 5 256 1 66 2 126 3 186 4 246 5 306 6 367 1 77 2147 3 217 4 287 5 357 6 427 7 498 1 88 2 168 3 248 4 328 5 408 6 488 7 568 8 649 1 99 2 189 3 279 4 369 5 459 6 549 7 639 8 729 9 81 20 6 循环的嵌套 例13 求一个班某门课的平均分 30人 求五个班某门课的平均分 30人 班 s 0 for n 1 n 30 n scanf d for c 1 c 5 c s 0 for n 1 n 30 n scanf d 21 6 循环的嵌套 例14 求n 算法 1 设一个变量作为累乘器 存放累乘的积 且设初值为1 t 1 2 执行t t x voidmain intt n j printf inputnvalue scanf d 例15 求1 2 3 4 5 6 学生练习 voidmain intt i j sum 1 for i 2 i 6 i t 1 for j 2 j i j t t j sum sum t printf sum d n sum 22 23 7 循环的比较 不提倡用goto构成循环关于循环的控制 while 表达式 语句 do语句while 表达式 for 表达式1 表达式2 表达式3 语句 循环控制条件 循环条件初始化 也可在for前 修改循环条件 也可在循环体内 24 7 循环的比较 循环体的执行先判断条件 后判断条件 循环体可能循环体至少一次也不执行执行一次 while 表达式 语句 都可以用break语句终止循环 用continue语句结束本次循环 do语句while 表达式 for 表达式1 表达式2 表达式3 语句 for循环体功能强两个界限不清 使程序设计较随意 界限不清 界限不清 24 8 break和contiune语句 break语句 只能用在switch结构和循环结构中 使程序跳出switch结构或本层循环 break特别适用于循环次数不确定的情况 进入循环后 利用一个if语句配合使用break 以实现程序在指定条件成立后提前结束循环的目的 continue语句 用来结束本次循环 在while do while中 使流程直接跳到循环控制条件的测试部分 然后决定循环是否继续 在for中先执行表达式3的求值 再执行表达式2的测试 然后决定循环是否继续 25 8 break和contiune语句 26 例16 计算圆的面积 r2 半径取1 2 3 4 当面积 100时结束 voidmain intr floatpi area pi 3 14159 for r 1 r100 break printf f area 例17 求1 2 3 100的累加和 当和大于2000时输出这个数 学生练习 voidmain inti sum 0 for i 1 i2000 break printf i d sum d n i sum 8 break和contiune语句 27 例18 打印100 200中不能被3整除的数 voidmain intn for n 100 n 200 n if n 3 0 continue elseprintf d n 例19 输出100 200间7的倍数 学生练习 voidmain intn for n 100 n 200 n if n 7 continue elseprintf d n 本次循环结束循环体的剩余语句被忽略执行表达式3 进入下一循环continue总是作if的内嵌语句 if n 3 printf d n 此法更佳 28 9 程序举例 求Fibonacci数例 1 1 2 3 5 8 前40个数 规律 F1 1 F2 1Fn Fn 1 Fn 2 n 2 程序要点 f1 f1 f2 f2 f1 f2 交替的结果正好为一序列每输出4个数时换行 例20 main longintf1 f2 inti f1 1 f2 1 for i 1 i 20 i printf 12ld 12ld f1 f2 if i 2 0 printf n f1 f1 f2 f2 f2 f1 9 程序举例 运行结果为 153423315971094675025514229352457824157817 1855377258417711121393832040570288739088169 213896104181286571964181346269922746563245986 321144987676546368317811217830914930352102334155 29 9 程序举例 判断m是否为素数的方法 当用2 3 的整数去除它时均不能除尽则为素数 求100 200的素数 30 例21 include includevoidmain intm k i n 0 for m 101 m k 1 printf d m 结果为 101103107109113127131137139149151157163167173179181191193197199 9 程序举例 打印图形 分析 图形每行的起始位置同 每行的字符数同 用一重循环控制输出行数即可 main introw 1for row 5 row printf n 分析 每行的起始位置不同 空格数递减1 每行的字符数同 用二重循环控制外循环控制输出行数内循环控制输出空格数 introw 1 col for col 1 col 5 row col printf printf n 31 例22 9 程序举例 main introw 1 col for row 5 row for col 1 col 5 row col printf printf n 打印图形 20 分析 每行的起始位置不同空格数20 row 15 每行的字符数不同字符数2 row 1 用二重循环控制外循环控制输出行数两个并列循环控制输出每行的空格数和字符数 main introw 1 col for row 5 row for col 1 col 20 row col printf for col 1 col 2 row 1 col printf printf n 32 例23 小测验 例1 以下程序的输出结果是main inti for i 20 i 0 i if i 5 0 break printf d i a 20b 19
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 兰陵羊毛购销合同范本
- 厂家直营建造合同范本
- 共同投资设备协议合同
- 农村建筑安全合同范本
- 办公场所转租合同范本
- 公司更名合同续签协议
- 厂房处理废铁合同范本
- 共同承包土地合同范本
- 医学美容聘请合同范本
- 合伙种植协议合同范本
- 2025年甘肃省庆阳市公安局面向社会招聘警务辅助人员58人考试参考试题及答案解析
- 2025江苏宿迁泗阳县部分县属国有企业招聘劳务派遣人员考试参考试题及答案解析
- 山东省名校考试联盟2026届高三上学期10月阶段性检测物理试卷(含答案)
- 服务器健康巡检规定
- 第16课奇石课件
- 危化品安全管理条例
- 2025年内蒙古交通集团笔试考试试题
- 2025年初中道德与法治八年级上学期期中测试试卷
- 低压抢修安全培训课件
- 铁路礼仪培训课件
- 辉瑞生物医药研发管线2025年战略布局前瞻分析报告
评论
0/150
提交评论