循环结构的程序设计.ppt

上传人:za****8 文档编号:6366384 上传时间:2020-02-24 格式:PPT 页数:60 大小:1.57MB
返回 下载 相关 举报
循环结构的程序设计.ppt_第1页
第1页 / 共60页
循环结构的程序设计.ppt_第2页
第2页 / 共60页
循环结构的程序设计.ppt_第3页
第3页 / 共60页
点击查看更多>>
资源描述
第六章循环控制 4学时 Loops 第2页 6 1循环的概念 提出问题 提问 从键盘上输入10个整数并求和 怎么编程 回答 在程序中写入10个scanf 语句 提问 从键盘上输入500个整数并求和 怎么编程 回答 这个 嗯 不会让我写500个 老师 让我们换一个角度来看待这些问题 以上问题的实质是 将scanf函数重复执行N遍 学生 对 好象是这么回事 老师 我们可以引出一个概念 循环 简单而言 循环就是不断反复地执行同一段程序 学生 这就是我们今天要学的新东西 6 1循环的基本概念 例 求1 2 3 4 5 6 7 8 9 10 sum 1 2 3 4 5 6 7 8 9 10如果求1 2 3 100呢 或者求1 2 3 n n为某一任意指定的数 呢 计算机的操作是一步一步执行的 步骤分解原则 计算机的操作是一步一步执行的 步步分解 循环三要素 变量赋初值sum 0 i 1 循环语句sum i i 循环条件i n 循环两概念 反复执行同一段程序 直到满足一定的条件后才停止执行该段程序 循环变量 在循环中表示循环增量的变量 i步长语句 在循环语句中循环变量的变化语句 i C中循环的实现方法 goto语句及goto语句构成的循环 1 形式 goto语句标号 3 功能 4 循环构成 无条件转到由语句标号指定的语句去执行 语句标号定义与变量一样 2 说明 与if语句一起 main inti 1 sum 0 loop if i 100 sum i i gotoloop printf d sum 注意 尽量不用 6 2用while语句设计循环结构 1 形式 注意 只包含了两个要初始化应放在while前面 流程如图 While 循环条件 循环语句 2 功能 3 框图 当循环条件表达式值为非0时执行while中内嵌的循环语句 循环体 例6 2 sum 1 2 3 n 分解 sum 0 i 1 sum i i sum i i sum i i 其中i n i n Sum i i Sum 0 i 1 main intn i sum scanf d sum 0 i 1 当i 100 sum i i while语句 实例 例1 分析程序的运行结果 includemain intn 0 while n 3 printf nis d n n n printf That sallthisprogramdoes n 结果 程序将不停的打印 nis0 直至终止程序无法正常终止的程序 称为 死循环 结论 while语句循环体中 一定要有能够对循环控制条件产生影响的语句 避免出现 死循环 现象 例2 分析下列程序段index 1 while index 5 printf Goodmorning n 分析 程序段将无限制打印字符串 因为循环中没有任何语句可以改变循环控制变量index的初值1 while语句 实例 例3 分析下列程序段index 1 while index 5 printf Goodmorning n 分析 仍有问题 程序改变了index 但方向错了 在index达到系统能够处理的最大负数时 将会产生下溢而终止程序 结论 循环体中必须有能够使循环正常停止的条件 while语句 实例 例C3 5103 C 从键盘中读入一系列字符 直到输入字母a时才停止 显示ch 成立 不成立 ch 读入一个字符 ch 读入下一个字符 开始 结束 while ch a ch getchar putchar ch ch getchar 分析 由于不知道要输入的字符数量 只知停止条件是输入字母a 则只能将循环控制条件设为ch a 程序主体 while语句 实例 includemain charch ch getchar while ch a putchar ch ch getchar while语句 实例 例C3 5104 C 对输入的行和字符进行计数 分析 n作为行结束标记的 DOS中有 CTRL Z 作为文件结束标记 defineEOF 1 includemain intc nl 0 nc 0 while c getchar EOF nc if c n nl printf chars d lines d n nc nl 定义文件结束标记nl行计数器nc字符计数器进行字符计数如果找到 n 则行计数 while语句 实例 例3 求1到100的之和 main inttotal 0 i 1 while i 100 total total i i printf Total d n total 例C3 51041 变形1 while itotal i i变形2 inti 0 while i i 判断i判断i i total i while语句 实例 循环嵌套在循环体中 又包含有循环语句 构成循环嵌套 例C3 5107 C 输出下三角形乘法九九表 123456789 12436948121651015202561218243036714212835424981624324048566491827364554637281假设 行号为i 列号为j i 6j 5i j 1 i 9 1 j i 则 第i行中一共要输出i个乘积 while语句 实例 includemain inti 1 j i 行计数器j 列计数器 while i 9 控制打印表头 printf 4d i printf n n i 1 while i 9 j 1 列计数器置1 while j i 嵌套的二重循环 输出第i行 printf 4d i j j 列计数器 1 printf n 一行输出结束后 输出 n i 行计数器 1 外层循环体执行1次 内层循环要完整执行1次 while语句 实例 while使用注意1 while 0 由于循环的条件表达式恒等于0 循环体永远也不会执行 是编程者的错误 2 while 1 由于循环的条件表达式恒等于1 所以不可能通过循环控制条件来结束循环体的执行 称为 死循环 3 为了保证循环正常运行 应该特别注意 循环控制条件控制条件的初始状态 初始值 循环体内部对控制条件的影响 while语句 实例 注意 4 循环体如果包含一个以上语句 应该用复合语句 语句组 5 循环语句 最少只执行0次 6 3do while语句设计循环结构 do循环语句while 循环条件 一般形式 NS结构图 流程图 例题6 3s 1 1 2 1 3 1 i main intn i floatsum scanf d main intn i sum scanf d 例题6 4s n 1 2 3 n 1 n main intn i s scanf d main intn i s scanf d 例6 5 4 1 1 3 1 5 1 n 1 1 2 n 1 a 累加变量初值sum 0b 循环做 i从1到n 若i为奇数 sum 1 当前项值 2 i 1 否则 sum 1 当前项值 2 i 1 sum 0 i 1 main intn i floatsum scanf d printf d sum while i n if i 2 sum 1 float 2 i 1 elsesum 1 float 2 i 1 i sum 0 i 1 当i n if i 2 sum 1 float 2 i 1 elsesum 1 float 2 i 1 i 读入整数n 打印sum 注意 1 do while先执行一次循环体 即使条件一开始就不成立 2 一般情况下 while与do while处理同一问题时 结果相同 while与do while区别 1 结构相反2 while中的循环语句最少执行0次 do while中的循环语句最少执行1次 例6 9求10个数中的最大值 从键盘上输入第一个数 并假定它是最大值存放在变量max中 以后每输入一个数便与max进行比较 若输入的数较大 则最大值是新输入的数 把它存放到max 当全部10个数输入完毕 最大值也确定了 即max中的值 while结构 当i 10 max x i 2 读入整数x if x max max x i 读入整数x 打印max main intx i max scanf d Do while结构 直到i 10 max x i 2 读入x if x max max x i 读入整数x 打印max main intx i max scanf d 6 8程序举例第一类题 求和类 1 n 1 2 3 n2 s 1 3 5 1 n 1 2 n 1 3 s 2 1 3 2 5 3 8 5 前n项 4 s 1 1 2 1 3 1 n 5 S a aa aaa aa a n个a 例 s 1 1 2 1 3 1 n 1 累加变量初值sum 0 X0 12 i从1到n循环做求第i项值 Xi Xi 1 i累加 sum Xi x 1 0 main intn i sum floatx scanf d sum 0 i 1 while i n x sum x i printf sum d sum x i x 1 0 x i 第二类题 分离各个位 1 求一正整数x为几位数 x 24365 2 求一正整数x各个位之和 如 x 24365 则个位之和sum 2 4 3 6 5 3 求倒序数 如 x 24365 倒序数re x 56342 4 在3位数中找一个满足下列要求的正整数n 其各位数字的立方和恰好等于它本身 例如 371 33 73 13 第二类关键 必须将它的各位数字分拆开 1 个位数字 n 10 例 371 10 1 2 十位数字 n 10 10 例 371 10 37 37 10 7 3 百位数字 n 10 10 10 例 371 10 10 37 10 3 3 10 3 即 分离是从低位数字到高位数字的过程 若x 0循环做 x 10 分离出x的个位数x 10 求出未被分离的余下的数 例1 求一正整数x为几位数 x 24365 i 0 当x 0 y x 10 x 10 main intx y i scanf d x while x y x 10 x 10 printf d n i i i 0 i 读入x 打印位数 sum 0 main intx y sum scanf d x while x y x 10 x 10 printf d n sum sum y 例2 求一正整数x各个位之和 如 x 24365 则个位之和sum 2 4 3 6 5 当x 0 y x 10 x 10 sum y sum 0 读入x 打印位数 例3 求倒序数 如 x 24365倒序数re x 56342 re x 0 main intx y re x scanf d x while x y x 10 x 10 printf d n sum re s re s 10 y 当x 0 y x 10 x 10 re s re s 10 y re x 0 读入x 打印位数 例6 11在3位数中找一个满足下列要求的正整数n 其各位数字的立方和恰好等于它本身 例如 371 33 73 13 main intx y sum scanf d x while x y x 10 x 10 printf d n sum 当x 0 y x 10 x 10 sum y y y sum 0 读入x 打印sum sum 0 sum y y y 若x sum if x sum 6 4for语句设计循环结构 1 格式 2 注意循环体包含两个部分 循环语句 先 步长表达式 后 它们之间可任意调整 初值表达式 赋初值条件表达式 控制循环步长表达式 改变循环变量值 for 初值表达式 条件表达式 步长表达式 循环语句 for 初值 条件 步长 循环语句 初值 while 条件 循环语句 For与whie的对应关系 例 求sum 1 2 3 nfor sum 0 i 1 i n i sum i 说明 P123 1 表达式1可以省略 此时应在for语句之前给循环变量赋初值 分号不能省 sum 0 for i 1 i n i sum i 2 若表达式2省略 即不判断循环条件 则循环无终止 即认为循环条件始终为真 应避免 for i 1 i sum i 3 表达式3可以省略 放入循环语句中 后面 5 三个表达式都省略 无限循环 for for sum 0 i 1 i 100 i sum i 4 表达式1 3省略 保留表达式2 for i 100 sum i i 例6 6 输入一个整数 判断是否为素数x 35 main intx i scanf d i i k i 2 a i从2递增到k sqrt x 循环做 若m整除i i非素数 退出循环b 若 i k 1 是素数 否则 不是素数 第三类题 求因子类 1 输入两个整数 求最大公倍数和最小公约数 2 输入一个整数 判断是否为素数 3 输入一个整数 求其所有因子之和 4 输入一个整数 判断其是否为完数 因子之和 本身 例6 11 输入两个整数 求最小公倍数和最大公约数X 12y 8 i从max x y 递增到x y循环做 若i被x和y第一次同时整除 i为x和y最小公倍数 中断循环 最小公倍数 i x y x y 当i x y if i x 0 最大公约数 i从min x y 递减到1循环做 若可i第一次同时整除x和y i为x和y最大公约数 中断循环 i x y x y 当i 1 if i x 0 main inti x y scanf d d 最小公倍数 最大公约数 main inti x y scanf d d 6 5break和continue语句 break continue 1 使流程跳出switch结构2 从循环体内跳出整个循环体 提前结束循环 1 结束本次循环过程 跳过循环体中下面未执行的语句 接着执行下一次循环过程 只结束本次循环过程 而不是终止整个循环的执行 2 一个循环语句包含多个循环过程 for r 1 r100 break pintf f area break和continue区别 break和continue比较举例 例 for i 1 i 10 i if i 5 0 break printf d i 例 for i 1 i 10 i if i 5 0 continue printf d i 1 2 3 4 1 2 3 4 6 7 8 9 演示 6 6几种循环的比较 1 四种循环都可处理同一问题 一般情况下可以互相代替 不提倡goto 2 循环条件 循环体 while和do while 只在while后面指定循环条件 循环体中包含 反复执行的操作语句 使循环趋于结束的语句 如i for循环可在 表达式3 中包含使循环趋于结束的操作 甚至将循环体中的操作全部放到表达式3中 逗号表达式 3 循环变量初始化 while和do while 在while和do while之前完成 for 通常在 表达式1 中实现4 判断 循环 while和for 先判断表达式 后执行语句 do while 先执行语句 后判断表达式 6 7循环的嵌套 一个循环体中又包含另一个完整的循环结构 二重循环 三种循环互相嵌套 三种循环互相嵌套 续 4 while do while 三种循环互相嵌套 续 5 for while 6 do for while 例6 10 打印10 40之间的所有素数 main inti k x k sqrt x for i 2 i k 1 printf d x 第五类题 打印图形类 根据用户输入 打印n行如下图形 方法 所有图形是由行n 列m构成的 a 读入行数n 列数m b 从第1行递增到第n行 b 1从第1列递增到第 列循环打印的空格b 2从第1列递增到第 列循环打印 b 3打印回车 算法 演示 例 算法 main intn i j scanf d printf n for for printf printf i i 1 i n j j 1 j 41 i 每行前面的空格 例 打印图形 n行 每行2 i 1个 main intn i j scanf d 2 i 1个 j j 1 j 41 i j j 1 j 2 i 1 第六类递归迭代例6 14用迭代式xn 0 5 xn 1 a xn 1 求 a a 0 1 先确定a的平方根的初值x0 0 5 a 迭代计算x1 2 若 x1 x0 eps时表示近似值的精度未达到要求 转 3 3 下一轮的x0 x1 迭代计算新的x1 该x1比上次xl 即本次的x0 更接近a的平方根 转步骤 2 4 否则表示x1就是a的平方根 输出x1 当 x1 x0 eps x0 x1 x1 0 5 x0 a x0 x0 0 5 a x1 0 5 x0 a x0 读入正数a 打印x1 main floata x1 x0 eps 1 e 5 scanf lf a x0 0 5 a x1 0 5 x0 a x0 while fabs x1 x0 eps x0 x1 x1 0 5 x0 a x0 printf sqrt f f n a x1 例6 13打印前n项Fibonacci数列1 1 2 3 5 8 intn f f1 f2 scanf d 设初值f1 f2 1 从第3项到第n项 第i项 第i 1项 f1 第i 2项 f2 打印第I项值下次的第i 2项 f2 本次的第i 1项 f1 下次的第i 1项 f1 本次的第i项 f 读入n 例5 10 电文加密 加密方法 将电文中的字母循环变为其后的第 个字母如 A EB F W AX BY CZ D算法 若c在 a 和 v 或 A 和 V 之间 则c c 4否则c c 4 26 循环做 当读入操作符字符c为非 n 解密方法 将电文中的字母循环变为其前的第 个字如 A WB XC YD ZE A Z V算法 若c在 e 和 v 或 E 和 V 之间 则c c 4否则c c 4 26 循环做 当读入操作符字符c为非 n 加密程序 include stdio h main charc while c getchar n if c a if c e 解密 小结 循环的三要素 两概念掌握 应用 分析循环语句while do while for格式 框图 用法程序题型求和类分离各个位类因子类一串字符类打印图形类 理解 掌握通式 分析 编程
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!