




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章循环结构程序设计 5 1while语句5 2do while语句5 3for语句5 4goto语句以及用goto语句构成的循环5 5break语句和continue语句5 6循环的嵌套5 7循环结构程序设计举例 5 1while语句 真 非零 循环体 假 零 1 while语句的形式 while 表达式 循环体 2 while语句常称为 当型 循环语句 例1 求1 2 3 100之和 main intn sum sum 0 n 1 while n 100 sum sum n n n 1 printf sum d sum 思考 1 求1 3 5 99之和 2 求1 4 7 前20项之和 main intn sum 0 n 1 while n 20 sum 3 n 2 n printf sum d sum 例2 求n main inti n longf 1 i 2 scanf d 求1 2 3 10 main intn longfact sum 0 n fact 1 while n 10 fact fact n sum fact n printf 1 2 3 10 ld sum 例3 求1 x x2 2 x3 3 直到最后一项的绝对值小于0 000001为止 include math h main floatx term sum 0 intn term 1 n 0 scanf f 例 分析下列程序段的循环次数 i 1 while i 100 putchar i 例4 输入任意一个整数 将其逆序输出 例如输入1234 输出4321 voidmain longy n scanf ld 5 2do while语句 1 do while的形式 do 循环体 while 表达式 2 do while语句常称为 直到型 循环语句 真 非零 循环体 假 零 3 说明 先执行语句 后判断表达式 第一次条件为真时 while do while等价 第一次条件为假时 二者不同 例5 用do while语句编写程序统计从键盘输入的一行非空字符的个数 以回车键作为输入结束标记 include stdio h voidmain charch intnum 0 ch getchar do num ch getchar while ch n printf num d n num 注意 在if while语句中 表达式后面都没有分号 而在do while语句的表达式后面则必须加分号 do while和while语句相互替换时 要注意修改循环控制条件 5 3for语句 1 for的形式 for 表达式1 表达式2 表达式3 循环体 表达式3 计算表达式1 循环体 假 零 非零 for的下一条语句 2 执行过程 真 1 for语句中表达式省略的形式 1 for语句一般形式中的 表达式1 可以省略 如 sum 0 i 1 for i 100 i sum sum i 求前100个自然数之和 sum 0 for i 1 i 100 i sum sum i 2 表达式3也可以省略for sum 0 i 1 i 100 sum sum i i 求前100个自然数之和 sum 0 for i 1 i 100 i sum sum i sum sum i 3 表达式2省略 认为是恒真条件 即不判断循环条件 循环无终止地进行下去 如 for sum 0 i 1 i sum sum i 这样就形成了死循环 为了避免死循环的出现 在循环体中 往往需要有条件地加上break语句 以适时结束循环 如 for sum 0 i 1 i if i 100 break sum sum i 5 三个表达式都可省略 如for 循环体 如 sum 0 i 1 for if i 100 break sum sum i i 6 循环体为空语句对for语句 循环体为空语句的一般形式为 for 表达式1 表达式2 表达式3 如 for sum 0 i 1 i 100 sum i i for sum 0 i 1 i 100 sum i 例6判断一个数是否为素数 质数 判断区间 2 x 1 2 x 2 2 sqrt x 典型例题分析 voidmain intx k n scanf d include math h voidmain intx k n scanf d 编程方法 递推法 例7裴波那契数列的第1 2项分别为1 1 以后各项的值均是其前两项之和 求前20项菲波那契数 就是从初值出发 归纳出新值与旧值间的关系 直到求出所需值为止 新值的求出依赖于旧值 不知道旧值 无法推导出新值 数学上递推公式正是这一类问题 递推法 voidmain longf1 1 f2 1 f3 intk printf 12ld 12ld f1 f2 for k 3 k 20 k f3 f1 f2 printf 12ld f3 if k 5 0 printf n f1 f2 f2 f3 注意f1 f2 f3 x的类型 递推 5 4goto语句以及用goto语句构成的循环 1 语句形式 goto语句标号 例如 gotolabel label 语句标号用标识符表示 它的定名规则与变量名相同 2 语句执行流程 在程序执行过程中 如果遇到goto语句 则程序执行流程无条件地转向语句标号后的语句继续执行 例8 分析下面程序的运行结果 include stdio h voidmain charc loop c getchar if c n gotoend putchar c gotoloop end printf Theend n 程序运行情况为 123asd 123asdTheend 1 break语句 5 5break语句和continue语句 1 语句形式 break 2 作用 结束break所在的switch语句 结束当前循环 跳出break所在的循环结构 例9 求300以内能被17整除的最大的整数 include stdio h voidmain intx k for x 300 x 1 x if x 17 0 break printf x d n x 找到满足条件的最大数 结束循环 1 语句形式 continue 2 语句作用 结束本次循环 2 continue语句 3 语句执行流程 continue语句可以结束本次循环 即不再执行循环体中continue语句之后的语句 转入下一次循环条件的判断与执行 例10 求300以内能被3整除的所有整数 include stdio h voidmain intx k for x 1 x 300 x if x 3 0 continue printf d t x 在循环体语句中又包含有另一个完整的循环结构的形式 称为循环的嵌套 如果内循环体中又有嵌套的循环语句 则构成多重循环 5 6循环的嵌套 while do while for三种循环都可以互相嵌套 例11 输出图形 编程分析 采用双重循环 一行一行输出 每一行输出步骤 一般3步 1 光标定位 3 每输完一行光标换行 n 2 输出图形 例如本题 共4行 若行号用k表示 则每一行有2 k 1个 号 include stdio h voidmain inti j for i 1 i 4 i for j 1 j 40 i j putchar for j 1 j 2 i 1 j putchar putchar n 定位 输出 例12百钱买百鸡 公鸡5元一只 母鸡3元一只 小鸡1元三只 一百元买一百只鸡 且公鸡 母鸡 小鸡都要有 有几种买法 编程方法 枚举法 或 穷举法 按问题本身的性质 一一列举出该问题所有可能的解 从中找出问题的真正解 对于所列举的值 既不能遗漏也不能重复 voidmain inti j k n 0 for i 1 i 20 i for j 1 j 33 j k 100 i j if 5 i 3 j k 3 0 100 n printf i d j d k d n i j k printf nn d n 5 7循环结构程序设计举例 例13 编程输出200 300之间的所有素数 并输出它们的和 main intn sum 0 i for n 200 nn 2 sum n printf 5d n printf nsum f sum 例14 猴子第一天摘下若干个桃子 当即吃了一半 又多吃了一个 以后每天早晨猴子都吃掉前一天剩下的一半多一个 到第10天时 猴子再去吃桃子时发现只剩下1个桃子 问
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论