




已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章循环结构程序设计 北京科技大学计算机系 C语言程序设计 2020 1 9 2 本章主要内容 while循环控制do while循环控制for循环控制用goto语句实现循环控制循环结构中的跳转语句循环的嵌套循环结构程序设计举例 2020 1 9 3 5 1while循环控制 语句一般格式while 表达式 语句 一般为关系表达式或逻辑表达式 也可以是C语言其他类型的合法表达式用来控制循环体是否执行 称为内嵌语句 可以是基本语句 控制语句 也可以是复合语句是循环重复执行的部分 2020 1 9 4 功能 计算表达式的值 为非0 逻辑真 时 重复执行内嵌语句 每执行一次 就判断一次表达式的值 直到表达式的值为0时结束循环 转去执行while后面的语句 循环控制条件 循环体 2020 1 9 5 例如 例5 1 编写程序 求100个自然数的和即 s 1 2 3 100 思路 寻找加数与求和的规律 加数i 从1变到100 每循环一次 使i增1 直到i的值超过100 i的初值设为1 求和 设变量sum存放和 循环求sum sum i 直至i超过100 2020 1 9 6 算法和程序 main inti sum i 1 sum 0 while i 100 sum sum i i printf sum d n sum 运行jc5 1 程序输出结果 sum 5050 i 循环控制变量sum 累加器 2020 1 9 7 注意 如果while的 表达式 值为0 则循环体一次也不执行 例如当i的初值 101 在循环体中必须有使循环趋向结束的操作 否则循环将无限进行 死循环 在循环体中 语句的先后位置必须符合逻辑 否则会影响运算结果 思考程序段的输出 while i 100 i sum sum i 运行后 输出 sum 5150原因是什么 2020 1 9 8 注意 续 为了保证循环正常运行 应该特别注意 循环控制条件的描述控制条件的初始状态 初始值 循环体内部对控制条件的影响 2020 1 9 9 5 2do while语句 语句一般格式do语句while 表达式 功能 先执行内嵌语句 循环体 之后计算表达式的值 不为0 逻辑真 时 再执行循环体并判断条件 直到表达式的值为0结束循环 转去执行while下面的语句 2020 1 9 10 do while循环的算法 N S结构图 main inti 1 sum 0 do sum sum i i while i 100 printf d n sum 用do while语句求100个自然数的和 2020 1 9 11 说明 while和do while都能实现循环控制 while结构程序通常都可以转换成do while结构 区别 do while语句先执行循环体再判断条件 循环体至少执行一次 while语句先判断条件再执行循环体 循环体有可能一次也不执行do while循环体中一定要有能使表达式值趋于0的操作 如i 否则会出现死循环 2020 1 9 12 do while语句的简单应用 例5 3 用辗转相除法求m和n的最大公约数 2020 1 9 13 算法和程序 main intm n r scanf d d 运行jc5 3 程序运行情况如下 24 60 12 2020 1 9 14 5 3for语句 语句一般格式for 表达式1 表达式2 表达式3 语句 功能 计算表达式1的值 再判断表达式2 如果其值为非0 逻辑真 则执行内嵌语句 循环体 并计算表达式3 之后再去判断表达式2 一直到其值为0时结束循环 执行后续语句 循环初始条件 循环控制条件 循环体 2020 1 9 15 for语句的算法 例如 main inti sum sum 0 for i 1 i 100 i sum sum i printf sum d n sum 可部分或全部省略 但 不可省略 2020 1 9 16 省略for语句的表达式 表达式1 2 3全省略 即 for 就等同于 while 1 会无限循环 死循环 注意 在省略某个表达式时 应在适当位置进行循环控制的必要操作 以保证循环的正确执行 省略表达式1和表达式3 即 for 表达式2 就等同于 while 表达式2 省略表达式2 即 for 表达式1 表达式3 就等同于 表达式1 while 1 表达式3 2020 1 9 17 例如 i 1 for i100 for i 1 i100 i 2020 1 9 18 说明 所有用while语句实现的循环都可以用for语句实现 等价于 for 表达式1 表达式2 表达式3 语句 表达式1 while 表达式2 语句 表达式3 2020 1 9 19 for语句的简单应用 例5 4 求n 即计算p 1 2 3 n的值 思路 求阶乘与求累加的运算处理过程类似 只要将 变为 设置 乘数i 初值为1 终值为n n是循环控制终值 需要从键盘输入 累乘器p 每次循环令p p i 2020 1 9 20 程序 main inti n longp p 1 printf Entern scanf d 思考 如何输出1 2 n 如何求s 1 2 n 运行jc5 4 2020 1 9 21 熟悉几个循环语句 while x x 当x 0时 执行循环体x while c getchar n n n 1 n称为计数器 作用是统计输入字符的个数while num 5 先执行循环体x 3 再判断条件 x 5 for n 0 n 26 n printf c n A 作用是输出26个大写字母for sum 0 i 1 i 100 sum sum i i 2 作用是计算100以内的奇数和 2020 1 9 22 几种循环语句的比较 while和do while语句的表达式只有一个 for语句有三个 while和for先判断循环条件后执行循环体 do while语句先执行循环体后判断循环条件 while语句多用于循环次数不定的情况do while语句多用于至少要运行一次的情况for语句多用于要赋初值或循环次数固定的情况 2020 1 9 23 5 4用goto语句实现循环 有兴趣的同学自学不提倡使用goto语句 注意 goto语句能实现程序无条件转移 为编程提供了便利 但是无限制地使用 会破坏程序的结构化程度 因此应限制使用 2020 1 9 24 5 5循环结构中的跳转语句 有如下三种语句实现跳转 continue语句break语句goto语句在循环语句的循环体中使用 可以进行循环的流程控制 2020 1 9 25 5 5 1continue语句及应用 功能 中断循环体的本次执行 即跳过循环体中尚未执行的语句 立即开始执行下一次循环 while语句 do while语句 for语句 2020 1 9 26 例如 intx n 0 s 0 while n 10 scanf d intx n 0 s 0 do scanf d for n 0 s 0 n 10 n scanf d 2020 1 9 27 应用举例 例5 7 把100 200之间能被7整除的数 以十个数为一行的形式输出 最后输出一共有多少个这样的数 2020 1 9 28 算法和程序 main intn j 0 for n 100 n 200 n if n 7 0 continue printf 6d n j if j 10 0 printf n printf nj d n j 运行jc5 7 2020 1 9 29 5 5 2循环中break的应用 功能 利用break语句能够强迫终止本层循环 转到后续语句执行 while语句 do while语句 for语句 2020 1 9 30 例如 intx n 0 s 0 while n 10 scanf d intx n 0 s 0 do scanf d for n 0 s 0 n 10 n scanf d 2020 1 9 31 5 6循环的嵌套 如果循环语句的循环体内又包含了另一条循环语句 则称为循环的嵌套例如 includemain inti j for i 1 i 10 i for j 1 j i j printf j i 4d n 4d i j 运行jc5 a 外循环语句 内循环语句 2020 1 9 32 注意 while do while for循环语句可以并列 也可以相互嵌套 但要层次清楚 不能出现交叉 多重循环程序执行时 外层循环每执行一次 内层循环都需要循环执行多次 例如 for a 1 a 10 a for b 0 b 5 b 外循环执行了10次 内循环执行6次循环正常结束时 内循环执行了10 6 60次 2020 1 9 33 5 7循环结构程序设计 例5 5 按每行输出5个数的形式输出Fibonacci数列的前20项 思路 Fibonacci数列的前几项是 1 1 2 3 5 8 13 21 34 此数列的变化规律是 设变量f1 f2和f3 并为f1和f2赋初值1 令f3 f1 f2得到第3项 将f1 f2 f2 f3 再求f3 f1 f2得到第4项 依此类推求第5项 第6项 这是一种递推算法应采用循环实现 2020 1 9 34 算法和程序 defineN20main inti f1 f2 f3 f1 f2 1 printf n 8d 8d f1 f2 for i 3 i N i f3 f1 f2 f1 f2 f2 f3 printf 8d f3 if i 5 0 printf n 运行jc5 5 2020 1 9 35 举例2 例5 12 判断输入的某个数m是否为素数 若是素数 输出 YES 若不是 输出 NO 思路 素数是指只能被1和它本身整除的数 如5 7 11 17 等 分别用2 3 m 1尝试能否整除整数m 如果m能被某个数整除 则m就不是素数 这是一种穷举算法设除数为j 从2循环到m 1 2020 1 9 36 算法和程序 include math h main intj m k printf Enteranintegernumber scanf d 运行jc5 12 2020 1 9 37 程序的优化 对于穷举法来说 为了提高程序的效率 就要减少尝试次数 include math h main intj m k printf Enteranintegernumber scanf d 思考 如何输出100 200中所有的素数 2020 1 9 38 举例3 例5 13 用牛顿迭代法求方程2x3 4x2 7x 6 0在x 1 5附近的根 思路 设xn为一个接近xa的近似根 过 xn f xn 点做切线 切线方程为 即 牛顿迭代公式 2020 1 9 39 算法基本步骤 先设一个方程近似根x0 求出方程f的值和方程导数f1的值 f 2x03 4x02 7x0 6f1 6x02 8x0 7 用迭代公式x x0 f f1进行迭代 求出x比x0要接近方程真实的根 当 x x0 大于某个很小的数时 如10 6 认为未找到 此时将x x0 再次求f f1 并迭代 又求出一个新的更接近方程根的x 一直到 x x0 10 6时得到方程近似根 x或x0 这是一种迭代算法用循环实现 2020 1 9 40 算法和程序 include math h main floatx x0 f f1 x 1 5 do x0 x f 2 x0 x0 x0 4 x0 x0 7 x0 6 f1 6 x0 x0 8 x0 7 x x0 f f1 while fabs x x0 1e 6 printf f n x 运行jc5 13 2020 1 9 41 举例4 例5 11 编程序求2 10000以内的完全数 完全数 一个数的因子 除了这个数本身 之和等于该数本身 思路 设定i从2变到10000 对每个i找到其因子和s 判定i s 若相等 则i为完全数 否则不是 例如 6的因子是1 2 3 因子和1 2 3 6因此6是完全数 使用穷举算法用双层循环实现 2020 1 9 42 算法和程序 main inti j s for i 2 i 10000 i s 0 for j 1 j i j if i j 0 s j if i s printf 6d n s 运行jc5 11 2020 1 9 43 举例5 例5 10 编
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小区门岗施工合同范本
- 特种租赁合同范本
- 个人钱财赠与合同范本
- 八下第二单元《公民的基本权利义务》知识竞赛教学案例
- 2025商务合作合同范例标准版
- 2025某省汽车改装服务合同
- 《2025年度物流管理系统软件采购与使用合同》
- 轻质砖隔墙合同范本
- 《2025年企业合同续签流程与关键注意事项》
- 2025年建设项目勘察设计合同示范文本
- 中华人民共和国爱国主义教育法
- 2022-2023学年北京市海淀区八年级下学期期中考生物试卷 含详解
- 楼顶发光字采购安装投标方案
- 组建生物质燃料公司方案
- 铁路转辙机 ZDJ9型电动转辙机认知
- 2021年4月四川省自考06093人力资源开发与管理试题及答案含解析
- 产房医院感染控制风险评估表
- 《关于“人工智能”》非连续文本阅读练习及答案
- 钢平台铺板计算excel(可当计算书)
- 《强化学习理论与应用》环境
- 美丽的西双版纳
评论
0/150
提交评论