




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
FORTRAN90语言程序设计 计算机中心楚红2006 12 第3部分循环结构程序设计 带循环变量的DO循环结构不带循环变量的DO循环结构DO WHILE控制的循环结构循环的嵌套循环结构程序设计举例 有循环变量的DO循环结构 有循环变量DO结构的格式DOV E1 E2 E3循环体ENDDODO循环语句由三部分组成 DO语句 循环体和ENDDO语句 DO语句是DO循环的开始语句 指定用于控制循环执行的有关参数 初始值 终止值和步长 决定是否执行循环体 DO是关键词 表示DO循环结构的入口语句 V是循环变量 循环变量的类型可以为整型或实型 E1 E2 E3可以是整型或实型常数 变量 表达式 E1称为循环变量的初始值 E2称为循环变量的终止值 E3称为循环变量的步长 当步长为1时 该项可以省略 在循环开始时 E1 E2 E3应有确定的值 由于实型数据在进行数据转换时 可能出现误差 因此 在使用循环变量 E1 E2和E3时 最好定义为整型 有循环变量的DO循环结构 循环体是DO循环结构的主体 给出用于处理数据的有关语句 决定DO循环语句的执行结果 ENDDO语句是DO循环结构的终端语句 表明DO循环语句到此结束 控制返回到DO语句执行 下面给出一些合法的DO结构 DOI 1 10 2 输出1 3 5 7 9PRINT IENDDODOI 10 1 2 输出10 8 6 4 2PRINT IENDDO 有循环变量的DO循环结构 DO循环结构的执行过程为 1 先计算E1 E2 E3的值 然后转换为与循环控制变量相同的类型 2 给循环控制变量赋初值V E1 3 计算循环次数 计算公式为 R MAX INT E2 E1 E3 E3 0 例如 若DO语句为 DOL 2 20 2 循环次数为 R MAX INT 20 2 2 2 0 10 4 检查循环次数 当R 0时 执行循环体 当R 0时 跳过循环体 循环结构执行结束 5 当执行到循环终端语句时 循环变量按步长增值 循环变量 循环变量 E3 6 循环次数减1 R R 1 返回 4 继续执行 注意事项 1 E3的缺省意味着循环步长为1 此时E3前面的逗号也必须省略 例如 DOI 1 10 1DOI 1 10两者含义相同 2 若循环次数R 0 按R 0处理 则循环一次也不会被执行 例如 DOI 10 1 2循环变量R INT 1 10 2 2 3 一次也不会执行循环 3 E1 E2 E3的类型应与循环变量相同 当E1 E2 E3的类型与循环变量不相同时 在循环执行时 系统将E1 E2 E3转换成循环变量的类型 例如 DOI 1 6 3 6 1 6应先将实型转化成整形 即 DOI 1 3 1 因此循环次数是3次 而不是2次 注意事项 4 循环变量在循环体中可以被引用 但不能被重新赋值 例如 下面的用法是错误的 DOI 1 10I I IENDDO因为循环变量在循环体内不能被赋值 若改成 J I I则就正确了 5 E1 E2 E3的值在循环体中被改变后 不影响循环次数的计算 因此 试图通过改变循环体中E1 E2 E3的值来改变循环次数是不可能的 例如 J 10DOI 1 J J 20 ENDDO 该循环次数在循环体执行之前已计算好 共执行10次 不会因为循环体内J值的改变而增加循环次数 注意事项 6 可以不经过ENDDO语句退出循环 即将执行控制从循环体内转移到循环体外 也可在循环体内转移 但不能从循环体外转移到循环体内 例如 DOI 1 20 IF I 3 100 GOTO100 ENDDO100PRINT I 3 7 DO循环和其它结构 如块IF结构 CASE结构 可以相互嵌套使用 但结构的嵌套必须是完整嵌套 不允许结构的交叉 有循环变量的DO循环结构 DO循环结构的命名DO循环结构名 DOV E1 E2 E3循环体ENDDODO循环结构名 例3 1 求N 的值因为N 1 2 3 N 该题显然是一个累积问题的计算 存放累积的变量的初值应为1 源程序 PROGRAMCALCULATE FACTORIALIMPLICITNONEINTEGER N T IREAD NT 1DOI 1 NT T IENDDOPRINT TENDPROGRAMCALCULATE FACTORIAL 引申 例如求解如下表达式 有循环变量的DO循环结构 例3 3 求FIBONACCI数列 1 1 2 3 5 的前40个数 分析 FIBONACCI数列的递推公式为 F1 1 F2 1 N 3 根据递推公式可知 FIBONACCI数列从第3顶开始 等于前2顶之和 因而程序只需一个DO循环 采取辗转赋值法即可 有循环变量的DO循环结构 例3 4 判断一个整数N是否为素数 所谓素数 是一个正整数 该数只能被1和它本身整除 那么判断一个数N是否为素数就是将其被2到 N 1 之中的所有整数整除 如果都不能整除 则N为素数 实际上根据数论知识 判断N是否为素数 不必将N被2到 N 1 整除 只要被2到 若不是整数 取其整数部分 整除即可 PROGRAMEXAMIMPLICITNONEINTEGER N I J SWITCHREAD NJ SQRT REAL N SWITCH 1DOI 2 JIF MOD N I 0 SWITCH 0ENDDOIF SWITCH 1 THENPRINT N ISAPRIMENUMBER ELSEPRINT N ISNOTAPRIMENUMBER ENDIFEND 无循环变量DO结构 在DO循环结构中 当DO语句中仅包含关键词DO而无循环变量控制或条件控制时 称为无循环变量的重复DO结构 它的形式为 DO结构名 DO循环体ENDDO DO结构名 方括号内的DO结构名是可选项 作用是给DO结构命名 重复DO结构是一个无休止的死循环 尽管在语法上没有错误 但程序却不能正常结束 因此 必须在循环体中加入能在满足某种条件时停止循环的语句 中断语句 EXIT CYCLE 中断语句包括EXIT语句和CYCLE语句 用来强行控制或改变程序的执行顺序 1 EXIT语句EXIT语句功能 在循环体执行过程中强制性终止循环 将执行控制转移到当前循环之外的第一条语句执行 EXIT语句的一般格式为 EXIT DO循环结构名 EXIT语句使用说明 1 EXIT语句通常是作为逻辑IF语句的内嵌语句来使用 其作用是有条件中断 形式为 IF 逻辑表达式 EXIT 结构名 2 当EXIT语句中没有指定结构名时 则跳出当前结构 3 结构化程序设计方法不提倡使用EXIT语句 但在某些情况 使用EXIT语句可简化程序 中断语句 EXIT CYCLE 2 CYCLE语句CYCLE语句功能 用于终止执行本次循环中剩余的语句 重新执行下一轮循环 CYCLE语句的一般格式为 CYCLE DO循环结构名 CYCLE语句通常是作为逻辑IF语句的内嵌语句来使用 其作用是有条件转移 形式为 IF 逻辑表达式 CYCLE DO循环结构名 中断语句 EXIT CYCLE 例3 5 输入一组整数 求这组数的正数的个数及正数的总和 当输入数据等于0时终止循环 PROGRAMMAINIMPLICITNONEINTEGER K SUM 0 NUM 0DOREAD KIF K 0 EXITIF K 0 CYCLENUM NUM 1SUM SUM KENDDOPRINT NUM NUM SUM SUMEND 中断语句 EXIT CYCLE 例3 6 运用重复DO结构编写一个程序 求两个正数M和N的最大公约数及最小公倍数 用辗转相除法来求最大公约数 例如 若输入49和35两个数 先用49除以35 余数为14 再用35为被除数 14为除数做除法 余数为7 再将14为被除数 7为除数做除法 此时余数为零 最后为除数的7就是最大公约数 最小公倍数则等于M乘以N 再除以最大公约数 PROGRAMEXAMIMPLICITNONEINTEGERM N T P R KREAD M NP M NIF M N THENT M M N N TENDIFR MOD M N DOIF R 0 EXITM NN RR MOD M N ENDDOK P NPRINT N KEND 中断语句 EXIT CYCLE IMPLICITNONEINTEGER I J K NPARAMETER N 10 定义循环上界PRINT LOOP 1ST2ND3RD LOOP1 DOI 1 N 外层循环 结构名LOOP1IF I 3 EXITLOOP1 当I 3时 跳出外层循环PRINT 11X I2 ILOOP2 DOJ 1 N 中层循环 结构名LOOP1IF J 2 CYCLELOOP2IF I 2 AND J 1 EXITLOOP2PRINT 21X I2 JLOOP3 DOK 1 N 内层循环 结构名LOOP1IF K 2 CYCLELOOP3IF I 1 AND J 1 EXITLOOP2 跳出内层和中层循环PRINT 31X I2 KENDDOLOOP3ENDDOLOOP2ENDDOLOOP1 DO WHILE结构 DO WHILE循环的一般形式为 结构名 DOWHILE 逻辑表达式 循环体ENDDO 结构名 结构名是为DO WHILE结构的命名 用法同前面对块IF CASE等结构的命名类似 可以缺省 关键词DOWHILE称为DOWHILE语句 是循环的入口 关键词ENDDO称为ENDDO语句 是循环的出口 DOWHILE中的逻辑表达式是判断循环体是否被执行的条件 书写时应放在括号内 DO WHILE结构 DO WHILE结构的执行过程为 1 计算逻辑表达式的值 2 当逻辑表达式的值为 真 时 执行循环体 遇到ENDDO语句后返回到 1 继续 当逻辑表达式的值为 假 时 退出循环结构 DO WHILE结构 例3 9 输入两个正数M N 求最大公约数和最小公倍数 例3 10 用下面的级数计算 的近似值 精度要求第N项的值小于10 5时结束 使用DO WHILE语句来判断 当某一项的值小于精度要求时 退出循环 循环的嵌套 在一个DO循环中又完整地包含一个DO循环 称为DO循环的嵌套或多重循环 例如 打印一个9 9的乘法表 可用下面的程序实现 INTEGER I JDOI 1 9DOJ 1 9K I JPRINT I J KENDDOENDDOEND 嵌套DO循环的说明 1 三种DO循环都可以相互嵌套 但在嵌套时 内循环必须完整地包含于外循环之中 不得交叉 即遵循 完全包含 原则 如 DOWHILE AST 0 DOJ 1 10 内层嵌套外层嵌套ENDDOENDDO 2 循环嵌套时 内外层不能使用相同的循环变量 但同一层并列的循环结构可以使用相同的循环变量 因为内外层若使用相同变量名 执行内循环时要对内循环变量赋值 这就相当于对外层循环变量重新赋值 嵌套DO循环的说明 3 在执行嵌套的循环时 可以将执行控制从循环体内转到本循环体内某个位置 或DO结构以外 但不能从DO结构外转到循环体内 也不能从外循环体转到内循环体 循环的嵌套 例3 13 求四个阶乘之和2 4 6 8 的值 可以用两重循环实现这个阶乘之和的计算 外层循环计算四个阶乘的和 里层循环计算一个阶乘 程序如下 PROGRAMEXAMIMPLICITNONEREAL S 0 0 TINTEGER I JDOI 2 8 2T 1 0DOJ 1 IT T JENDDOS S TENDDOPRINT S SEND 循环结构程序设计举例 例3 15 求的前N项之和 这里 X和N从键盘输入 解决此类问题的关键是找出多项式的通项式 我们发现从第二项开始 每项等于前一项乘以 因此只需一个单重循环 程序即可写出 循环结构程序设计举例 例3 16 用梯形法求定积分的值 首先将积分区间 A B N等分 每个小区间的长度为H B A N 第一个小梯形的下底为 上底为 第I个小梯形的下底为 上底为 每个小区间的面积为 循环结构程序设计举例 例3 17 求三位数的水仙花数 所谓 水仙花数 是指一个三位数 其各位数字的立方和等于该数本身 例如 407 43 03 73 所以407是水仙花数 方法一该题可将100 999之间的三位数的各位数字求出 然后再判断各位数字的立方和是否等于它本身 方法二该题采用穷举法也非常方便 所谓穷举法 即将所有可能的数字组合全部找到 然后选出符合条件的组合 循环结构程序设计举例 例3 18 验证哥德巴赫猜想 哥德巴赫提出 一个不小于6的偶数必定能表示为两个素数之和 例如 6 3 3 8 3 5等 要求将6 50之间的全部偶数表示成两个素数之和 分析 对于一个偶数N可以表示成任意两个数A B之和 A为较小的数 我们只需先判断A是否为素数 若A是素数 再判断B B N A 是否为素数 若B是素数 则找到了答案 因为作为较小数的A最终必然为素数 所以判断它的范围可以从3开始 到N 2 步长为2 练习题 1 阅读下列FORTRAN90程序段INTEGER I J KDOI 1 5 2DOJ 2 6 3K I JENDDOENDDO上述称序段执行完后K的值是A 11B 10C 12D 30 练习题 2 阅读下列FORTRAN90程序段INTEGER N KREAL S TREAD NS 0 0 K 1IF N 5 THENS S 32 T 1DOWHILE K N T T 2 S S TK K 1 PRINT SENDDOENDIFPRINT SEND若从键盘输入 6 则运行后S的值为 A 64 0B 32 0C
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 衡阳师范学院《马克思主义哲学(下)》2023-2024学年第二学期期末试卷
- 电子科技大学中山学院《车辆建模与仿真》2023-2024学年第二学期期末试卷
- 甘肃省兰州市第六十三中学2025届高三3月期初测试化学试题含解析
- 武汉科技大学《数字化教学资源设计与开发(C)》2023-2024学年第二学期期末试卷
- 许昌职业技术学院《植物保健与和谐植保》2023-2024学年第二学期期末试卷
- 湖南吉利汽车职业技术学院《日本文学》2023-2024学年第二学期期末试卷
- 工程造价领域发展趋势
- 工程教育基础
- 厂房强化护栏施工方案
- 屋面设备基础施工方案
- 2019年10月自考03706思想道德修养与法律基础试题及答案含解析
- 无人机操控技术 课件全套 项目1-6 绪论-无人机自动机场
- 江苏红豆实业股份有限公司偿债能力分析
- 四川省2023年普通高等学校高职教育单独招生文化考试(中职类)数学试题(原卷版)
- 水力机械原理与设计课件
- 江苏电子信息职业学院单招职业技能测试参考试题库(含答案)
- 充电桩采购安装投标方案(技术方案)
- 7.1开放是当代中国的鲜明标识课件-高中政治选择性必修一当代国际政治与经济(1)2
- 2024年浙江首考英语听力原文解惑课件
- 民族团结教材
- 煤矿顶板管理技术培训课件
评论
0/150
提交评论