




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章程序流程控制 本章将介绍算法与流程的基本知识和两种基本的控制结构 8 1算法与流程 8 1 1算法 算法 Algorithm 只要学会了制定正确且有效的算法 用何种高级计算机语言来编写具体的计算机程序就仅仅只是一个工具选择的问题了 因此 算法的设计也是计算机程序设计的核心内容 8 1 2传统流程图 8 1 3基本程序结构 传统流程图中使用流程线来指出各个框之间的执行顺序 流程线在使用上没有严格限制 BS分支结构和循环结构又是在描述算法时不可避免的 针对这些问题 人们设计了三种最基本的流程结构 使用这三种基本结构就可以表示一个良好的算法 可以将这些基本结构称为预制件 一个算法就是通过这些预制件像搭积木一样按顺序排列起来的 8 1 4用伪代码表示算法 用流程图只适宜于表示算法 用在设计算法的过程中并不是很理想 特别是算法比较复杂 需要经常进行修改时就显得更不方便 为了方便的进行算法设计 经常会使用一种称为伪代码的工具 最重要的是它很易于向计算机程序语言过渡 8 2选择结构 8 2 1判断语句IF和分支选择语句SELECTCASE IF语句和SELECTCASE语句在Fortran语言中都能够用于构造选择结构在Fortran77时代 选择结构是通过IF语句和IF构造来实现的 8 2 2判断语句IF的基本用法 使用IF语句来实现选择结构通常有两种用法 语句形式和构造形式 1 语句形式实现单一选择 IF 逻辑表达式 执行语句2 构造形式可以使用块IF语句来组成IF构造用于多重选择 8 2 3判断语句IF实现多重判断 ELSEIF语句后 IF构造中可以同时存在多个判断条件和多个执行模块 但是只有其中一个条件能够成立 并且只有一个执行模块能够执行 IF 逻辑表达式1 THENTHEN块ELSEIF 逻辑表达式2 THENELSEIF块 ELSEELSE块ENDIF 8 2 4IF语句的嵌套 IF语句嵌套的形式可以表示如下 构造名1 IF 逻辑表达式1 THEN 构造名2 IF 逻辑表达式2 THEN 构造名3 IF 逻辑表达式3 THEN ENDIF 构造名3 ENDIF 构造名2 ENDIF 构造名1 8 2 5IF语句的特殊用法 在Fortran77中 IF语句还能够实现一种特殊的选择方法 也就是算术IF语句 算术IF语句根据算术表达式值得结果 有条件的将程序的计算流程转到三条执行语句中的一句 形式如下 IF 表达式 标号1 标号2 标号3其中 表达式为标量整型或实型表达式 两端用括弧括起来 标号1至3必须是本程序单元中的有效可执行语句的标号 语句中所有的三个语句标号都必须书写 但并不一定要指向三个不同的语句 在同一个算术IF语句中允许同一个语句标号出现多次 如果表达式的值小于零 标号1如果表达式的值等于零 标号2如果表达式的值大于零 标号3 8 2 6SELECTCASE语句的用法 SELECTCASE语句是Fortran90 95标准中新增加的语句 该语句用于容纳CASE块 尽管多重判断的IF构造也可以实现这一功能 但是在某些多条件选择的应用场合使用IF构造会使代码显得比较繁琐 层次关系比较复杂 使用CASE构造就可以避免这一问题 编写出来的代码也显得更加直观 简洁 CASE构造的作用和IF构造不同之处在于 CASE构造只能把某个判断条件的可能结果区分成若干个孤立的离散值或片断 这意味着CASE构造中的判断条件不允许出现重叠 按不同的值或片断进行不同的操作 如果遇到判断条件比较复杂或者存在多种判断条件互相交叉的情况时 在这种情况下只能考虑使用IF构造来进行处理 8 2 7SELECTCASE语句的应用 首先演示的程序使用了整型表达式的CASE构造 例子的原型就是程序TEST0802的个人所得税计算程序 在进行改动前需要注意 CASE构造中的选择表达式是不允许为实型表达式的 因此 需要一个将实型数据转换为整型数据的函数 可以考虑使用基本数学函数中的INT函数 8 3循环结构 8 3 1基本的DO构造 DO构造在Fortran77和Fortran90 95中都提供用以执行循环操作 但是两个标准在DO构造的具体实现形式上是不同的 两个标准下的各种DO循环都可以归纳为DO构造一般形式 构造名 DO 标号 循环控制 块终止语句其中 构造名选项只允许在Fortran90 95标准中使用 用于标识构造的起止范围 DO语句后的标号选项在Fortran77和Fortran90 95标准中同样适用 尽管带标号的DO构造是较老的语法形式 循环控制用于控制循环的执行 提供循环停止或跳出循环的手段等 中止语句用于标定循环构造的结束位置 通过该条语句将流程返回到DO语句 8 3 2无条件循环与DO语句 现实中的循环可以分为不带循环变量与带循环变量当需要执行的循环次数为已知时 使用DO语句来实现循环比较方便 它由一个DO语句和循环体组成 在Fortran90 95标准中的一般形式如下 构造名 DO循环变量 循环初值 循环终值 循环增量 循环体ENDDO 构造名 8 3 3条件循环与DO构造 在编程实践中 还有一种情况是执行次数未知的循环 这一类循环不能通过使循环变量 增加 到循环终值的形式来终止 只能通过循环体中的判断条件来控制程序的流程是否跳出循环构造 因此 这种循环又被称为条件循环除了将判断条件写在循环体内的方式 也称为直到型循环 之外 还可以通过WHILE语句来实现当型循环 在Fortran90 95标准中 DOWHILE语句被增加到循环构造方式中以支持当型循环 8 3 4循环的署名 同其他的一些构造一样 循环也是可以命名的 命名的原则同变量的命名原则完全一致 循环一旦命名 则在循环终止语句后必须跟上循环的名字 以使编译程序明白那一个循环结构被封闭 TEST0818 F90 署名循环范例PROGRAMTEST0818IMPLICITNONEINTEGER IPRINT DOI 1 2PRINT 第 I 次循环 ENDDOPRINTENDPROGRAMTEST0818 8 3 5循环的嵌套 同IF构造和SELECTCASE构造类似 DO构造也允许在自身中再嵌入其他的DO构造 循环嵌套中的各层循环变量不允许重名 循环嵌套的层数可以不限 但是循环嵌套的层次太多会使得各层循环不容易分辨 可以通过对循环进行命名以使循环嵌套的层次更清晰 内循环是外循环中循环体的一部分 内外循环不允许交叉 合法的 OUT DOI 1 4IN DOJ 1 5 ENDDOINENDDOOUT 8 3 6DO循环规则 在使用DO循环时 需要注意循环的一些其它规则 比如 循环变量可以在循环体中被引用 但不应当再被赋值 即使循环变量的值保持不变 例如下面的写法都是不正确的 循环变量N和M不能在循环体内被重新赋值 DON 1 10 N N 2 ENDDODOM 1 10 M M ENDDO 8 3 7隐式DO循环 隐式DO循环实际上是一种带控制循环变量的DO循环 但简化成只有DO循环的第一句 并且把关键字DO隐去 一般形式如下 I m1 m2 m3 其中 m1表示循环的初值 m2表示循环的终值 m3表示循环的增量 如果省略本项目 则默认为1 隐式DO循环不是一种可以独立存在的语句 它只能作为输入输出列表的一个组成部分 用来控制重复读写的次数 I O列表 循环变量名 循环初值 循环终值 循环增值 8 4循环的控制 在Fortran90 95标准中 引入了两个控制循环执行流程的语句EXIT和CYCLE 这两条语句实际上在某些Fortran77编译器中早已被当成了不成文的标准之一了 8 4 1EXIT语句 在实际变成种 有许多实际问题是无法预先知道循环次数的 比如一些数学和工程领域中的迭代算法 对于这类问题 最常见的做法是给出一个判别条件 如果满足这个判别条件就重复执行循环体 否则就退出循环 因此有条件循环时循环的执行次数不是固定的 传统的做法是使用GOTO语句来使流程跳出循环 但这种方法不符合结构化程序设计的要求 针对这种情况 Fortran90 95通过引入EXIT语句来满足结构化程序设计的要求 EXIT语句的作用是停止循环并使流程控制退出循环结构 因此又被称为出口语句 一般形式 EXIT DO构造名 8 4 2EXIT语句与条件循环 通过DOWHILE语句来实现循环猜测 在这条DOWHILE语句中的逻辑判断表达式就是简单的逻辑真 TRUE 这种用法是允许的 它表示当型循环的执行条件一直满足 无须进行判断 但是在使用时应该注意 在循环体内一定要提供跳出循环的手段 否则循环会一直执行下去形成死循环 下面的代码通过在判断语句中加入EXIT语句 跳出循环 IF Rchar Gchar EXIT如果用户输入的字符等于系统随机得到的字符 则执行EXIT语句退出循环 如果用户猜测的字符不正确 则会向用户提示应该向哪个字符方向进行猜测 8 4 3EXIT语句与无条件循环 除了应用于条件循环中用作循环退出的手段外 EXIT语句还可以应用于无条件循环中 当EXIT语句应用于无条件循环中时 如果循环变量大于循环终值或是与EXIT语句配合的逻辑表达式为真都会跳出循环的执行 这种应用通常用在无法预知循环执行的次数并且不知道循环退出条件是否能够满足的场合 8 4 4CYCLE语句 CYCLE语句的作用不是流程跳出循环 而是使流程重新回到循环的开头CYCLE DO构造名 当循环执行到CYCLE语句时 它会使循环的流程跳过位于它之后的那部分DO块 重新返回到循环的第一个可执行语句开始执行 运用CYCLE语句 可以使循环在某一次的迭代过程中不执行该语句后面的代码 使循环的应用更为灵活多变 CYCLE语句与EXIT语句一样属于特定的DO构造 如果语句引用了DO构造名 则它属于该构造 否则它属于所出现的最内层DO构造 8 5再论GOTO语句 GOTO语句是相当古老的流程控制语句 在Fortran77时代是主要的流程控制语句 当然 某些GOTO语句的形式 如计算GOTO语句和赋值GOTO语句 在Fortran90 95标准中是被废除 不建议使用的语句 8 5 1无条件GOTO语句 GOTOlabellabel是本程序单元中可用的语句标号 必须出现在可执行语句之前 X Y 3 GOTO43Y Y 5 4Z X Y 8 5 2计算GOTO语句 计算GOTO语句在Fortran95标准中是一项被废除的语法计算GOTO语句的用途是根据表达式的值来确定程序的控制流程转向一系列设定的分支目标中的一项 一般形式 GOTO 标号列表 表达式其中 标号列表由本程序单元中一系列可用的分支目标语句的标号组成 标号之间通过逗号 来分隔 同样的标号允许在标号列表中出现多次 8 5 3赋值GOTO语句 赋值GOTO语句在Fortran90标准中是一种过时的语法 在Fortran95标准中则被废除 同无条件GOTO语句相比 赋值GOTO语句后所跟的不是语句标号 而是表示语句标号的整型变量 需要注意的是 这里的整型变量不允许通过赋值符进行赋值 比如下面的赋值GOTO语句是错误的 I 10GOTOI 赋值GOTO语句中的标号变量必须使用ASSIGN语句来赋值 比如下面的形式就是正确的 ASSIGN10TOIGOTOI 8 5 4用 还是不用 正如前面一节提到的 GOTO语句的滥用在一定程度上决定了这一语句目前的处境 但是GOTO语句自身并没有错误 错误在于程序员过分依赖于GOTO语句的强大功能而没有注意到程序自身应该具有的逻辑性 因此 在新的Fortran标准中除了计算GOTO语句和赋值GOTO语句这两种过时的语法被废除以外 无条件GOTO语句仍然在新标准中保留了自己的一席之地 在实际编程过程中 用不着因为害怕破坏程序的结构而不敢去使用GOTO语句 只要在使用中时刻牢记GOTO语句只在一个基本程序结构中使用 程序流程的跳转仅限于基本结构之内 8 6程序结束 终止和暂停 在Fortran中 程序的结束 终止和暂停都由相应的语句来完成 正确的了解和使用这些语句不仅能使程序的结构更为清晰 还能提供额外的功能以加强程序的交互性 8 6 1程序结束 END END的作用结束本程序单位的运行 作为一个程序单位结束的标志 END语句只能出现在一个程序单元中的最后一行 并且一个程序单元只能有一个END语句 在主程序中 END语句的作用是使整个程序结束运行 在子程序中 END语句一方面作为子程序结束的标志 另一方面则使流程返回到调用程序中 8 6 2程序终止 STOP STOP语句的唯一作用就是终止程序的运行 同END语句不同 STOP语句可以出现在程序可执行语句中的任意位置 并且可以有多个 程序在运行到STOP语句时 就会停止执行 子程序中的STOP语句并不会使流程返回到调用程序 而是直接停止整个程序的执行 当一个程序中有多个STOP语句时 为了使用户能够辨别是哪一条STOP语句停止了程序的运行 可以在执行STOP语句的同时输出必要的信息 形式 STOP 停止代码 8 6 3程序暂停 PAUSE PAUSE语句又叫暂停语句 这是一个Fortran77的遗留产物 在Fortran90中不推荐使用该语句 在Fortran95中则被废止
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年有色金属资源循环利用产业链环保标准与评估体系报告
- 2025年快消品包装行业包装废弃物资源化利用案例分析报告
- 2025年大气污染防治专项资金项目实施方案优化报告
- 2025年学前教育机构师资队伍教材编写与选用研究报告
- 2025年文化旅游产业融合资金申请策略报告
- 2025年社区团购市场用户粘性增强与运营成本降低策略报告
- 人工智能通识 课 件 第三章:AI在各行业的应用与影响
- 重庆市某区2024-2025学年八年级下学期期末考试语文试题(含答案)
- 市政工程配套服务公司合同付款管理办法
- 帷幕灌浆安全培训课件
- 2025北京房山区区直部门和乡镇(街道)全日制临聘人员招聘37人考试参考题库及答案解析
- 镀膜车间安全培训课件
- 电商平台网站开发需求文档
- 国际利益至上课件
- 利用SmartRock传感技术进行含砂道砟直剪试验研究
- 2025年乡村振兴应知应会考试题及答案
- 老旧小区外立面整修工程档案建立方案
- 2025-2030中国废旧汽车拆解材料分类利用与循环经济园区建设报告
- 2025年消化内科学试题及答案
- 2025年网站运维工程师职业能力测评试题及答案解析
- 2025-2026学年教科版(2024)小学科学二年级上册(全册)每课教学反思
评论
0/150
提交评论