




免费预览已结束,剩余78页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章 循环控制 主要内容 一 循环的概念二 用while语句实现循环三 用do while语句实现循环四 用for语句实现循环五 break语句和continue语句六 循环嵌套七 应用举例 思考 求1 100的累加和 分析 换一种思路 首先设置一个累计器sum 其初值为0 利用sum n来计算 n依次取1 2 100 只要解决以下3个问题即可 1 将n的初值置为1 2 每执行1次 sum n 后 n增1 3 当n增到101时 停止计算 此时 sum的值就是1 100的累计和 sum 1 2 100 sum sum n 格式 while 循环条件表达式 循环体语句 P70 说明 1 循环体如果包含一个以上的语句 必须使用复合语句形式 2 在循环体中 必须有使循环条件趋向于不满足 假 的语句 3 先判断表达式 后执行语句 功能 当表达式成立 表达式的值为非0值 时 执行while语句中的循环体语句 执行过程 5 1while语句 sum 凵5050 举例 例5 1 求1 100的累加和 includeintmain inti sum i 1 sum 0 while i 100 sum sum i i printf sum 5d n sum return0 思考 1 如果去掉循环体中的大括号 执行过程将会怎样变化 2 在循环体中 使循环条件趋向于不满足 假 的语句是哪条 3 变量i和sum在循环外不赋予初值行不行 i 1 sum 0 1求1 50的累加和 2求1 100的奇数和 3求1 100的偶数和 求1到100的奇数和 includeintmain inti sum i 1 sum 0 while i 100 sum sum i i i printf sum d n sum return0 运行结果 凵2500 说明 1 循环体如果包含一个以上的语句 应该用花括弧括起来 以复合语句形式出现 2 在循环体中应有使循环趋向于结束的语句 举例 练习 1 求1到100之间的偶数和 2 求N includeintmain inti sum 0 i 1 while i 100 if i 2 0 sum sum i i printf d n sum return0 includeintmain inti 1 n floatfac 1 printf 请输入n scanf d 运行结果 凵2550 请输入n 5运行结果 120 利用公式 sum 1 3 5 7 9 11 求前10项的和 includeintmain ints i sum t n i 0 n 1 sum 0 t 1 s 1 while i 10 sum sum t n n 2 s s t s n i printf sum d n sum return0 s 变化的符号i 第i项n 第i项的绝对值t 第i项的值sum 和 运行结果 sum 10 举例 举例 例5 2 设s 1 2 3 n 求s不大于400000时最大的n includeintmain intn 1 longints 1 while s 400000 n n 1 s s n printf 不大于400000时的最大n为 d ns值为 ld n n 1 s return0 运行结果 不大于400000时的最大n为 9s值为 3628800 前n项的乘积 举例 现有某班20名学生的C语言成绩 求该班学生的C语言的平均成绩 即 输入20个学生的成绩 计算平均值 输出平均值 分析 定义变量表示学生的成绩 全班总和 平均成绩 算法设计 第一步 输入20个学生的成绩第二步 计算成绩总和 用累加求和的方法 第三步 计算平均值 总和 人数 第四步 输出平均值 如果定义20个变量保存20个成绩 程序中计算成绩总和会有什么问题 回顾例题 求1到100的奇数和 includeintmain inti sum i 1 sum 0 while i 100 sum sum i i i 2 printf sum d n sum return0 用while循环实现累加求和 累加项是谁 累加项是如何不断被更新的 i i i 2 例题 现有某班20名学生的C语言成绩 求该班学生的C语言的平均成绩 即 输入20个学生的成绩 计算平均值 输出平均值 运行结果 请输入学生成绩 23凵89凵67凵78凵94凵56凵34凵83凵90凵67凵48凵72凵81凵65凵74凵87凵73凵67凵90凵98 20名学生的C语言平均成绩为 71 8 includeintmain floatscore total 0 average inti 1 printf 请输入学生成绩 while i 20 scanf f total前i名学生的成绩的和score每一名学生的成绩average平均成绩i用来计数 举例 从键盘输入一个非负整数 判断m是否是素数 素数 质数 只能被1和它本身整除的数 判别方法 57 若2 56之间的每一个数都不能整除56 则57为素数 否则57不是素数 m k m 1 i 2 k 若每一个i的值都不能整除m 则m为素数 否则m不是素数 flag 1 k m 1 for i 2 i k i if m i 0 flag 0 if flag 1 printf yes elseprintf no k m 1 for i 2 i k 1 printf yes elseprintf no k m 1 k m 2 m 1 2 k sqrt m sqrt m 1 include math h include stdio h intmain intm flag 0 i 2 k printf 请输入一个非负整数 n scanf d 举例 求两个非负整数m和n的最大公约数和最小公倍数 includeintmain intm n t printf 请输入两个非负整数 scanf d d 找m n中较小数 找m n中较大数 格式 do 循环体语句 while 循环条件表达式 说明 1 循环体如果包含一个以上的语句 必须使用复合语句形式 2 在循环体中 必须有使循环条件趋向于不满足 假 的语句 3 先执行循环体语句 后判断表达式的值 含义 执行do while语句中的循环体语句 直到表达式的值为假 0 才跳出循环 执行过程 至少执行一次 5 2do while语句 举例 例5 6求1 100之间的奇数和 includeintmain inti sum i 1 sum 0 do sum sum i i i while i 100 printf sum 5d n sum return0 思考 1 如果去掉循环体中的大括号会怎样 2 在循环体中 使循环条件趋向于不满足 假 的语句是哪条 运行结果 凵2500 举例 while和do while循环的比较 includeintmain inti sum 0 scanf d includeintmain inti sum 0 scanf d 输入 1 输入 11 sum 55 sum 11 此程序的功能 什么情况下两者结果相同 举例 例5 7设有一张厚为x毫米 面积足够大的纸 将它不断对折 试问对折多少次后 其厚度可达8848米的珠穆朗玛峰的高度 P76 includeintmain inti 0 floatx printf 请输入纸张的厚度 scanf f 数据描述 x 纸张厚度i 对折次数 对折后纸张厚度 运行结果 请输入纸张的厚度 1 折叠次数 24 格式 for 表达式1 表达式2 表达式3 语句 P77 for 循环变量赋初值 循环条件 循环变量增值 语句 执行过程 1 先求解表达式1 2 求解表达式2 若其值为真 则执行循环体语句 然后执行第 3 步 若为假 则结束循环 转到第 5 步 3 求解表达式3 4 转向步骤 2 5 循环结束 执行for语句下面的一个语句 5 3for语句 sum 5050 举例 求1 100的累加和 includeintmain inti sum sum 0 for i 1 i 100 i sum sum i printf sum 5d n sum return0 1求1 55的累加和 2求1 100的奇数和 3求1 100的偶数和 for 表达式1 表达式2 表达式3 语句 说明 三个表达式都可以省略 结果 说明 1 i 1 for i 10 i sum sum i 2 for i 1 i sum sum i 3 for i 1 i 10 sum sum i i for i 1 i 10 i sum sum i 表达式1可以省略 但其后的分号不可以省略 没有循环结束条件 构成了死循环 for i 1 i 10 i sum sum i 说明 4 5 for sum sum i 6 表达式1和表达式3可以是与循环变量无关的表达式 for i 10 sum sum i i 7 表达式2一般是关系表达式 也可以是数值或字符表达式 while i 10 sum sum i i while 1 sum sum i 表达式1和表达式3可以同时省略 此时等同于while语句 for sum 0 i 1 i 100 i sum sum i 建议 for语句中只放与循环控制有关的语句 说明 for i 0 c getchar n i c 在表达式2中先从终端接收一个字符赋给c 然后判断此赋值表达式的值是否不等于 n 换行符 如果不等于 n 就执行循环体 注意 此for语句的循环体为空语句 把本来要在循环体内处理的内容放在表达式3中 作用是一样的 可见for语句功能强 可以在表达式中完成本来应在循环体内完成的操作 说明 for c getchar n printf c c for语句中只有表达式2 而无表达式1和表达式3 其作用是每读入一个字符后立即输出该字符 直到输入一个 换行 为止 请注意 从终端键盘向计算机输入时 是在按Enter键以后才将一批数据一起送到内存缓冲区中去的 运行情况 Computer 输入 Computer 输出 而不是Ccoommppuutteerr 举例 includeintmain floatsum 0 0 intn for n 1 n 30 n sum sum float n float n 1 printf sum 5 2f n sum return0 例5 8 计算 格式 表达式1 表达式2 表达式n P79 说明 1 逗号表达式常用于for循环语句中 2 并不是在所有出现逗号的地方都组成逗号表达式 如 inta b c scanf d d d 含义 从左到右 依次计算各表达式的值 最后一个表达式的值即为整个逗号表达式的值 逗号运算符和逗号表达式 思考 是不是所有出现逗号的地方都组成逗号表达式 举例 例5 10若a 5 求下列表达式及经过运算后a的值 格式 while 表达式1 if 表达式2 break 举例 sum 0 for i 1 i5 break sum sum i printf sum 5d n sum while 表达式1 if 表达式2 conitue 结束整个循环 结束本次循环 sum 0 for i 1 i 10 i if i 5 continue sum sum i printf sum 5d n sum 5 4break和continue语句 举例 例5 11分析下面程序的运行结果 结束整个循环 includeintmain inti 0 a 0 while i 20 if i 10 0 break elsei i 11 a i printf d n a return0 ii 10第1次执行循环00条件表达式i 10 0成立 执行break语句 跳出循环 运行结果 11 举例 例5 12 输出100以内能被7整除的最大数 nn 7第1次执行循环1002第2次执行循环991第3次执行循环980第4次执行循环时条件表达式n 7 0成立 执行break语句 跳出循环 运行结果 100以内能被7整除的最大数为 98 举例 例5 13 分析下面程序的运行结果 结束本次循环 include stdio h intmain inti 0 s 0 do if i 2 n为奇数 i continue i s i while i 7 printf d n s return0 ii 2i scontinue是否执行第1次执行循环0011否第2次执行循环1121是第3次执行循环2034否第4次执行循环3144是第5次执行循环4059否第6次执行循环5169是第7次执行循环60716否此时条件表达式1 7不成立 结束循环 运行结果 16 includeintmain inti for i 1 i3 break if i 2 printf elsecontinue printf printf n return0 分析如下程序的输出结果 举例 举例 把100 200之间的能被13整除的数输出 include stdio h intmain intn for n 100 n 200 n if n 13 0 continue elseprintf d n printf n return0 运行结果 104117130143156169182195 说明 当n不能被13整除时 执行continue语句 结束本次循环 即跳过printf函数语句 只有n能被13整除时才执行printf函数 结束本次循环 1 三种循环语句在处理循环问题时 一般可以相互替代 2 对于循环次数固定的问题 用for语句实现比较简单 3 对于循环次数不确定的问题 可用while语句或do while语句实现 4 while语句 先判断 后执行 do while语句 先执行 后判断 6 7几种循环语句的比较 概念 一个循环体内又包含另一个完整的循环结构 称为循环嵌套 举例 例5 15马克思曾经做过这样一道趣味数学题 有30个人在一家小饭馆里用餐 其中有男人 女人和小孩 每个男人花3先令 每个女人花2先令 每个小孩花1先令 共花去50先令 问男人 女人和小孩各几人 男人 女人和小孩均存在 P83 include stdio h intmain intman women child for man 1 man 29 man for women 1 women 29 man women child 30 man women if man 3 women 2 child 1 50 printf man 6dwowen 6dchild 6d n man women child return0 5 5循环嵌套 男人人数 最多28人 女人人数 29 man 小孩人数 30 man women 运行结果 man 1women 18chile 11man 2women 16chile 12man 3women 14chile 13man 4women 12chile 14man 5women 10chile 15man 6women 8chile 16man 7women 6chile 17man 8women 4chile 18man 9women 2chile 19 举例 例5 16打印乘法口诀表 include stdio h intmain inti j result for i 1 i 9 i for j 1 j 9 j result i j 计算i行j列上的元素值printf d d 3d t i j result printf n return0 resulti 1 j 11 1j 21 2j 31 3 j 91 9i 2 j 12 1j 22 2 j 92 9 i 9 j 19 1j 29 2 j 99 9 1 1 11 2 2 1 9 92 1 22 2 4 2 9 18 9 1 99 2 18 9 9 81 124369481216 includeintmain inti j for i 1 i 4 i for j 1 j i j printf 4d i j printf n return0 思考1 includeintmain inti j for i 1 i 4 i for j 1 j 5 i j printf 4d i j printf n return0 思考2 1234246364 includeintmain inti j for i 1 i 4 i for j 1 j 4 i j printf 4c for j 5 i j 4 j printf 4d i j printf n return0 思考3 4686912481216 includeintmain inti j for i 1 i 4 i for j 1 j i 1 j printf 4d for j i j 4 j printf 4d i j printf n return0 思考4 123446891216 举例 例5 17求Fibonacci数列的前40个数 按每行4个进行输出 include stdio h intmain intn longintf1 f2 f1 1 f2 1 printf 10d 10d f1 f2 for n 1 n 19 n if n 2 0 printf n f1 f1 f2 f2 f2 f1 printf 10d 10d f1 f2 printf n return0 特点 第1 2个数为1 1 从第三个数开始 该数是其前面两个数之和 F1 1 n 1 F2 1 n 2 Fn Fn 1 Fn 2 n 3 1123581321345589144 5 8程序举例 求Si a aa aaa 的值 如a 5 i 3时 即求表达式5 55 555的值 a和i由键盘输入 举例 include math h include stdio h intmain intj i a s 0 printf 请输入a和i的值 n scanf d d pow 函数 求xy 程序显示 请输入a和i的值 用户输入 53并回车程序输出 SUM 615 i 第i项n 第i项的分母t 第i项的值sum 和 举例 利用公式 sum 1 1 3 1 5 1 7 1 9 求前10项的和 include includeintmain ints i n floatt sum i 0 n 1 sum 0 t 1 0 while i 10 sum sum t n n 2 t 1 0 n i printf sum 2f n sum return0 运行结果 sum 2 13 举例 利用公式sum 1 3 5 7 9 11 求前10项的和 include includeintmain ints i sum t n i 0 n 1 sum 0 t 1 s 1 while i 10 sum sum t n n 2 s s t s n i printf sum d n sum return0 s 变化的符号i 第i项n 第i项的绝对值t 第i项的值sum 和 运行结果 sum 10 举例 利用公式 4 1 1 3 1 5 1 7 求 的近似值 直到某一项的绝对值小于10 6为止 include includeintmain ints floatn t pi t 1 pi 0 n 1 0 s 1 while fabs t 1e 6 pi pi t n n 2 s s t s n pi pi 4 printf pi 10 6f n pi return0 思考 使用那一种循环控制语句 pi 1 1 3 输出4 pis 1 1 n 1 3 5 7 t s n 运行结果 sum 3 141594 举例 输出101 200之间的全部素数 每行输出10个 include includevoidmain intm k i n 0 for m 101 m k 1 printf d m n n 1 if n 10 0 printf n printf n 正常结束循环 m不是素数 例5 18用双重for循环打印出下列图形 P86 include stdio h intmain inti j for i 1 i 4 i for j 1 j 4 i j printf for j 1 j 2 i 1 j printf printf n for i 1 i 3 i for j 1 j i j printf for j 1 j 7 2 i j printf printf n return0 打印上三角 1 4行 打印下三角 1 3行 include stdio h intmain charch intletter 0 space 0 number 0 other 0 printf 请输入一串字符 scanf c letter 字符个数space 空格个数number 数字个数other 其它字符个数 举例 译密码 输入一行字符 输出其相应的密码 译码规律 将字母变成其后的第4个字母 非字母字符不变 includevoidmain charc while c getchar n if c a 循环部分编程及上机要注意的问题 1 for循环的末尾不能有 for i 0 i 10 i 2 循环控制变量在循环体内最好不要重新赋值 x a for x 1 x n x sn sn x x x 10 a 3 注意循环中使用的 m a for x 1 x n x sn sn m m m 10 a for x 1 x n x y pow 10 x 1 a 9sn sn y 4 countine的用法 当countine后面没有语句时 可以省略 for x 1 t 0 x n x t t a sn sn t a a 10 if i 7 0 printf 8d i elsecountine 注意 一 选择题C语言程序的三种基本结构是顺序结构 选择结构和 A 递归结构B 转移结构C 循环结构D 嵌套结构2 下面程序段中while循环执行的次数是 intt 0 while t 1 t t 1 A 无限次B一次也不行C执行一次D有语法错 不能执行3 以下程序的输出结果是 includeintmain inti sum for i 1 i 6 i sum i printf d n sum return0 A 15B 14C 0D 不确定 作业及练习 4 设x和y均为int型变量 则执行下面的循环后 x值为 for y 1 x 1 y 10 break if x 2 1 x 5 continue x 3 printf d x A 4B 6C 8D 10 5 指出程序结束之时 i j k的值 include stdio h intmain inta 10 b 5 c 5 d 5 inti 0 j 0 k 0 for a b b i while a c j dok while a d return0 A i 5j 5k 6B i 5j 4k 6C i 6j 5k 7D i 6j 6k 6 6 下面程序的输出是 includeintmain inti j for i 0 j 10 i j i 2 j j 1 printf i d j d n i j return0 A i 8 j 6B i 8 j 5C i 8 j 7D i 8 j 8 7 若已有定义inti j k 执行语句scanf d d 2d 时的键盘输入为 123456789所得的i j k的值分别为 A 123 456和789B 1 2和3C 123 456和78D 1 4和78 8 若已定义inti x 则for i 0 x 0 i 9语句输入a b的值时 不可以用 作为输入的分隔符 A B 空格C 回车D Tab 10 执行下列程序的输出显示是 intmain intx 1 y 2 z z x y printf d d d n x y z return0 A 223B 123C 224D 134 11 有以下程序段 其中x为整形变量 x 0 while x 0 x 一下选项中正确的是 A 退出循环后x得值为0B 退出循环后x得值为1C while的控制表达是非法D while循环执行无数次 12 表达式3 6 9的值为 A 3B 6C 9D 1 13 以下while循环中 循环体执行的次数是 k 1 while k k 10 A 10次B 一次也不执行C 无限次D 1次 14 有以下程序段 其中t为整形变量 t 1 while 1 t if t break 以下选项中叙述正确的是 循环1次也不执行B 循环执行一次C 循环控制表达式不合法D 循环执行两次15 有以下程序段 其中x为整形变量 x 1 do while x printf x d n x 以下选项中叙述正确的是 程序错误B x 1C x 1D x 0 1 下面程序的输出结果是 include stdio h intmain intx i for i 1 i 100 i x i if x 2 0 if x 3 0 if x 7 0 printf d n x return0 2 下面程序的输出结果是 include stdio h intmain inti k 19 while i k 1 k 3 if k 5 0 i continue elseif k 5 break i printf i d k d n i k return0 二 程序分析题 3 下面程序的输出结果是 include stdio h intmain inti j floats for i 6 i 4 i s 0 0 for j i j 3 j s s i j printf f n s return0 4 下面程序的输出结果是 include stdio h intmain inta 10 b 0 while a 0 a if a 3 0 continue b if a 4 break printf b d n b return0 5 下面程序的输出结果是 includeintmain inti k 19 while i k 1 k 3 if k 5 0 i continue elseif k 5 break i printf i d k d n i k return0 6 下面程序的输出结果是 includeintmain inti j floats for i 6 i 4 i s 0 0 for j i j 3 j s s i j printf f n s return0 7 下面程序的输出结果是 includeintmain inta b for a 1 b 1 a 10 break if b 3 1 b 3 continue printf d n a return0 8 下面程序的输出结果是 includeintmain intI 0 for I 3 I 5 I I 2 switch I 5 case0 printf case1 printf break default printf break case2 printf 9 当给x输入789时 下面程序段的输出结果是 intmain intr x printf Inputx scanf d 12 下面程序段的输出结果是 intn 0 while n 2 printf d n n 13 下面程序段的输出结果是 intk 10 while k 0 k k 1 14 下面程序段的输出结果是 intx for x 3 x 6 x printf x 2 d d n x 15 下面程序段的输出结果是 intmain intx 2 while x printf d n x return0 1 下面程序功能是打印100以内个位数为6且能被3整除的所有数 includeintmain inti j for i 0 i j i 10 6 if continue printf d j return0 三 程序填空题 2 下面程序的功能是求1至1000之间满足 用3除余2 用5除余3 用7除余2 的数 且一行只打印五个数 include stdio h intmain inti 1 j 0 do if printf 4d i j j 1 if printf n i i 1 while i 1000 return0 3 下面程序的功能是计算正整数234的各位数字之和 includeintmain intn sum 0 n 234 while n sum n 10 n 1 printf sum d n sum return0 4 下面程序的功能是计算xy includeintmain inti doublex y z printf Inputx y scanf f f 1 输入一整数初始值 输出该初始值后的20个不能被3整除的自然数 四 编程题 include stdio h intmain intnum count 0 printf 请输入初始数值num的值 n scanf d 2 鸡和兔一共有40只 脚共有100只 计算鸡兔各有多少只 include stdio h intmain intchicken rabbit for chicken 1 chicken 40 chicken rabbit 40 chicken if chicken 2 rabbit 4 100 printf 鸡 d t兔 d t n chicken rabbit return0 3 求1 1 2 1 2 3 1 2 3 n 的值 include stdio h intmain ints 0 sum 0 i n printf 请输入n的值 n scanf d 4 打印出所有的 水仙花数 所谓 水仙花数 是指一个三位数 其各位数字立方和等于该数 例 153 13 53 33 include stdio h intmain intnum x y z for num 100 num 1000 num x num 100 y num 10 10 z num 10 if x x x y y y z z z num printf d n num return0 5 输入两个正整数m和n 用辗转相除法求m和n的最大公约数 然后再求它们的最小公倍数 include stdio h intmain intm n r temp printf 请输入m和n的值 n scanf d d 6 求100 200之间的素数 把它们按每行5个数全部显示出来 并给出素数的个数 include includeintmain intm k i n 0 for m 101 m k 1 printf d m n n 1 if n 5 0 printf n printf n return0 includeintmain inti j result for i 1 i 9 i for j 1 j i j result i j printf d d 3d t i j result printf n return0 7 打印如下的9 9乘法表 1 1 12 1 22 2 4 9 1 99 2 18 9 9
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 创新技术面试题目及答案
- 文化娱乐行业线上线下融合发展趋势报告
- 邮储银行2025南平市半结构化面试15问及话术
- 工商银行2025黄南藏族自治州金融科技岗笔试题及答案
- 2025年3D打印技术的快速成型
- 邮储银行2025宣城市数据分析师笔试题及答案
- 2025年3D打印技术的产业变革潜力
- 中国银行2025岳阳市秋招面试典型题目及参考答案
- 农业银行2025巴彦淖尔市秋招英文面试题库及高分回答
- 建设银行2025白山市秋招无领导小组面试案例题库
- iso28000-2022供应链安全管理手册程序文件表单一整套
- DB21∕T 3149-2019 玉米秸秆还田机械化作业技术规程
- 报价函(工程项目招标文件资料)
- 【退休欢送会】课件
- 中小学幼儿园食堂食品安全培训课件
- 电力增容项目施工组织设计
- 重大(2023)版信息科技五年级上册教学设计
- 《语言学概论》教案(完整版)
- 大件设备海运包装方案
- 2024年全国营养师技能大赛职工组(营养与体重管理)理论参考试题库(含答案)
- 跨平台智能汽车故障预警
评论
0/150
提交评论