SC06-6 循环结构程序设计.ppt_第1页
SC06-6 循环结构程序设计.ppt_第2页
SC06-6 循环结构程序设计.ppt_第3页
SC06-6 循环结构程序设计.ppt_第4页
SC06-6 循环结构程序设计.ppt_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

1 循环结构程序设计 2 循环语句类型 在 语言中 可用以下语句实现循环 1 用for语句 2 用do while语句 3 用while语句 4 用goto语句和if语句构成循环 使用goto语句实现求解1 100累计和的程序可以如下 3 main intn 1 sum 0 loop sum n n if n 100 gotoloop printf sum d n sum 其中 loop 为语句标号 格式 标号 语句行 其命名遵循标识符命名规则 goto语句格式 goto标号 功能为 使系统转向标号所在的语句行执行 注意 结构化程序设计方法 主张限制使用goto语句 因为滥用goto语句 将会导致程序结构无规律 可读性差 另外 从功能上说 for语句可完全代替当型循环语句while 所以该语句也不是必需的 4 while语句格式 while 表达式 循环体 使用说明 先判断表达式 后执行循环体条件为非0时循环 为0时退出循环循环体由一条语句构成 若为多条语句则必须用 括起来构成一条复合语句流程图如图所示 5 while语句执行过程 6 while语句中表达式的多种形式分析下列程序段退出循环时x的值程序1 x 10 while x 0 x 程序2 x 10 uwhile x x 程序3 x 10 while x x为非0时 x 0为真 执行x x为0时 x 0为假 退出循环 x为非0时 执行x x为0时 条件为假 退出循环 表达式x 后置 取出x的值进行条件判断后 x自减 当x为0时 取出x的值0 条件为假 退出循环 x再自减 x的值为 1 7 while语句中表达式的多种形式 while x 0 等价于while x while x 0 等价于while x 8 二 do while语句格式 do 语句 while 表达式 使用说明 先执行一次语句 再进行表达式判断表达式为非0时循环 为0时退出循环流程图如图所示 9 do while语句执行情况 循环体至少执行一次 10 三 循环结构的程序设计设计初步用两种循环语句求1 100的和分析 通过循环累加实现1 100的求和运算 循环100次 每次加一个数据由此可以得出以下经验 累加 sum sum i 累乘 s s i 累除 s s i 11 while循环流程图 12 do while循环流程图 13 分析两个程序的运行结果 main intsum 0 i scanf d main intsum 0 i scanf d 运行结果1 sum 5512 sum 0 运行结果1 sum 5512 sum 12 14 while循环示例 使用while循环求两个正整数的最小公倍数 includeintmain intm n result printf Inputtwopositiveintegersm n scanf d d 15 do while循环示例 反复求两个正整数的最小公倍数 直到输入的两个数均为1时结束 includeintmain intm n result do printf Inputtwopositiveintegersm n scanf d d 16 程序设计求2n分析 2n 2 2 2 部分流程图如图所示 17 计算调和级数1 1 2 1 3 1 n的部分和 当和大于10时 停止计算 输出调和级数的项数 分析 s s 1 n n 1 2 部分流程图 18 求自然对数底的近似值 其公式为e 1 1 1 1 2 1 n 当1 n 10 7时 把等式右端的和作为e的近似值分析 公式中有累乘 n u u n 公式中有累加 e e u 部分流程图 19 编写程序 计算并显示一个整数各位数字之和 例如 1024各位数字之和为1 0 2 4 7分析 不清楚整数位数 但可以每次取出个位数字进行相加 再将原数整除10后的结果赋给原来的变量 实现循环累除和循环累加流程图 20 练习 若k为整型 则while循环 k 0 while k 0 k k 1 A 执行10次B 无限循环C 一次也不执行D 执行一次 分析 因为条件判断表达式k 0是赋值语句 该表达式的结果为0 条件始终为假 C为正确答案 21 若k为整型 则do while循环k 0 do k while k 0 A 执行无限次B 执行0次C 执行1次D 执行2次 C 执行第一次后 K 1 不等于0 跳出循环 22 四 for语句格式 for e1 e2 e3 循环体 说明 e1 赋初值 只执行一次 e2 循环条件 e3 使e2有可能不满足的表达式e1 e2 e3 循环体都可能为空 但不能省略 若省去e2 则是无限循环 若省去e1 e3 即仅有条件判断 则完全等同于while语句e1 e3可以是逗号表达式for语句的流程图 for 等价于while 1 如for 23 24 for的多种形式 for i 1 ifor i 1 iwhile i 10 sum sum 1 i for c getchar n printf c c printf n 任意表达式 空循环体 25 程序设计设计初步用for语句实现1 100的累加main inti sum for i 1 sum 0 i 100 i sum sum i printf sum d n sum 26 for循环示例 计算 includeintmain intresult k result 0 累加器变量 设置初始值 本例设为0 for k 1 k 100 k 循环计算result k k 累加printf Theresult d n result return0 27 三种循环结构的比较 三种循环结构可以互换使用for循环与while循环常见 do while循环少见while循环常用于不需要或很少需要初始化的场合for循环常用于需要简单初始化和通过递增递减运算控制循环体执行的场合for循环将所有循环控制因素都放在循环头部 循环结构最清晰通过省略循环头部的一个或多个表达式 for循环也可能非常复杂 28 for循环示例 程序读入一个字符串 然后反向打印输出 include includeintmain chars 50 c inti j printf Inputastring scanf s s for i 0 j strlen s 1 i j i j c s i s i s j s j c printf s n s return0 29 for循环示例 打印九九乘法表 includeintmain inti j k for i 1 i 9 i for j i j 9 j k i j printf d d d t i j k printf n return0 如果一个循环体内包含另一个循环则称循环嵌套或多重循环 三种循环都可以嵌套 但嵌套时内外层循环不能发生交叉 发生嵌套时 内层循环经常需要使用外层循环的某些值作为控制条件 30 循环的嵌套定义 循环体语句由一条循环语句来充当程序设计输出九九乘法表算法分析 i 1 j 1 9 求出1乘1 9的值i 2 j 1 9 求出2乘1 9的值 i 9 j 1 9 求出9乘1 9的值由此可见 i每取一个值 j都要从1 9 所以在i循环中要嵌套一个j循环 31 break语句与continue语句 为了使循环控制更加灵活 语言提供了break语句和continue语句 1 一般格式 break continue 2 功能 1 break 强行结束循环 转向执行循环语句的下一条语句 2 continue 对于for循环 跳过循环体其余语句 转向循环变量增量表达式的计算 对于while和do while循环 跳过循环体其余语句 但转向循环继续条件的判定 32 4 说明 1 break和continue语句对循环控制的影响如图所示 2 break能用于循环语句和switch语句中 continue只能用于循环语句中 只能与循环语句或switch合用 3 循环嵌套时 break和continue只影响包含它们的最内层循环 与外层循环无关 4 continue增加循环入口 break增加循环或switch语句的出口示意图 do do if e1 continue if e1 break while e2 while e2 跳出 33 循环控制转移 break语句 输出5行 每行10个随机数 若随机数大于20 000 本行输出结束 include include includeintmain inti j r srand time NULL for i 1 i20000 break printf n return0 srand 设置随机数种子的函数time 获取时间的函数rand 产生随机数的函数 break终止当前循环的执行 在存在循环嵌套的场合 它并不能终止外层循环的执行 34 循环控制转移 continue语句 输入一串字符 以回车结束输入 程序统计并输出其中小写字母的个数 includeintmain charc intnum 0 printf Enterastring n while c getchar n if c122 continue 非小写字母 本次循环结束num printf d n num return0 continue终止的是当前循环的当前一次迭代 而不是整个循环 当前循环的下一次迭代仍会执行 35 练习 要使以下程序段输出10个整数 请填入一个整数 for i 0 i printf d n i 2 答案 18分析 执行一次后I增加2 该循环次数n的公式为n 终值减初值 步长 1既 10 x 0 2 1注意 是否 1需根据具体情况分析 36 练习 若ij已定义为int类型 则以下程序段中内循环体的总的执行次数是 for i 5 i i for j 0 j 4 j A 20B 25C 24D 30 外层循环控制量 5 4 3 2 1内层循环控制量 0 1 2 3总次数 20 37 练习 1 以下程序的功能是 按顺序读入10名学生4门课程的成绩 计算出每位学生的平均分并输出 程序如下 main intn k floatscore sum ave sum 0 0 for n 1 n 10 n for k 1 k 4 k scanf f 38 练习 2 上述程序运行后结果不正确 调试中发现有一条语句出现在程序的位置不正确 这条语句是 A sum 0 0 B sum score C ave sum 4 0 D printf NO d f n n ave 答案 A分析 外层控制人数 内层控制每人的平均分 每次内层循环前 sum清0 39 练习 以下程序中 while循环的循环次数是main inti 0 while i 10 if i 1 continue if i 5 break i A 1B 10C 6D 死循环 不能确定次数 答案 D分析 i初始值为0 i 10成立 进入循环 i 1成立 不执行break i i值一直没改变 40 练习 有以下程序段intx 3do printf d x 2 while x 其输出结果是A 1B 30C 1 2D 死循环 答案 C第一次执行循环体后 输出1 x 值为1 x为0第二次输出 2 X 3 为0 跳出循环 41 练习 以下程序执行后sum的值是A 15B 14C 不确定D 0min inti sum for i 1 i 6 i sum i printf d n sum 答案 Csum没有初试化 42 练习 以下程序的输出结果是 include stdio h main inti 0 a 0 while i 20 for if i 10 0 break elsei i 11 a i printf d n a A 21B 32C 33D 11 答案 B分析 1 i 0 i 10 0 break i 11 a 112 i 11 i 10 1 0 执行elsei i 1 10 i i 11 10 11 21 a a i 11 21 323 i大于20 跳出循环 43 练习 有如下程序main0 inti sum for i 1 i 3 sum sum i printf d n sum 该程序的执行结果是A 6B 3C 死循环D 0 C分析 i始终未变 44 练习 以下程序的输出结果是main inta b for a 1 b 1 a 10 break if b 3 1 b 3 continue printf d n a A 101B 6C 5D 4 答案 D1st a 1 b 1 执行continue b 42nd a 2 b 4 执行continueb 4 3 73rd a 3 b 7 执行continueb 7 3 10 4th a 4 b 10 执行break跳出循环 打印a值 4 45 练习 有以下程序 includemain charc while c getchar putchar c 程序运行时 如果从键盘输入 Y N 则输出结果为 答案 X分析 注意getchar的特点 遇回车才结束 所以可以输入任意多字符 接受的只有Y 46 练习 函数pi的功能是根据以下近似公式求 值 6 1 1 2 2 1 3 3 1 n n 现在请你在下面的函数中填空 完成求 的功能 include math h include stdio h main intn 30 doubles 0 0 longi for i 1 i n i s s pi sqrt 6 s 1 0 i i 47 练习 设 4 1 1 1 3 1 5 1 7 要求精度在0 00001以内 填空 include math h include stdio h main floatpi t n k pi 0 0 n k t 1 0 while 1 pi t k k t 2 n pi 3 printf pi f n pi 1 fabs t 0 00001 2 k 2 n 1 3 4 pi 48 结构化程序设计注意事项 要保证结构的完整性不允许结构层次间的交叉 要保证操作的完整性一个基本结构就是一个完整的操作单元 程序只能从入口进出口出程序最好不要有多入口多出口 尤其不能从外部进入循环或条件分支内部 49 3 5结构化程序设计应用示例 includeintmain inti j n line 0 printf Pleaseinputn scanf d 使用while循环 50 素数的判定例 输入一个数 如果该数是素数打印Yes 否则打印No分析 根据素数的定义 用2 n 1 之间的每一个数去整除n 如果都不能被整除 则表示该数是一个素数 判断一个数是否能被另一个数整除 可通过判断它们整除的余数是否为0来实现 假设该数为i若i能被2 i 1整除 则i不是素数 根据验证 程序的循环次数可进一步简化为2 sqrt i 程序如下 51 include math h include stdio h main inti j scanf d 52 穷举法例 百鸡问题 设公鸡数为i 母鸡数为j 小鸡数为k 分析 i的取值范围 0 20 全买公鸡最多100 5 20只 j的取值范围 0 33 母鸡最多100 3 33 k的取值 100 i j 小鸡数 保证一百只 条件 i 5 j 3 k 3 100 k 3 0 满足上述条件则打印i j k的值程序如下 53 main inti j k for i 0 i 20 i for j 0 j 33 j k 100 i j if i 5 j 3 k 3 100 54 3 5结构化程序设计应用示例 百元买百鸡 穷举 已知公鸡每只5元 母鸡每只3元 小鸡1元3只 可买公鸡 母鸡 小鸡几只 includeintmain intx y z for x 0 x 100 x for y 0 y 100 y for z 0 z 100 z if x y z 100 设x y z分别表示可买的公鸡 母鸡 小鸡的个数 有不定方程组 55 3 5结构化程序设计应用示例二 百元买百鸡 穷举 知公鸡每只5元 母鸡每只3元 小鸡1元3只 可买公鸡 母鸡 小鸡几只 includeintmain intx y z for x 0 x 20 x for y 0 y 33 y for z 0 z 100 z if x y z 100 设x y z分别表示可买的公鸡 母鸡 小鸡的个数 有不定方程组 includeintmain intx y z for x 0 x 100 x for y 0 y 100 y for z 0 z 100 z if x y z 100 56 程序设计求Fibonacci数列 1 1 2 3 5 8 的前30个数 即 n1 1 n 1 n2 1 n 2 n n1 n2 n 3 算法如图所示 57 main 变量初始化n1 0 n2 1 for count 3 count 30 coumt 输出n n n1 n2 end n1 n2 n2 n 58 3 5结构化程序设计应用示例 输出裴波那契数列前30项值 递推 includeintmain intn1 n2 n count n1 0 n2 1 printf 10d 10d n1 n2 for count 3 count 30 count n n1 n2 printf 10d n if count 5 0 printf n 控制每行输出5个数n1 n2 n2 n printf n 59 3 5结构化程序设计应用示例 设计一个简单的菜单程序运行时 首先显示一个菜单画面用以提示输入操作选择操作员从菜单上选择一个操作 即输入相应的代码 例如1 2等 程序接收选择后调用相应的函数完成操作假设系统提供select insert update 和

温馨提示

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

评论

0/150

提交评论