




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020 3 27 1 第四讲循环结构程序设计 循环结构在程序设计中广泛使用 是一种非常重要的程序结构 其基本思想是重复 即重复执行某些语句 以完成大量的计算要求 但是 循环不是简单的重复 因为尽管每次都执行相同的语句 但是在循环过程中变量在变化 而且完成了循环次数或在一定的条件下能退出循环 本讲介绍Fortran90实现循环结构的2种方法 1 do循环结构 2 dowhile循环结构 循环次数事先可以确定下来 用do语句实现循环 非常方便 比如 当x 1 2 3 10时 分别计算lnx和sinx的值 用do循环实现的程序如下 2020 3 27 2 1用do语句实现循环 IntegerxDox 1 10 1Print x log x 1 0 sin x 1 EnddoEnd 2020 3 27 3 一 do循环的一般格式 doi e1 e2 e3 do语句 循环体 执行的操作 enddo 结束语句 其中 1 i代表循环变量 可为整型或实型 2 e1 e2 e3 称为参数表达式 分别为循环变量的初值 终值和步长 3 循环体是循环过程被重复执行的语句组 4 enddo是循环结束的终端语句 其与do语句配合使用 2020 3 27 4 说明 1 步长为1时 表达式e3可以省略 比如 doi 1 10 1 与 doi 1 10 相同 3 参数表达式 i e1 e2 e3 表示循环次数为 r max int e2 e1 e3 e3 0 比如 doi 10 1 2的循环次数r 5 而doi 10 1 2的r 0 即不循环 注意 1 步长不能为0 2 循环次数不能为0 2020 3 27 5 二 do循环的执行过程 1 循环体指do语句和enddo语句之间的语句 不包括do语句 因此do语句在循环过程中只执行一次 如果循环参数表达式中含变量 那么即使在循环体中改变变量的值 循环参数并不改变 比如 Integera b c Ia 1 b 7 c 2Doi a b c 1a 2 b b a c c iPrint i a b cEnddoEnd输出为 129242118721356 进入do循环后 首先计算出循环变量i的初值1 终值7 步长3 即执行do语句 尽管在循环体中改变了变量a b c的值 但是循环变量的初值 终值 步长不再变化 2020 3 27 6 2 由于在循环过程中 循环变量会自动按循环要求变化 因此不能在循环体内给循环变量进行赋值 IntegeriDoi 1 5 2i i 1Print iEnddoEndErrorfor3598 assignmenttoDovariableidetectedbetweeniand 3 由于每循环一次循环变量自动增加一个步长的值 因此退出循环后循环变量的值 比最后一次循环时循环变量的值多1个步长 Integeri mDoi 1 10 2m iEnddoPrint i mEnd输出为 119 三 do循环举例 例1 输入x n 计算输出 分析 累加项可表示为递推Fi Fi 1 x i 用赋值语句F F x i来实现 重复加是循环操作 程序为 2020 3 27 7 Integern iRealx F yRead x nF 1 0Y 1 0Doi 1 nF F x iY Y FEnddoPrint x x n nWrite y yEnd从键盘输入 3 3 输出为 x 3 0n 3y 13 0 2020 3 27 8 例2 输入一个整数 判断并输出是否为完数 除自身外所有因子之和等于本身的数 比如6 1 2 3 所以6是完数 分析 因为找一个整数的因子及求它们的和可以用循环来实现 而用选择结构可进行判断与输出其是否为完数 程序为 Integerm i sumRead mSum 0Doi 1 m 2 求除本身之外的因子及之和If mod m i eq 0 sum sum iEnddoif m eq sum thenWrite m 是完数 ElsePrint m 不是完数 Endifend 2020 3 27 9 例3 找出3位整数中全部的水仙花数 分析 利用do循环逐一判断3位整数 100 999 中哪些是水仙花数 并输出 程序为 Integerm m1 m2 m3 nDom 100 999m1 m 100m2 mod m 10 10 m3 mod m 10 n m1 3 m2 3 m3 3If n eq m Print m 是水仙花数 Enddoend 2020 3 27 10 比如 求两个整数m和n的最大公约数和最小公倍数 分析 最大公约数在 1 min m n 范围内 且同时能被m和n整除 因此利用doi min m n 1搜寻 一旦mod m i 0 mod n i 0则此时的i就是最大公约数 并利用exit退出循环 然后利用最大公约数 求出最小公倍数 程序为 2020 3 27 11 Integera b t iread a bif a b thent aa bb tendifDoi a 1 1if mod a i 0 and mod b i 0 thenprint g iexitendifenddoprint l a b i 求最小公倍数End比如 12 9 g 3 l 36 注意 在程序中 do语句中的内容省略 表示循环条件永远成立 当x为偶数时执行cycle语句 直接执行下一次循环 当x大于100时 执行exit语句 跳出循环体 2020 3 27 12 2 cycle语句 Cycle语句是用来结束本次循环 即跳过循环体中尚未执行的语句 在循环结构中 cycle语句将使控制直接转向循环条件的测试部分 从而决定是否继续执行循环 Cycle语句与exit语句的区别在于 cycle语句只是结束本次循环 而不是终止整个循环的执行 Exit语句则是结束所在循环 跳出所在循环体 例如 求1 100中全部奇数之和 Integer x 0 y 0dox x 1if mod x 2 0 thencycleelseif x 100 thenexitelsey y xendifenddoprint yEnd 2020 3 27 13 2用dowhile语句实现循环 对于循环次数确定的循环问题 使用do循环是比较方便的 但是 有些循环问题事先是无法确定循环次数的 只能通过给定的条件来决定是否继续循环 这时可以使用dowhile语句来实现循环 一 dowhile循环的一般格式 dowhile 条件表达式 dowhile语句 循环体 执行的操作 enddo 结束语句 其中 1 表示循环的条件表达式 要用括号括起来 2 循环体是在循环过程中被重复执行的语句组 3 enddo是循环结束的终端语句 dowhile语句与enddo语句要配合使用 2020 3 27 14 比如 real p 1 0dowhile P 0 print pread penddoEnd该程序输出所输入的全部正数 直到输入负数或零 程序结束 4 对于循环次数确定的循环问题也可以使用dowhile语句来实现 比如 求5 integer m 1 n 1dowhile m 5 n n mm m 1enddoprint nEnd 2020 3 27 15 二 dowhile循环的执行过程 1 当给定的条件满足时 执行dowhile和enddo之间的循环体语句 2 语句执行完毕后 程序自动返回到dowhile语句 再一次判断dowhile语句中的条件 3 如果条件仍然满足 则再执行一遍循环体语句 如果条件不满足 则结束循环 去执行enddo后的语句 2020 3 27 16 三 dowhile循环举例 例1 输入一个整数 输出其位数 分析 输入的整数存入变量m中 用变量n来统计m的位数 程序为 Integer m n 0read mDowhile m 0 n n 1m m 10enddoprint n nEnd比如 129 n 3 2020 3 27 17 分析 这种累加求和的问题 关键是如何求累加项 通常的办法是利用前一项来求后一项 即利用递推法来求累加项 例2 求 直到最后一项的绝对值小于10 6时 停止计算 X右键盘输入 realx a sinteger i 1read xs xa xdowhile abs a 1 0e 6 i i 1a x x 2 i 2 2 i 1 as s aenddoprint x sEnd 2020 3 27 18 3Fortran循环结构程序设计的其它问题 一 do循环与dowhile循环的互换 Do循环和dowhile循环是Fortran90中常用的2种基本循环结构 前者主要用于确定循环次数的问题 而后者则常用来处理事先无法确定循环次数的问题 但也并非绝对 很多情况下二者可以互换使用 比如 输入一个整数 判断是否为素数 分析 所谓素数指这样的整数 除了1和本身不能被其它任何数整除的数 判断一个数是否为素数 可以按照2 3 m 1逐一检查能否除下 但当m很大时检查量太大 有一个结论 只需检查2 3 m1 2即可判断m是否为素数 这个问题既可用do循环实现 也可利用dowhile来解决 程序分别为 2020 3 27 19 implicitnoneintegerm i jread mj sqrt real m doi 2 jif mod m i eq 0 exitenddoif i j and m 1 thenprint m 是素数 elseprint m 不是素数 endifEnd implicitnoneintegerm i jread mi 2j sqrt real m dowhile ij and m 1 thenprint m 是素数 elseprint m 不是素数 endifEnd 2020 3 27 20 二 循环的嵌套 如果循环体中又包括一个循环结构 就称为循环的嵌套 也叫多重循环结构 在设计多重循环时 要特别注意内 外循环之间的关系 以及各语句放置的位置 不能搞错 比如 求 100 200 以内的全部素数 分析 分两步 1 判断一个数是否为素数的程序段 见前面的例子 2 利用穷举法将判断一个数是否为素数的程序段 对指定范围内的每一个数都执行一遍 即可求出该范围内的所有素数了 implicitnoneintegerm i jlogicalzcdom 101 200 2zc true i 2j sqrt real m dowhile i j and zc if mod m i eq o zc False i i 1enddoif zc thenprint m 是素数 endifEnddoend 2020 3 27 21 分析 该问题要求对5个x值 10个y值 计算出50个F值 然后每10个F值求和得到5个S值 再5个S值连乘得出M的值 可用二重循环实现 每个S由10个F累加 M由5个S累乘得到 X和Y有明显的规律 可用循环变量得到 real x y F s M 1 0integeri jdoi 1 5x i 2 0s 0 0doj 1 10y j 10 0F sqrt x 2 y 2 s s FenddoM M sEnddoprint M MEnd输出结果 M 4 107494E8 2020 3 27 22 4循环结构程序设计上机 1 已知 分别求 1 当n取1000时 S的值 7 852727E 1 2 S 0 78时的最大n值和此时n值对应的S值 0 7799640 23 3 求S的值 直到累加项小于10 4为止 7 817278E 1 2 甲 乙 丙三球迷分别预测已进入半决赛A B C D四对的名次 甲预测 A第一 B第二 乙预测 C第一 D第三 丙预测 D第二 A第三 结果每人的预测只对了一半 试问真正的名次应该是怎样 3 2 1 4 本讲学习了 重复操作 完成大量计算 的循环结构程序设计问题 包括do循环和dowhile循环 知道了2种循环结构的编写格式 执行过程及其使用 还明白在do循环的循环体中可加入控制语句 比如exit语句和cycle语句的使用 以及二者之间的互换 循环的嵌套等 2020 3 27 23 integeri nreals xs 0 0n 1000doi 1 nx 2 0 4 i 3 4 i 1 s s xEnddoprint s send integeri nreals xs 0 0i 1dowhile s 0 78 x 2 0 4 i 3 4 i 1 s s xi i 1Enddon i 2s s xprint s s n nend 递推 迭代法 integeri nreals xs 0 0i 1x 2 0 4 i 3 4 i 1 dowhile x 1E 4 s s xi i 1x 2 0 4 i 3 4 i 1 Enddon i 2s s xprint s send 穷举法 2020 3 27 24 3 某些分子和分母都是二位数的真分数 分子的个位数与分母是十位数相同 而且奇怪的是 如果去掉分子的个位数和分母的十位数字 结果与原分数值一样 试求出所有这样的真分数 integerfz fm fz1 fz2 fm1 fm2dofz 10 99dofm 10 99fz1 fz 10fz2 fz fz1 10fm1 fm 10fm2 fm fm1 10if fz ge fm cycleif fz2 ne fm1 cycleif fm2 eq 0 cycleif fz fm2 ne fm fz1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025煤矿区队安全管理培训
- 脾动脉栓塞术后的护理查房
- 企业品牌管理培训
- 教育培训学校年终总结
- 建筑工地安全生产培训
- 2025年护理部工作总结
- 侨情调查培训
- 工业互联网平台数字签名技术规范与工业互联网平台设备智能调度优化效果评估报告
- 肿瘤实习护士出科汇报大纲
- 合同文员年终工作总结
- 国家开放大学Python程序设计形考任务实验六-互联网评论数据分析及其展示综合案例
- 《Hadoop大数据原理与应用》实验指导书
- 2024年琥珀课件:探索琥珀中的生命奥秘
- 静脉留置针穿刺维护与常见并发症处理
- 代加工食品协议范本2024年
- 江苏省盱眙县2024届八年级英语第二学期期末质量检测试题含答案
- 结婚函调报告表
- 浙江省杭州市滨江区2023-2024学年八年级下学期期末科学试题(原卷版)
- 陕西延长石油集团有限责任公司招聘笔试题库
- 【许林芳老师】-《企业文化构建与落地》
- 2024年辽宁省中考地理试题(无答案)
评论
0/150
提交评论