目录
一、结构化程序设计的概念
结构化程序设计(structured programming)是进行以模块功能和处理过程设计为主的详细设计的基本原则。
结构化程序设计方法,是比较广泛是的程序设计方法,用这种方法编制的程序设计具有结构清晰,可读性强,易查错等特点,使得程序设计的效率和质量都能得以提高。
结构化程序设计有3种基本结构,即:顺序结构,选择结构,循环结构。
每种基本结构可以包含若干条语句。
程序设计的任务不仅是编写一个能得到正确结果的程序,还应当考虑程序的质量以及用什么方法能得到高质量的程序。随着计算机硬件价格逐步下降,而软件的成本(包括软件的生产费用和维护费用)不断的上升,促使人们考虑怎样才能降低成本,提高软件生产和维护的效率,这就是结构化程序设计方法的出现背景。
为了提高程序程序的易读性(容易理解),保证程序质量,降低软件成本,荷兰学者Dijkctra等提出了“结构化程序设计方法”。
它的要点:
1、程序的质量标准是“清晰第一,效率第二”。
2、要求程序设计者按一定规范书写。
3、规定用三种基本结构来组成程序。
4、自顶向下,逐步细化,模块化的程序设计方法。
一个综合型的复杂软件,被分为若干个相对独立的部分,每个部分又称为一个模块,根据具体情况,各个模块还可以再细分为几个小部分,每个小部分又称为一个子模块,这样一层层分解,逐步细化,使整个程序结构层次清晰,各个子模块任务简单明确,软件编写人员可以按模块进行分工合作,互相之间容易接口,不易发生遗漏,对编写程序和调试程序都带来方便。特别是在查找程序错误方面,缩小了范围,节省了时间和精力。
程序设计的主要步骤:
1、分析问题:即分析用户需求,给定的有哪些数据,需要输出什么样的数据,需要进行那种处理,需要用到那些硬件和软件,即分析运行环境。进行可行性分析,做到心中大体有数。
2、确定算法:算法是解题的过程。首先需要将一个物理过程或工作状态用数学形式表达出来,即确定解题最合适的过程,或确定合适的处理方案,对同一个问题处理方案的不同,决定了不同的处理步骤,效率则不同。
3、画出程序流程图。用规定的基本图形来描述解题步骤。它表达了算法,是编写程序的依据。
4、编写程序。根据流程图表达的步骤,用程序设计语言逐句逐行地写出程序。
5、调试程序。主要包括排错和测试两部分,排错是指查出在程序执行过程中出现的语法错误和逻辑错误,并加以改正;测试是指确认程序在各种可能的情况下正确,可靠地运行,输出结果准确无误,排错和测试常常是交叉进行的,直到结构满意为止。
6、建立健全的文档。文档资料是计算机软件的重要组成部分。从接受计算机解题任务开始就应注意加强文档资料的建立,解题任务完成时,文档资料也应建立完毕。
二、基本结构
结构化程序设计的三种基本结构是:顺序结构、选择结构和循环结构。
1、顺序结构
顺序结构表示程序中的各操作是按照它们出现的先后顺序执行的。
2、选择结构
选择结构表示程序的处理步骤出现了分支,它需要根据某一特定的条件选择其中的一个分支执行。选择结构有单选择、双选择和多选择三种形式。
3、循环结构
循环结构表示程序反复执行某个或某些操作,直到某条件为假(或为真)时才可终止循环。
在循环结构中最主要的是:什么情况下执行循环?哪些操作需要循环执行?
循环结构的基本形式有两种:当型循环和直到型循环。
当型循环:表示先判断条件,当满足给定的条件时执行循环体,并且在循环终端处流程自动返回到循环入口;
如果条件不满足,则退出循环体直接到达流程出口处。
因为是"当条件满足时执行循环",即先判断后执行,所以称为当型循环。
直到型循环:表示从结构入口处直接执行循环体,在循环终端处判断条件,如果条件不满足,返回入口处继续执行循环体,
直到条件为真时再退出循环到达流程出口处,是先执行后判断。
因为是"直到条件为真时为止",所以称为直到型循环。
三、内容
详细描述处理过程常用三种工具:图形、表格和语言。
图形:程序流程图、N-S图、PAD图 表格:判定表
语言:过程设计语言(PDL)
结构化程序设计曾被称为软件发展中的第三个里程碑。
该方法的要点是:
1、主张使用顺序、选择、循环三种基本结构来嵌套连结成具有复杂层次的“结构化程序”,严格控制GOTO语句的使用。
用这样的方法编出的程序在结构上具有以下效果:
a、以控制结构为单位,只有一个入口,一个出口,所以能独立地理解这一部分。
b、能够以控制结构为单位,从上到下顺序地阅读程序文本。
c、由于程序的静态描述与执行时的控制流程容易对应,所以能够方便正确地理解程序的动作。
2、“自顶而下,逐步求精”的设计思想,其出发点是从问题的总体目标开始,抽象低层的细节,先专心构造高层的结构,然后再一层一层地分解和细化。这使设计者能把握主题,高屋建瓴,避免一开始就陷入复杂的细节中,使复杂的设计过程变得简单明了,过程的结果也容易做到正确可靠。
3、“独立功能,单出、入口”的模块结构,减少模块的相互联系使模块可作为插件或积木使用,降低程序的复杂性,提高可靠性。程序编写时,所有模块的功能通过相应的子程序(函数或过程)的代码来实现。程序的主体是子程序层次库,它与功能模块的抽象层次相对应,编码原则使得程序流程简洁、清晰,增强可读性。
4、主程序员组。
其中(1)、(2)是解决程序结构规范化问题;(3)是解决将大划小,将难化简的求解方法问题;(4)是解决软件开发的人员组织结构问题。
四、设计方法
自顶向下
程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。
逐步细化
对复杂问题,应设计一些子目标作为过渡,逐步细化。
模块化
一个复杂问题,肯定是由若干稍简单的问题构成。模块化是把程序要解决的总目标分解为子目标,再进一步分解为具体的小目标,把每一个小目标称为一个模块。
限制使用goto语句 结构化程序设计方法的起源来自对GOTO语句的认识和争论。肯定的结论是,在块和进程的非正常出口处往往需要用GOTO语句,使用GOTO语句会使程序执行效率较高;
在合成程序目标时,GOTO语句往往是有用的,如返回语句用GOTO。
否定的结论是,GOTO语句是有害的,是造成程序混乱的祸根,程序的质量与GOTO语句的数量呈反比,应该在所有高级程序设计语言中取消GOTO语句。
取消GOTO语句后,程序易于理解、易于排错、容易维护,容易进行正确性证明。
作为争论的结论,1974年Knuth发表了令人信服的总结,并证实了:
-
GOTO语句确实有害,应当尽量避免;
-
完全避免使用GOTO语句也并非是个明智的方法,有些地方使用GOTO语句,会使程序流程更清楚、效率更高;
-
争论的焦点不应该放在是否取消GOTO语句上,而应该放在用什么样的程序结构上。其中最关键的是,应在以提高程序清晰性为目标的结构化方法中限制使用GOTO语句。
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!