程序控制-程序设计语言原理.DOCVIP

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
程序控制-程序设计语言原理

第7章 程序控制 冯·诺依曼机器模型变量的时空特性对程序中求值的次序是十分敏感的。程序员用这类语言要得到预想的计算,就要善于驾驭求值次序。表达式的求值次序是最低层的程序控制,在前面章节中我们已经介绍过了。在它的上层是四类控制:顺序控制、选择控制、重复(迭代)、函数或过程调用。本章要讨论它们。 再上二层是对程序模块的控制。包括一个程序的各模块组织以及它们与环境(软、硬件平台)的相互关系。本章部分讨论它们。 并发控制也是一类控制,它可以在语句级,特征块和模块级实施并发控制。涉及并发结构模型和通信机制后文第13章还要讨论。本章只讨论顺序程序控制。 结构化程序最重要的成果是程序控制。它使程序成为可分析的、分层结构的,程序正文和程序的执行逻辑比较一致。同时也使编译器易于实现,尽管它已定论, 在前述章节中也零散讨论某些部分。本章对此作一系统的小结。 7.1 一般概述 程序控制是控制机器执行计算的次序。我们把表达式求值规则看作是微观的。则最基本的控制对象是“语句”(Statement)所表征的计算。在英语中statement一词有陈述的意思, 易于和声明混淆,所以,有的书上主张叫“命令”(command)。对于命令式(Imperative)语言叫命令也许更好,本书这两个词通用。 早期的高级语言脱胎于汇编语言,语句和汇编语言的一条指令对应。它相当于程序世界的一条“指令”。是可以独立处理的最小单元(当编译或解释时)。程序员通过语言代码陈述的先后表达是程序最基本的顺序控制。但是一个复杂的计算单有顺序指令是编不出来的。汇编语言的JUMP指令在程序世界就成了GOTO命令。它打破单一的顺序,使程序有声有色。可以毫不夸张地说:命令式语言只要有赋值语句V∶=EXP,简单的逻辑条件IF(e)和GOTO语句就可以编出一切计算程序(输入/出除外)。按IF条件跳过一段代码是很容易的, GOTO返回到某起始语句即可实现重复。早期的语言都脱离不了GOTO。 GOTO和语句标号把顺序的程序代码切分得七零八落。 编译时只能把它们分成很多可连续执行的程序小块(显然,GOTO语句的前后语句不能在一块)的语句组。这就是模块(Module)一词的来历。对于重复执行的块单给出关键字和截止处语句标号,并引出循环域和嵌套循环的概念。这是模块封闭性的开始:GOTO只能从循环域内转向域外,反之不行。但当时重点还在想出方便的GOTO表示上。单GOTO语句FORTRAN就有五种之多。流程图的发明使得编程思路清晰,而程序代码仅仅是实现流程图的表示工具,它本身的可读性未引起足够重视。随着程序尺寸的增长,脱离了流程图,程序正文越来越难读(见第2章图2-3示例)。即使不太大的程序,几十个GOTO来回穿梭就成了戏称的“乱面条”程序。难读、难调、难修改。但当时人们醉心于精巧的设计。终于酿成60年代初的软件危机。 自从1965年E.Dijkstra提出“GOTO语句是有害的”以来,60年代中叶在西方软件界引起一场争论,因为它动摇了赖以构成巧妙计算转移的根基。既然它有害,那么,首先要回答,不用GOTO行不行?1966年Boehm和Jacopini回答了这个问题:任何流程图的计算逻辑都可以用顺序组、条件选择组、迭代组三种程序结构实现。这三种结构严格一个进口一个出口。也正因为如此可以随意嵌套(将某一对进出口置换成另一结构), 构成极为复杂的程序。用这三种构件块构造程序可完全不用GOTO语句。这就是结构化程序设计的基本思想。程序控制在块一级,块相对封闭,即不许有控制从块的一部分处转移到另一块内。这样程序控制就成了组织顺序、选择、迭代的结构了。 理论探索完成后要回答的第二个问题是用结构化程序代替非结构化程序会有哪些问题? 是否一切都好?事实上,结构化程序结构确有不方便之处,至少是低效。例如,在一计数循环中查找一个数,头几次就找到了,余下空循环不做到底是不能出来的。保留GOTO一跳出来不是更好吗?此外,若想利用某块中的部分代码不能从需用处进入非得从头上进入,这势必要保证不用部分空执行(没有GOTO,就要增加很多不必要的代码)。这就是是否取消GOTO值得争论的原因。最后大家接受了Knuth(1974)对GOTO使用的折衷意见:GOTO是有害的,但有时对改善效率带来好处。可以保留GOTO,但要加以限制使用。只能向前转移,不能向后。GOTO的迹线不能交叉,只能从块内转到块外,不得相反

您可能关注的文档

文档评论(0)

zhuwo + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档