




免费预览已结束,剩余38页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章循环结构程序设计 DO语句DOWHILE语句循环的嵌套循环结构的程序设计方法 循环结构 循环结构的基本思想是重复 即利用计算机运算速度快以及能进行逻辑控制的特性 重复执行某些语句 以完成大量的计算要求 4 1用DO语句实现循环 例如 当X取1 2 3 10时 分别计算sinx和cosx的值 INTEGERXDOX 1 10 1PRINT X SIN X 1 0 COS X 1 0 ENDDOEND 4 1 1DO循环一般格式 DOi e1 e2 e3 循环体 ENDDO其中i代表循环变量 它可以是整型或实型变量 e1 e2 e3称为循环参数表达式 分别表示循环变量的初值 终值和步长 循环体是在循环过程中被重复执行的语句组 例求5 PROGRAMLOOPINTEGERP KP 1DOK 5 1 1P P KENDDOPRINT PEND 说明 1 当循环变量变化的步长为1时 表达式e3可以省略 即DOK 1 10 1与DOK 1 10等价 2 如果循环变量和循环参数表达式的类型不一致 其处理办法与赋值语句一样 先将表达式的最后结果转换成循环变量的类型 然后再进行处理 3 DO循环的执行次数r MAX INT e2 e1 e3 e3 0 例 INTEGERXDOX 1 2 5 6 2 4PRINT XENDDOEND程序执行后的输出结果为 35如果循环变量的步长为0 程序在编译和连接时都没有问题 但在执行过程中求循环执行次数时将出现语法错 即进行了除零运算 这是应当避免的 4 1 2DO循环执行过程 计算e1 e2 e3的值 e1 i 计算循环次数r r 0 执行循环体 i e3 i r 1 r ENDDO下面的语句 Y N 说明 循环体指的是DO语句与ENDDO语句之间的语句 因此循环体并不包括DO语句 执行程序时DO语句也只执行一次 如果循环参数表达式e1 e2 e3中含有变量 那么即便在循环体中改变变量的值 循环参数并不改变 在循环体内给循环变量赋值 是不允许的 分析下面的程序 INTEGERX Y Z KX 1Y 7Z 2DOK X Y Z 1X 2Y Y XZ Z KPRINT K X Y ZENDDOEND 程序的执行结果为 129242118721356 例 INTEGERKDOK 1 5 2K K 1PRINT KENDDOEND编译时将给出错误信息 errorFOR3598 assignmenttoDOvariableKdetectedbetweenKand 3 退出循环后循环变量的值与最后一次循环时循环变量的值不同 前者比后者多一个步长 例如 DOK 1 10 2L KENDDOPRINT K LEND程序的执行结果为 119 例4 1求 累加项F的递推式为 Fi Fi 1 X I可用赋值语句F F X I来实现 READ X NF 1 0Y 1 0DOI 1 NF F X IY Y FENDDOPRINT Y YEND 例4 2一个整数的因子 不包括该数本身 之和等于它本身 则称该数为完数 例如6的因子有1 2 3 且1 2 3 6 因此6是完数 输入一个整数 判断它是否完数 根据完数的定义 先求整数的因子之和 然后判断该数本身是否等于因子之和 若是则为完数 INTEGERM SUM IREAD MSUM 0DOI 1 M 2 该循环求因子之和IF MOD M I 0 SUM SUM IENDDOIF M SUM THENPRINT M 是完数 ELSEPRINT M 不是完数 ENDIFEND 例4 3Fibonacci数列定义如下 F1 1F2 1Fn Fn 1 Fn 2 n 2 求Fibonacci数列的前30项 设待求项为F 待求项前面的第1项为F1 待求项前面的第2项为F 首先根据F1和F2推出F 再将F1作为F2 F作为f1 为求下一项作准备 如此一直递推下去 具体过程如下 11235第一次F2 F1 F 第二次F2 F1 F 第三次F2 F1 F 例4 4所谓 水仙花数 是指一个三位整数 其各位数字立方和等于该数本身 例如 153就是一个水仙花数 输出全部 水仙花数 在 100 999 范围内 对所有整数逐一验证是否符合的条件 输出符合条件的数 这种方法称为穷举法 4 1 3与循环有关的控制语句 EXIT语句在循环体内使用EXIT语句 将迫使所在循环立即终止 即跳出所在循环体 而继续执行循环结构后面的语句 通常将EXIT语句与IF语句配合使用 即在循环体中使用语句 IF e EXIT 例4 6求两个整数a与b的最大公约数和最小公倍数 分析 根据例1 7介绍的算法 找出a与b中较小的一个 则最大公约数必在1与最小整数的范围内 使用DO语句 循环变量i从较小整数变化到1 一旦循环控制变量i同时整除a与b 则i就是最大公约数 然后使用EXIT语句强制退出循环 求出最大公约数后 直接应用最小公倍数和最大公约数之间的关系求出最小公倍数 INTEGERA B GCD LCM TPRINT 请输入两个自然数 READ A BIF A B THENT A A B B TENDIFDOT A 1 1IF MOD A T 0 AND MOD B T 0 THENPRINT GCD TEXITENDIFENDDOPRINT LCM A B TEND 2 CYCLE语句 CYCLE语句用来结束本次循环 即跳过循环体中尚未执行的语句 在循环结构中 CYCLE语句将使控制直接转向循环条件测试部分 从而决定是否继续执行循环 CYCLE语句和EXIT语句的区别在于 CYCLE语句只结束本次循环 而不是终止整个循环的执行 EXIT语句则是结束所在循环 跳出所在循环体 例4 7求1 100之间的全部奇数之和 INTEGER X 0 Y 0DOX X 1IF MOD X 2 0 THENCYCLEELSEIF X 100 THENEXITELSEY Y XENDIFENDDOPRINT YEND 4 2用DOWHILE语句实现循环 对于循环次数确定的循环问题使用DO循环是比较方便的 但是 有些循环问题事先是无法确定循环次数的 只能通过给定的条件来决定是否继续循环 这时可以使用DOWHILE语句来实现循环 4 2 1DOWHILE循环的一般格式 DOWHILE循环一般格式如下 DOWHILE 逻辑表达式 循环体ENDDO其中逻辑表达式表示循环的条件 它要用括号括起来 循环体是在循环过程中被重复执行的语句组 ENDDO是循环终端语句 DOWHILE语句和ENDDO语句要配合使用 例 输出所输入的全部正数 直到输入负数或零 程序结束 REAL P 1 0DOWHILE P 0 PRINT PREAD PENDDOEND DOWHILE循环的执行过程 执行循环体 ENDDO下面的语句 满足循环条件 例4 8输入一个整数 输出其位数 输入的整数存入变量N中 用变量K来统计N的位数 程序如下 INTEGER N K 0READ NDOWHILE N 0 K K 1N N 10ENDDOPRINT K KEND 4 3几种循环组织方式的比较 实现循环结构的三种语句 它们各具特点 一般而言 事先能确定循环次数的循环问题用DO循环 而事先不能确定循环次数的循环问题用DOWHILE循环 但这并不是绝对的 很多情况下它们是可以相互代替的 例4 11输入一个整数m 判断是否素数 程序1 用DO循环实现 IMPLICITNONEINTEGERM I JREAD MJ SQRT REAL M DOI 2 JIF MOD M I 0 EXITENDDOIF I J AND M 1 THENPRINT M isaprimenumber ELSEPRINT m isnotprimenumber ENDIFEND 程序2 用DOWHILE循环实现IMPLICITNONEINTEGERM I JREAD MI 2J SQRT REAL M DOWHILE IJ AND M 1 THENPRINT M isaprimenumber ELSEPRINT m isnotprimenumber ENDIFEND 程序3 用DO循环和逻辑IF语句的嵌套实现 IMPLICITNONEINTEGERM I JREAD MI 2J SQRT REAL M DOIF MOD M I 0 OR I J EXITI I 1ENDDOIF I J AND M 1 THENPRINT M isaprimenumber ELSEPRINT m isnotprimenumber ENDIFEND 4 4循环的嵌套 如果一个循环结构的循环体又包括一个循环结构 就称为循环的嵌套 或称为多重循环结构 在设计多重循环时 要特别注意内 外循环之间的关系 以及各语句放置的位置 不要搞错 例4 12求 100 1000 以内的全部素数 1 判断一个数是否素数 2 利用穷举法将判断一个数是否素数的程序段 对指定范围内的每一个数都执行一遍 即可求出某个范围内的全部素数 LOGICALFLAGDOM 101 1000 2FLAG TRUE I 2J SQRT REAL M DOWHILE I J AND FLAG IF MOD M I 0 FLAG FALSE I I 1ENDDOIF FLAG THENPRINT M isaprimenumber ENDIFENDDOEND 例4 13已知计算M的值 分析 该问题要求对5个X值 10个Y值 计算出50个F值 然后每10个F相加得到一个S值 共得到5个S值 最后这5个S相乘 得到一个M值 可以用一个二重循环来计算和输出各值 每个S值是由10个F值累加得到的 累加前S要清0 M是由5个S值累乘得到的 累乘前M应置1 X和Y都是有规律的值 可以由循环变量I J得到 4 5程序举例 例4 15已知某球从100m高度自由落下 落地后反复弹起 每次弹起的高度都是上次高度的一半 求此球第10次落地后反弹起的高度和球所经过的路程 分析 用变量H来表示下落的高度 变量R来表示反弹的高度 变量S来表示小球经过的路程 则H的初值为100 反弹高度R H 2 弹起一次小球要经过下降和上升两个阶段 小球经过的路程为H R 这个过程如图所示 INTEGERNREALH S RH 100S 0DON 1 10R H 2S S H RH RENDDOPRINT H H S SEND运行结果如下 H 9 765625E 02S 299 707000 例4 16用牛顿迭代法求方程f x 2x3 4x2 3x 7 0在x 2 5附近的实根 直到满足 xn xn 1 10 6为止 牛顿迭代公式为 关于迭代初值x0的选取问题 理论上可以证明 只要选取满足条件f x0 f x0 0的初始值x0 就可保证牛顿迭代法收敛 当然迭代初值不同 迭代的次数也就不同 例4 17求f x 在 a b 上的定积分 分析 求一个函数f x 在 a b 上的定积分 其几何意义就是求曲线y f x 与直线x a x b y 0所围成的图形的面积 为了求得图形面积 先将区间 a b 分成n等分 每个区间的宽度为h b a n 对应地将图形分成n等分 每个小部分近似一个小曲边梯形 近似求出每个小曲边梯形面积 然后将n个小曲边梯形的面积加起来 就得到总面积 即定积分的近似值 n越大 近似程度越高 这就是函数的数值积分方法 近似求每个小曲边梯形的面积的常用方法 1 用小矩形代替小曲边梯形 求出各个小矩形面积 然后累加 此种方法称为矩形法 2 用小梯形代替小曲边梯形 此种方法称为梯形法 3 用抛物线代替该区间的f x 然后求出抛物线与x a i 1 h x a ih y 0围成的小曲边梯形面积 此种方法称为辛普生法 以梯形法为例 第一个小梯形的面积为 第二个小梯形的面积为 第i个小梯形的面积为 第n个小梯形的面积为 本质上讲这是一个累加问题 例1 18利用蒙特卡洛法 Monte Carlomethod 求 的近似值 分析 蒙特卡洛法是一种通过模拟随机事件的发生进行统计实验的技术 它往往涉及到大量运算 用它进行问题求解不使用计算机是不可思议的 蒙特卡洛法可用来求定积分 其步骤如下 1 先用一个长为b a 高为c的矩形 把s围在内 2 产生n个均匀分布在矩形框内的随机点 x y 即x在 a b 区间均匀分布 y在 0 c 区间均匀分布 3 统计落入欲求面积内的随机点的个数m 4 由计算所求面积的近似值 其中c b a 为矩形面积 为
温馨提示
- 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年高危作业安全题库
- 2020公路工程质量检验评定标准第二册机电工程
- 金矿居间合同协议书
- 酒店安全考试试题及答案
- 人教版小学四年级上册数学 第7单元 条形统计图 教案
- 中医适宜技术在妇科的应用
- 乡土中国考试题及答案
- 运输公司八项管理制度
- 工程进度款申请书
- 新能源光伏电站组件产业园项目可行性研究报告
- 教育全球化背景下的学校品牌打造
- 汽车维修企业安全生产制度模版(3篇)
评论
0/150
提交评论