




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
5 1while语句5 2do while语句5 3for语句5 4break continue和goto语句5 5循环的嵌套5 6复合结构程序举例 第5章循环结构程序设计 教学目的和基本要求 要求学生了解循环结构程序设计 掌握各种循环语句应用的特点及异同点 掌握循环嵌套及复合结构 教学重点 各种循环语句应用的特点及异同点 scanf f 这样重复一百次 然后输出s的值 这样写显然非常麻烦 我们注意到程序中的scanf f 两句话是一直重复的 如果能用一种语句 使这两句话能自动的重复执行一百次 就可以简化了书写的麻烦 这就是循环语句 编程解决这样的一个问题 从键盘输入一百个学生的成绩 求总成绩 从前面所学 有两种解决方法 1 设一百个变量 分别输入学生的成绩 然后求和 这种方法浪费内存空间 显然不实际 2 设一个变量 每次输入一个学生成绩 累加后再输入下一个学生成绩 如下 C语言有while do while和for语句三种循环结构语句 前两个称为条件循环 即根据条件来决定是否继续循环 后一个称为计数循环 即根据设定的执行次数来执行循环 5 1while语句 一般形式 while 表达式 语句 1 计算表达式 2 如果表达式的值为非零 执行语句 3 返回第一步 重新计算表达式 4 如果表达式的值为零 则结束循环 如果表达式的值一开始就为0 则语句一次也不会被执行 执行流程 例5 1写一个程序 输入一个班学生的成绩 求全班的平均成绩 分析 考虑到成绩没有负数 这就可以把循环条件定为每当输入的分数大于等于0时就继续输入成绩 输入的分数小于0时就停止输入 解题步骤如下 1 输入一个分数 2 当 分数 0 时 做下列工作 累计总分 人数加一 输入下一分数 3 重复第 2 步 直到 分数 0 include stdio h main floatscore average 0 intn 0 scanf f 程序 5 2do while语句 一般形式 do 语句 while 表达式 1 执行语句 3 表达式的值为非零 返回第1步 4 表达式的值为零 结束循环 语句至少被执行一次 2 计算表达式 执行流程 注意 分号不能丢 表达式 include stdio h voidmain floatscore average 0 intn 0 do scanf f 用do while语句编写例5 1的程序 由于do while语句至少要被执行一次 特别要注意n和score的取值问题 想想这样的一段循环语句的执行结果 i 1 while i 100 putchar i 这个循环永远不会结束 因为循环控制变量i没有在循环体内被改变 i 不属于循环体 应该改为 i 1 while i 100 putchar i 循环语句中一定要注意表达式的值是否能在循环执行过程中被改变 以免造成死循环 5 3for语句 for 表达式1 表达式2 表达式3 循环体语句 一般形式 表达式1 通常用于循环开始前设置变量初值 表达式2 控制循环执行的条件 决定循环次数 表达式3 循环控制变量修改表达式 循环体语句 被重复执行的语句 5 3 1for语句的一般形式 5 3 2for语句中的各表达式含义 例5 2写程序计算s 1 2 3 100 include stdio h voidmain ints 0 i for i 1 i 100 i s s i printf s d s 分析 此题可用循环语句来编写程序 循环控制变量i从1增加到100 设s的初值为0 则循环体为 s s i 程序如下 for语句的执行过程 计算表达式1 i 1 得到循环控制变量的初值 求解表达式2 若表达式2的值为0 当i 100 则结束for循环 执行循环体语句 s s i 求解表达式3 i 然后转向步骤 5 3 3for语句与while语句的比较 for语句等价于下列语句序列 表达式1 while 表达式2 语句 表达式3 相比之下 for语句显得结构整齐 紧凑 清晰 例5 3用for循环语句求n 分析 对于i 1 i n i 可以表示成i i i 1 用变量fac存放i 最初fac 1 程序 include stdio h voidmain inti n longfac scanf d printf d ld n fac 1 省略表达式1 includemain inti 1 s 0 for i 99 i s s i printf s d s 2 省略表达式3 includemain inti s 0 for i 1 i 99 s s i i printf s d s 3 同时省略表达式1 3 includemain inti 1 s 0 for i 99 s s i i printf s d s 表达式2也可以省略但在循环体中要借助break 语句来实现循环的结束 我们将在后面介绍 注意 表达式省略 分号不省略 5 3 4for语句的变形 for语句中的表达式可以是一切形式的表达式 逗号运算符参与的表达式也可以运用在for语句中 通常运用于表达式1和表达式3 例如 include stdio h voidmain inti j for i 1 j 10 i j i j printf i d j d n i j 此处 表达式1是逗号表达式 它为两个循环变量赋初值 i 1 j 10 表达式3也是逗号表达式 它们的作用是修正两个循环控制变量的值 i j 2 for语句中的逗号表达式 3 循环体为空语句 循环体为空语句的一般形式为 for 表达式1 表达式2 表达式3 例如 求s 1 2 3 100可以用如下循环语句 for sum 0 i 1 i 100 sum i i 空的循环体在while语句和do while语句中也经常被使用 这是C语言的一个特点 例如 while putchar getchar 5 4break continue和goto语句 此类语句的功能是使程序从其所在的位置转向另一处 goto语句使程序的结构性和可读性都变差 要求尽量避免使用 此处不做介绍 5 4 1break语句 它的作用是把流程转向所在结构之后 在switch分支结构中 使用break语句可以使流程跳出switch分支结构 同样的 在循环结构中 使用break语句使流程跳出当前的循环层 转向执行该循环结构后面的语句 一般形式 break voidmain ints 0 i 1 for s s i i if i 100 break printf s d s 例 本程序中 当i 100时 利用break语句强行终止for循环 继续执行for语句后的下一条语句 分析 多个正数的和用变量sum存放 初始值sum 0 每次输入的数据存入x 如果x 0则sum x 否则终止 例5 4用for循环语句编程 将输入的多个正数累加 当输入的数据为负数时 则程序结束 程序 voidmain longsum 0 intx for scanf d printf sum 10ld sum 5 4 2continue语句 该语句被称为继续语句 在循环结构中执行continue语句 使本次循环提前结束 即跳过循环体中continrue语句下面的尚未执行的循环体语句 但不结束整个循环 继续进行下一次循环的条件判别 条件为真 继续进行执行循环语句 一般形式 continue 例5 5显示输入的字符 如果按的是Esc键 则退出循环 如果按的是Enter键 则不做任何处理 继续输入下一个字符 include conio h voidmain charch for ch getch if ch 27 break if ch 13 continue putch ch getch 说明 getch 和putch 的作用与getchar 和putchar 相似 但也有不同之处 1 getch 不显示键盘输入的字符 2 getchar 输入字符时 要按Enter键 计算机才会响应 而用getch 时 输入字符不需要回车 5 5循环的嵌套 当循环体语句又是一条循环语句 或作为循环体的复合语句中又包含循环语句时称为循环的嵌套 嵌套可以是两层或多层 While do while for三种循环都可以互相嵌套 循环体语句可以是任何形式的语句 简单语句 空语句 复合语句 流程控制语句都可作为循环体语句 例5 6输出n n个字符 分析 1 n行 的输出 可用下列循环控制 for i 1 i n i 2 每行n个 的输出 可用下列循环语句实现 for j 1 j n j putchar putchar n 所以输出n n行 可用双重循环语句实现如下 for i 1 i n i for j 1 j n j putchar putchar n 5 6复合结构程序举例 例5 9找出3 1000中的全部素数 分析 1 素数是除1和它本身之外不能被任何一个整数所整除的自然数 如2 3 5 7是素数 1 4 6 8 10不是素数 2 判断某数i是否为素数的一个简单办法是用2 3 4 i 1这些数据逐个去除i 只要被其中的一个数整除了 则i就不是素数 数学上已证明 对于自然数i只需用2 3 4 i1 2测试 3 外层循环控制 for i 3 i 1000 i 4 用j 2 i1 2测试i 程序 include math h voidmain unsignedinti j count flag count 0 for i 3 i 1000 i flag 0 for j 2 j sqrt i j if i j 0 flag 1 break if flag 0 printf 4d i count if count 8 0 printf n 例5 11电文加密问题 已知电文加密规律为 将字母变成其后面的第4个字母 其他字符保持不变 例如 a e A E W A 编写一个程序 输入一行字符 要求转换成加密电文输出 分析 输入字符ch 如果ch是字母 则进行加密处理ch 4 判断加密后ch是否超出字母的范围 如果超过 则ch 26 循环控制条件用ch n 程序 include stdio h voidmain charch while ch getchar n if ch a includemain longintI s 0 for I 10 I 130 I s s I I printf n d s 注意 i一定要是longint型 编程练习 1 10 130 之间 所有整数的平方和 分析 用变量i从10到130循环 用变量s求和 s初值为0 每次循环 s s i i includemain longintI s 0 for I 10 I 150 I if I 2 0 s s I I printf n ld s 2 10 150 奇数的平方和 分析 用变量s求和 s初值为0 用变量I从10到150循环 如果I是奇数 I 2 0 则s s I I includemain longintI s 0 for I 10 I 150 I if I 3 0 I 7 0 s s I I printf n ld s 3 10 150 之间 能被3或7整除的数的平方和 分析 用变量s求和 s初值为0 用变量I从10到150循环 如果I能被3或7整除 I 3 0 i 7 0 则s s I I includemain intI n 0 for I 1 I 800 I if I 3 0 4 1 800 中能被3和8整除的数的个数 分析 用变量n求个数 n初值为0 用变量I从1到800循环 如果I能被3和8整除 I 3 0 i 8 0 则n includemain intI floats 0 for I 1 I 50 I s s 1 0 I I printf n 4f s 5 s 1 1 2 2 1 3 3 1 m m 求m 50时的s 结果保留4位小数 分析 用变量s求和 s初值为0 用变量I从1到50循环 s s 1 I I includemain intn 1 s 0 do s s n n n n 1 while s 5500 printf nn d n 1 6 求100以内最小的自然数n 使1 1 2 2 3 3 n n 5500 分析 用变量s求和 s初值为0 用变量n从1开始循环 每次I增加1 如果s 5500 循环结束 includemain intI floata 1 for I 2 I 25 I a 1 1 a printf n 10f a 7 a1 1a2 1 1 a1 an 1 1 an 1 求a25 结果保留10位小数 分析 用变量a求项 a初值为1 用变量I从2到25循环 a 1 1 a includemain intI longinta 1 floats 0 for I 1 I 10 I a a I s s 1 0 a printf n 10f s 8 1 1 1 2 1 10 结果保留10位小数 分析 用变量s求和 s初值为0 用变量a求阶乘 a初值为1 用变量I从1到10循环 a a I s s 1 a main floats 1 intn longinta 1 b 1 for n 1 n 40 n a a n b b 2 n 1 s s float a b printf ns 10f s 9 求s 1 1 3 1 2 3 5 1 2 n 3 5 2 n 1 当n 40时的值 结果保留10位小数 分析 用变量s求和 s初值为1 用变量a用来求项的分子 变量b求项的分母 a b初值均为1 用变量n从1到40循环 a a n b b 2 n 1 s s a b includemain longintf1 1 f2 1 f n for n 3 n 40 n f f1 f2 f1 f2 f2 f printf nf ld f 思考 求14万之内的最大的f n 10 数列1 1 2 3 5 8 有f n f n 1 f n 2 f 1 1 f 2 1 求f 40 分析 用变量f1 f2 f作为数列相邻的三项 初值f1 1 f2 1 用变量n从3到40循环 f f1 f2 f1 f2 f2 f includemain intn floats 0 for n 1 n 100 n if n 2 0 s s 1 0 2 n 1 elses s 1 0 2 n 1 printf n 4f s 11 Sn 1 1 3 1 5 1 7 1 2n 1 求s 100 保留4位小数 分析 用变量s求和 s初值为0 用变量n从1到100循环 如果n是奇数 n 2 0 s s 1 2 n 1 否则s s 1 2 n 1 main inta s 0 I 1 j for a 1000 a 1 a for j 2 j20 break printf n d s 12 求1000以内最大的20个素数之和 分析 用变量s求和 s初值为0 用变量I统计以求得素数的个数 I初值为1 用变量a从1000到1循环 如果a是素数 并且I值小于等于20 则s s a I 当i值大于20时 跳出循环 素数求法同上题 用变量j从2到a 1循环 main inta b n 0 I for a 200 a 998 a for I 2 I a I if a I 0 break if a i b a 2 for I 2 I b I if b I 0 break if b i n printf n d n 13 200 1000 的双胞胎数的对数 双胞胎数 两素数差为2称为双胞胎数 分析 用变量n统计以求得双胞胎数的对数 n初值为0 用变量a从200到998循环 如果a是素数 则令变量b a 2 如果b也是素数 则n值增1 素数求法同前 用变量i循环 main inta c n 0 I for a 10 a 200 a c 0 for I 1 I a I if a I 0 c if a c 0 n printf nn d n 14 求 10 200 间可以被其因子的个数整除的整数的个数 分析 用变量n统计所求的整数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 账单分期专业知识培训课件
- 2025年度新型石材交易合同范本
- 2025版食品运输合同范本
- 2025办公室文员办公自动化设备节能降耗合同
- 2025年度保险业保险科技应用咨询服务合同模板
- 2025年橱柜智能化改造与购销合同
- 2025版高速公路土方分包劳务合同模板
- 2025彩砖新材料研发与应用采购合同
- 2025年度物流行业司机聘用合同示范范本
- 2025年度高端住宅小区车位租赁服务合同
- 模拟联合国笔试题及答案
- 2025年法宣试题及答案
- 神经病学量表手册3
- 数学问题对小学生深度学习的引领
- 用友财务软件销售合同
- 《运动损伤与康复》课件
- 北师大九年级数学上册图形的相似《相似多边形》示范课教学课件
- 《XXXX煤矿隐蔽致灾地质因素普查报告》审查意见
- 2025-2030年中国薄膜电容器市场发展状况及前景规划研究报告
- 焊接技术完整版本
- JJF(陕) 031-2020 土工击实仪校准规范
评论
0/150
提交评论