- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅谈结构化程序设计与GOTO语new.doc
浅谈结构化程序设计与GOTO语句
魏为民
摘 要:本文讨论了结构化程序的基本特征,提出了goto语句在某些特殊情况下的程序设计中的一些用处。
关键词:结构化程序;goto语句;程序设计优化;程序可读性;程序加密。
荷兰学者Dijkstra提出了“结构化程序设计”的思想,它规定了一套方法,使程序具有合理的结构,以保证和验证程序的正确性,这种方法要求程序设计者不能随心所欲地编写程序,而要按照一定的结构形式来设计和编写程序,它的一个重要目的是使程序具有良好的结构,使程序易于设计,易于理解,易于调试修改,以提高设计和维护程序工作的效率。在Djakstra的时代,goto语句曾经引发了一场规模不小的争议,从那以后,goto就不被程序员青睐了。虽然到了最后,人们并没有把goto 语句处以极刑,然而亦鲜有人撰文提及goto 语句的用处,我们只能读到关于goto语句弊病的文章。在各种程序设计教科书上几乎都提到了goto ,并且青一色地建议其读者在编程时不用goto语句,因为:“可以证明,任何一个程序都可以使用三种基本的结构来构成,goto语句是多余的”。很可能再过几年人们就将忘记当今各种程序设计语言中几乎都具备的goto 语句了。在本文中,结合本人的一些编程经验,谈谈 goto 语句在某些特殊情况下的程序设计中的用处。
一、结构化程序设计的基本特征
结构化程序设计(Structured Programming)是荷兰学者E.W.Dijkstra等人在研究的人的智力局限性随着程序规模的增大而表现出来的不适应之后,于1969年提出的一种程序设计方法,这是一种复杂任务时避免混乱的技术。提出了把程序结构规范化的主张,要求对复杂问题的求解过程应按我们大脑容易理解的方式进行组织,而不是强迫我们的大脑去接受难以忍受的冲击。具体来说,结构化程序设计的思想包括以下三方面的内容:
(1)程序由一些基本结构组成。任何一个大型的程序都由三种基本结构所组成,由这些基本结构顺序地构成了一个结构化的程序。这三种基本结构为:顺序结构(如下图(1)所示),选择结构(亦称分支结构,如下图(2)所示)和循环结构(如下图(3)所示)。
图1 顺序结构图 图2 选择结构图 图3 循环结构图
同时结构化定理还进一步表明,任何一个复杂问题的程序设计都可以用顺序、选择和循环这三种基本结构组成,且它们都具有以下特点:只有一个入口;只有一个出口;结构中无死循环,程序中三种基本结构之间形成顺序执行关系。
(2)一个大型程序应按功能分割成一些功能模块,并把这些模块按层次关系进行组织。
(3)在程序设计时应采用自顶向下逐步细化的实施方法。
按结构化程序设计方法设计出的程序优点是:结构良好、各模块间的关系清晰简单、每一模块内都由基本单元组成。这样设计出的程序清晰易读,可理解性好,容易设计,容易验证其正确性,也容易维护。同时,由于采用了“自顶向下、逐步细化”的实施方法,能有效地组织人们的智力,有利于软件的工程化开发。
二、Goto语句与程序设计优化
任何一个结构化程序在编译以后都是需要用机器语言中的直接转移指令语句(同goto完全是一回事)来实现其结构的。在编译时,编译系统常常为了对程序进行优化而加入直接转移指令。其实,在使用高级语言编写程序的阶段,在不影响程序可读性的前提下,我们仍然有可能使用goto语句优化程序,提高程序的运行效率,减少代码的冗余。
我们可以举出很多使用goto 优化程序的例子,比如以下的case结构中经常使用的一种模型:
程序模型A:
switch (Variable)
{
case Value1:
Do specific Value1 here;
goto CommonCaseProcess;
case Value2:
Do Value2 here;
break;
case Value3:
Do specific Value3 here;
goto CommonCaseProcess;
case Value4:
Do specific Value4 here;
CommonCaseProcess:
Do Common Process here;
break;
}
这样写程序是由于case Value1, case Value3, case Value4的处理代码中最后阶段要做相同的事情。如果不使用goto 语句,则有如下两种等效的解决办法:
程序模型B:
switch (Variable)
{
case Value1:
Do specific Value1 here;
Do Common Process here;
break;
case Value2:
Do Value2 here;
break;
case Value3:
Do speci
文档评论(0)