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

下载本文档

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

文档简介

何平2020 1 1 1 第4章循环结构程序设计 何平2020 1 1 2 循环结构程序设计 示例1 编写满足1 2 3 n 500中最大的n及累加和的程序 本题是一个累加求和的问题 当累加和sum 500时反复执行循环体 n n 1 sum n 否则结束循环 何平2020 1 1 3 内容 1 自增 自减及逗号表达式运算2 循环语句while do while for3 break和continue语句 重点 循环结构的编程 何平2020 1 1 4 循环结构需要解决的两个问题 控制循环执行的条件表示可以使用c中的任意表达式 一般是关系表达式或逻辑表达式循环结构的结构描述 何平2020 1 1 5 格式 while 表达式 语句 0 真 非0 表达式 循环体外语句 语句 执行流程 while语句 注意使用复合语句 何平2020 1 1 6 示例1 编写满足1 2 3 n 500中最大的n值及其累加和的程序 includeintmain intn 1 sum 1 while sum 500 n n 1 sum n sum sum n n n 1 printf n d sum d n n sum return0 可使用自增运算符描述来提高编译效率 n while 表达式 语句 何平2020 1 1 7 示例1 编写满足1 2 3 n 500中最大的n值及其累加和的程序 includeintmain intn 1 sum 1 while sum 500 n n 1 sum n sum sum n n n 1 printf n d sum d n n sum return0 可使用自增运算符描述来提高编译效率 n while 表达式 语句 何平2020 1 1 8 自增和自减运算符 运算符的作用是使变量的值增1 运算符的作用是使变量的值减1 常见的用法有 i i在使用i前 先使i的值加 减 1i i 在使用i后 先使i的值加 减 1 何平2020 1 1 9 示例 已知i 5j i j i j i j i 5 6 6 6 i 1不等同于 i 何平2020 1 1 10 注意 1 自增和自减运算符只能用于变量 表达式 x y 是不合法的 2 自增和自减运算符的结合方向是 自右向左 如表达式 i x等价于 i x 何平2020 1 1 11 练习 已知a 3 b 0 c 2 则执行下列表达式后a b c分别是多少 1 a b c 2 a b c 何平2020 1 1 12 练习 以下选项中与if a 1 a b elsea 语句功能不同的switch语句是A switch a B switch a case1 a b break default a break default a case1 a b C switch a 1 D switch a 1 case0 a b break case1 a b break case1 a case0 a 何平2020 1 1 13 逗号运算符和逗号表达式逗号运算符 逗号表达式 表达式1 表达式2求解过程 先求解表达式1 再求表达式2 整个逗号表达式的值是表达式2的值 何平2020 1 1 14 逗号运算符和逗号表达式 续 例如a 4 6 a 5 整个逗号表达式的值为29 注意一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式 例如 a 4 6 a 5 a 6 整个表达式的值为30 逗号运算符是所有运算符中级别最低的 何平2020 1 1 15 练习 下面程序段的输出结果 inta b c a b c 5 b b c printf a d b d c d n a b c a 11 b 6 c 6 何平2020 1 1 16 复习小结 续 格式 while 表达式 语句 while语句 何平2020 1 1 17 练习 下面程序段的输出结果 inta 10 b 10 c d c a b a b d a b a b printf a d b d c d d d n a b c d a 10 b 10 c 12 d 11 何平2020 1 1 18 格式 do语句while 表达式 真 非0 表达式 语句 循环体外语句 执行流程 do while语句 假 0 何平2020 1 1 19 示例 includeintmain intk 100 while k 0 k printf d k return0 includeintmain intk 100 dok while k 0 printf d k return0 结果 何平2020 1 1 20 示例1 编写满足1 2 3 n 500中最大的n值及其累加和的程序 第二种解法 includeintmain intn 1 sum 1 do n sum n while sum 500 sum sum n n printf n d sum d n sum return0 当sum 500时 何平2020 1 1 21 示例2 求两个数m和n的最大公约数 当mm r nm n r直到r 0时 输出n的值 当r 0时 输出n值 何平2020 1 1 22 当r 0时 输出n值 includeintmain intm n r scanf d d 何平2020 1 1 23 includeintmain longa 1 b 1 intj 1 while j 15 printf ld t ld t a b a a b b b a j return0 示例3 请编程输出一数列 已知第一 第二个数都是1 从第三个数开始 每个数都是与其相邻的前两个数之和 求这一数列的前30个数 请编程 思考 若将其改为求这一数列 直到其数不小于105 应该如何编程 何平2020 1 1 24 思考 已知第一 第二个数都是1 从第三个数开始 每个数都是与其相邻的前两个数之和 请完成程序填空 输出该数列 直到其数不小于105 变量定义 a 1 b 1 输出a值 当b 105时 输出b值 a a b a b值互换 includeintmain longa 1 b 1 c printf n ld t a while b 1e 5 printf ld t b a a b c a a b b c return0 何平2020 1 1 25 格式 for 表达式1 表达式2 表达式3 语句 0 真 非0 计算表达式2 语句计算表达式3 循环体外语句 计算表达式1 执行流程 for语句 表达式1 2 3可以是任何类型的表达式 甚至可以省略 何平2020 1 1 26 示例1 编写满足1 2 3 n 500中最大的n并求其和的程序 第三种解法 includeintmain intn sum 0 for n 0 sum 500 sum n n sum sum n n printf d d n sum return0 includeintmain intn sum for n 0 sum 0 sum 500 n sum n sum sum n n printf d d n sum return0 for 表达式1 表达式2 表达式3 语句 何平2020 1 1 27 includeintmain inti 1 sum 0 while i 10 sum sum i i printf d sum return0 练习 用循环结构编程 计算1 2 10 思考 求若干个整数的累加和 应如何编程 includeintmain inti sum for i 1 sum 0 i 10 i sum sum i printf d sum return0 何平2020 1 1 28 思考 求若干个整数的累加和 应如何编程 输入x的值 sum x includeintmain intn x j sum printf 请输入需要求和的整数个数 scanf d for j 1 sum 0 j n j 注意 求若干个整数中正数的累加和 0的个数 应如何编程 何平2020 1 1 29 示例4 在3 1000之间所有3的倍数中 找出个位数为2的数 定义变量i for i 3 i 1000 i 3 i 10 2 输出i值 includeintmain inti i从3开始 每循环一次增加3 for i 3 i 1000 i 3 if i 10 2 i 10的值就是i的个位数 printf 8d i printf n return0 何平2020 1 1 30 复习 for 表达式1 表达式2 表达式3 语句 do语句while 表达式 includeintmain inta 0 j for j 0 j 2 j switch j case0 case1 a 3 default a 5 printf d n a return0 何平2020 1 1 31 示例5 猴子吃桃 第一天摘下若干个桃子 当天吃了一半后又多吃了一个 从第二天起 猴子每天都是吃了前一天剩下的一半多1个桃子 到第10天 猴子想吃桃子时发现只剩下了1个桃子 请编程计算猴子第一天共摘下多少个桃子 分析 根据题意 可以依次从第10天推出第九天的桃子数 从第九天推出第8天的桃子数 用循环的算法来解决 循环变量控制天数 从10至1 循环体 n1 n2 1 2和n2 n1其中n2为当天的桃子数 n1为前一天的桃子数 何平2020 1 1 32 参考源程序 includeintmain inti n1 n2 n2为当天的桃子数 n1为前一天的桃子数 for i 10 n2 1 i 1 i n1 n2 1 2 依次求出前一天的桃子数 n2 n1 printf 第1天摘的桃子数为 d n n1 return0 递推法 何平2020 1 1 33 includeintmain intj find x scanf d 示例6 阅读下列算法 完成什么功能 for j 2 find 1 j x 1j find 0 输出 是 标志 输出 不是 标志 通过设置标志位 来控制循环 何平2020 1 1 34 示例7 编程对任意n个不小于3的正整数 求出素数的累加和 for i 1 i n i 输入x的值 for j 2 find 1 j x 1j find 0 0 1 s x 输出s的值 何平2020 1 1 35 一个循环体内又包含另一个完整的循环结构 称为循环的嵌套 内嵌的循环中还可以嵌套循环 这就是多重循环 循环的嵌套 何平2020 1 1 36 for while do for while while for for for 注意 以下四种均为合法的嵌套循环结构 何平2020 1 1 37 示例7 对任意n个不小于3的正整数 求出素数的累加和 请编程 for i 1 i n i 输入x的值 for j 2 find 1 j x 1j find 0 0 1 s x 输出s的值 控制数据的个数 输入需处理的数据 scanf d 通过循环判断是否是素数 根据判断结果 进行相应处理 for j 2 find 1 j x 1 if find 1 s x includeintmain inti find x n j s 0 scanf d 何平2020 1 1 38 思考 以下程序的输出结果是 includeintmain inti k for i 0 i 4 i i for k 1 k 3 k printf return0 何平2020 1 1 39 练习 阅读下列源程序 写出运行结果 includeintmain inti j for i 1 i 9 i for j 1 j i j printf 3d i j printf n return0 何平2020 1 1 40 输出结果 12436948121651015202561218243036714212835424981624324048566491827364554637281 何平2020 1 1 41 break语句用于循环语句和switch语句 作用 跳出循环语句和switch语句 while if break includeintmain inti s 0 for i 1 i 5 break printf s d n s return0 break语句 示例 何平2020 1 1 42 示例8 对任意不小于3的正整数 判断其是否是素数 请编程 includeintmain intj find x scanf d 通过break语句提前结束循环 何平2020 1 1 43 示例6 解法2 对任意不小于3的正整数 判断其是否是素数 请编程 include includeintmain intx j scanf d 何平2020 1 1 44 continue语句类似于break语句 但不是退出循环 而是跳过循环体下面未执行的语句 接着执行循环下一次迭代 如 while if continue continue语句 includeintmain intn for n 100 n 200 n if n 3 0 continue printf 5d n return0 功能 何平2020 1 1 45 示例9 以下程序运行后的输出结果是 includeintmain intk 1 s 0 do if k 2 0 continue s k k while k 10 printf s d n s return0 s 0 何平2020 1 1 46 while循环 do循环 for循环 小结 1 顺序结构程序设计 2 选择结构程序设计 3 循环结构程序设计 注意 break和continue语句的应用 库函数调用语句 赋值等表达式语句 if语句 switch语句 条件表达式 case后的表达式中不能出现变量 并且数据类型必须是整型或字符型 各常量表达式必须互不相同 何平2020 1 1 47 示例10 百钱买百鸡问题 公鸡每只5元 母鸡每只3元 小鸡3只一元 问一百元买一百只鸡有几种解法 includeintmain intx y z for x 0 x 19 x for y 0 y 33 x y z 100 x y if 5 x 3 y z 3 100 printf x dy dz d n x y z return0 枚举法 z 3 0 何平2020 1 1 48 思考1 若打印如下图形 应该如何编写程序 光标换行 for i 1 i 2 j 1 i printf printf n n行 for i 1 i n j i printf includeintmain intn i j printf 请输入图形的行数 scanf d 何平2020 1 1 49 思考2 请使用循环结构编程 打印出由n行 号组成的如下图形 n行 何平2020 1 1 50 示例11 请使用循环结构编程 打印出由n行 号组成的如下图形 光标换行 for i 1 i j i printf printf n includeintmain intn i j printf 请输入图形的行数 scanf d n行 何平2020 1 1 51 补充 字符输入 输出函数 格式 getchar 功能 从标准设备 一般是键盘 输入一个字符 getchar函数没有参数 函数值就是从设备输入的字符 头文件为stdio h 何平2020 1 1 52 补充 字符输入 输出函数 格式 putchar c 功能 将c值所对应的字符输出到标准输出设备上 输出设备一般为显示器 c可以是整型或字符型 一次只能输出一个字符 头文件为stdio h 何平2020 1 1 53 示例11 编程 对键盘输入的任何一个大写英文字符输出与此对应的小写字符 输入cc c 32输出c 转换的算法 何平2020 1 1 54 includeintmain charc c getchar c c 32 putchar c return0 输入c 转换 输出 scanf c printf c c 何平2020 1 1 55 示例12 阅读下列源程序 总结其功能 includeintmain intsum 0 charc while c getchar n sum c printf nsum d sum return0 运行时输入 AaBb 功能 由键盘输入一个字符串 计算该字符串各字符对应的ASCII码值的累加和 思考 请编程实现 输入一行字符 分别统计出其中英文字母 空格 数字和其他字符的个数 何平2020 1 1 56 判断 完数 参考算法 1 m 22 当m 1000时 反复执行 2 1 2 2 2 3 2 4 否则转步骤3 2 1 k m 2 n 0 j 1 2 2 当j k时 反复执行 2 2 1 2 2 2 否则转 2 3 2 2 1 if j是m的因子 执行n n j 2 2 2 j 2 3 if m等于n 则输出完数m 2 4 m 何平2020 1 1 57 练习 1 执行下面程序片段的结果是 intx 23 do printf 2d x while x 22 何平2020 1 1 58 练习 续 2 请写出以下源程序的运行结果 includeintmain inta 1 b 4 k k a 0 103 何平2020 1 1 59 练习 续 3 以下程序运行后的输出结果是 includeintmain charc intn 100 floatf 10 doublex x f n c 50 printf d f n n x return0 220 000000 何平2020 1 1 60 练习 续 4 以下程序运行后的输出结果是 includeintmain inta 1 b 2 c 3 if c a printf d n c elseprintf d n b return0 1 何平2020 1 1 61 5 有以下程序 运行后的输出结果是 includeintmain intk 5 n 0 while k 0 switch k default break case1 n k case2 case3 n k k printf d n n return0 7 何平2020 1 1 62 6 有以下程序 运行后的输出结果是 includeintmain inta 1 b 2 c 3 d 0 if a 1 1 3 3 何平2020 1 1 63 7 设变量已正确定义 以下不能统计出一行中输入字符个数 不包括回车符 的程序段是 A n 0 while ch getchar n n B n 0 while getchar n n C for n 0 getchar n n D n 0 for ch getchar ch n n D 何平2020 1 1 64 8 有以下程序 运行时 输入的值在哪个范围才会有输出结果 includeintmain intx scanf d 大于3且不等于10的整数 何平2020 1 1 65 9 有以下程序 运行时 输入65回车后 能否有输出结果 结束运行 includeintmain charc1 c2 scanf c 不能 何平2020 1 1 66 10 以下程序运行时 若输入1abcedf2df回车输出结果是 includeintmain chara 0 ch while ch getchar n if a 2 0 1AbCeDf2dF 何平2020 1 1 67 思考题 1 设a b和c都是int型变量 且a 3 b 4 c 5 下列哪个表达式的值为0 A a b B a bC a b c b cD a b c 1 2 设inta 12 则执行完语句a a a a后 a的值是 264 何平2020 1 1 68 3 设ch是char型变量 其值为 b 且有下面的表达式 ch ch a 则不能使float型变量k得到正确数值的原因是什么 B 何平2020 1 1 69 5 设a b c为整型数 且a 2 b 3 c 4 则执行完以下语句 a 16 b c 后 a的值是多少 6 若有程序intmain intj1 j2 scanf j1 d j2 d 要求给j1赋20 给j2赋10 则应该从键盘如何输入 32 何平2020 1 1 70 7 以下程序的功能是 从键盘上输入若干个学生的成绩 统计并输出最高成绩和最低成绩 当输入负数时结束输入 请完成程序段 循环条件 循环体 的填空 何平2020 1 1 71 includeintmain floatx amax amin scanf f x 0 if amax x amax x elseif amin x amin x scanf f 何平2020 1 1 72 8 已知i j k为int型变量 若从键盘输入 1 2 3 使i值为1 j值为2 k的值为3 则正确的输入语句是什么 9 设a和b均为double型变量 且a 6 5 b 3 5 则表达式 int a b b的值是多少 10 下列程序段的运行结果是多少 intmian intx 5 y 2 printf d n y x y return0 7 000000 2 何平2020 1 1 73 11 执行下面的程序时从键盘上输入3和4 其结果是多少 includeintmain inta b s scanf d d 9 何平2020 1 1 74 12 请写出下列程序的运行结果 includeintmain intj1 1 j2 1 k 2 if j2 k 2 2 2 何平2020 1 1 75 13 includeintmain charc while c getchar putchar c return0 程序运行时 如果从键盘输入 Y N 则输出结果是多少 Z 何平2020 1 1 76 14 请写出下列程序的运行结果 includeintmain inta b for a 1 b 1 a 20 break if b 4 1 b 4 continue b 5 printf a d b d n a b return0 a 6 b 21 何平2020 1 1 77 15 请写出下列程序的运行结果 includeintmain intx 14 whil

温馨提示

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

评论

0/150

提交评论