结构化程序设计的工作原理是什么

结构化程序设计的工作原理是什么,第1张

是进行以模块功能和处理过程设计为主的详细设计的基本原则。结构程序设计是过程式程序设计的一个子集,它对写入的程序使用逻辑结构,使得理解和修改更有效更容易。

中文名:结构化程序设计

外文名:structured programming

提出人:EWDijikstra

时间:1965年

分享

概述

概念

其概念最早由EWDijikstra在1965年提出的,是软件发展的一个重要的里程碑。它的主要观点是采用自顶向下、逐步求精及模块化的程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序、选择、循环三种基本控制结构构造。结构化程序设计主要强调的是程序的易读性。

内容

详细描述处理过程常用三种工具:图形、表格和语言。

图形:程序流程图、N-S图、PAD图 表格:判定表

语言:过程设计语言(PDL)

结构化程序设计曾被称为软件发展中的第三个里程碑。该方法的要点是:

(1) 主张使用顺序、选择、循环三种基本结构来嵌套连结成具有复杂层次的“结构化程序”,严格控制GOTO语句的使用。用这样的方法编出的程序在结构上具有以下效果:

a 以控制结构为单位,只有一个入口,一个出口,所以能独立地理解这一部分。

b 能够以控制结构为单位,从上到下顺序地阅读程序文本。

c由于程序的静态描述与执行时的控制流程容易对应,所以能够方便正确地理解程序的动作。

(2)“自顶而下,逐步求精”的设计思想,其出发点是从问题的总体目标开始,抽象低层的细节,先专心构造高层的结构,然后再一层一层地分解和细化。这使设计者能把握主题,高屋建瓴,避免一开始就陷入复杂的细节中,使复杂的设计过程变得简单明了,过程的结果也容易做到正确可靠。

(3)“独立功能,单出、入口”的模块结构,减少模块的相互联系使模块可作为插件或积木使用,降低程序的复杂性,提高可靠性。程序编写时,所有模块的功能通过相应的子程序(函数或过程)的代码来实现。程序的主体是子程序层次库,它与功能模块的抽象层次相对应,编码原则使得程序流程简洁、清晰,增强可读性。

(4) 主程序员组。

其中(1)、(2)是解决程序结构规范化问题;(3)是解决将大划小,将难化简的求解方法问题;(4)是解决软件开发的人员组织结构问题。

模型

结构化程序设计通常使用自上往下的设计模型,开发员将整个程序结构映射到单个小部分。已定义的函数或相似函数的集合在单个模块或字模块中编码,这意味着,代码能够更有效的载入存储器,模块能在其它程序中再利用。模块单独测试之后,与其它模块整合起来形成整个程序组织。

程序流程遵循简单的层次化模型,采用“for”、“repeat”、“while”等循环结构,鼓励使用“Go To”语句。几乎任何语言都能使用结构化程序设计技术来避免非结构化语言的通常陷阱。非结构化程序设计必须依赖于开发人员避免结构问题,从而导致程序组织较差。大多数现代过程式语言都鼓励结构化程序设计。

基本结构

结构化程序设计的三种基本结构是:顺序结构、选择结构和循环结构。

顺序结构

顺序结构表示程序中的各 *** 作是按照它们出现的先后顺序执行的。

选择结构

选择结构表示程序的处理步骤出现了分支,它需要根据某一特定的条件选择其中的一个分支执行。选择结构有单选择、双选择和多选择三种形式。

循环结构

循环结构表示程序反复执行某个或某些 *** 作,直到某条件为假(或为真)时才可终止循环。在循环结构中最主要的是:什么情况下执行循环?哪些 *** 作需要循环执行?循环结构的基本形式有两种:当型循环和直到型循环。

当型循环:表示先判断条件,当满足给定的条件时执行循环体,并且在循环终端处流程自动返回到循环入口;如果条件不满足,则退出循环体直接到达流程出口处。因为是"当条件满足时执行循环",即先判断后执行,所以称为当型循环。

直到型循环:表示从结构入口处直接执行循环体,在循环终端处判断条件,如果条件不满足,返回入口处继续执行循环体,直到条件为真时再退出循环到达流程出口处,是先执行后判断。因为是"直到条件为真时为止",所以称为直到型循环。

设计方法

自顶向下

程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。

逐步细化

对复杂问题,应设计一些子目标作为过渡,逐步细化。

模块化

一个复杂问题,肯定是由若干稍简单的问题构成。模块化是把程序要解决的总目标分解为子目标,再进一步分解为具体的小目标,把每一个小目标称为一个模块。

限制使用goto语句 结构化程序设计方法的起源来自对GOTO语句的认识和争论。肯定的结论是,在块和进程的非正常出口处往往需要用GOTO语句,使用GOTO语句会使程序执行效率较高;在成程序目标时,GOTO语句往往是有用

结构化的算法:由三种基本结构构成的算法结构是结构化的算法。

因为结构化的算法不存在无规律的转向,只在本基本结构内才允许存在分支和向前或向后的跳转。不会出现死循环,使算法的质量得到保证和提高,所以,要提倡结构化的算法。

结构化程序设计方法的主要原则可以概括为:

1、自顶向下:程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。

2、逐步求精:对复杂问题,应设计一些子目标作为过渡,逐步细化。

3、模块化:一个复杂问题,肯定是由若干稍简单的问题构成。模块化是把程序要解决的总目标分解为子目标,再进一步分解为具体的小目标,把每一个小目标称为一个模块。

4、限制使用goto语句:结构化程序设计方法的起源来自对GOTO语句的认识和争论。肯定的结论是,在块和进程的非正常出口处往往需要用GOTO语句,使用GOTO语句会使程序执行效率较高;在合成程序目标时,GOTO语句往往是有用的,如返回语句用GOTO。否定的结论是,GOTO语句是有害的,是造成程序混乱的祸根,程序的质量与GOTO语句的数量呈反比,应该在所有高级程序设计语言中取消GOTO语句。取消GOTO语句后,程序易于理解、易于排错、容易维护,容易进行正确性证明。作为争论的结论,1974年Knuth发表了令人信服的总结,并证实了:GOTO语句确实有害,应当尽量避免。完全避免使用GOTO语句也并非是个明智的方法,有些地方使用GOTO语句,会使程序流程更清楚、效率更高。争论的焦点不应该放在是否取消GOTO语句上,而应该放在用什么样的程序结构上。其中最关键的是,应在以提高程序清晰性为目标的结构化方法中限制使用GOTO语句。

结构化程序设计思想的核心是算法设计。基本思想是采用自顶向下、逐步细化的设计方法和单入单出的控制结构。

自顶向下和逐步细化的设计方法是将一个复杂任务按照功能进行拆分,并逐层细化到便于理解和描述的程度,最终形成由若干独立模块组成的树状层次结构,单入单出的控制结构是指每个模块内部均用顺序、选择、循环三种基本结构来描述。

一、方法原则

1、只采用三种基本的程序控制结构来编制程序,从而使程序具有良好的结构;

2、程序设计自顶而下;

3、用结构化程序设计流程图来表示算法。

二、结构化程序设计的三种基本结构:顺序,分支和循环

1、顺序从上到下依次执行下来,中间没有任何分叉

2、分支在执行过程中,根据条件成立与否产生了不同的 *** 作

3、循环当某一条件成立时,反复做相同的 *** 作。

结构化程序设计强调的是程序设计风格和程序结构的规范化,提倡清晰的结构。结构化程序设计风格需要经过以下几个步骤进行:自顶向下、逐步细化、模块化设计、结构化编码。

结构化程序设计(structuredprogramming)是进行以模块功能和处理过程设计为主的详细设计的基本原则。结构化程序设计是过程式程序设计的一个子集,它对写入的程序使用逻辑结构,使得理解和修改更有效更容易。

“面向结构”的程序设计方法即结构化程序设计方法,是“面向过程”方法的改进,结构上将软件系统划分为若干功能模块,各模块按要求单独编程,再由各模块连接,组合构成相应的软件系统。该方法强调程序的结构性,所以容易做到易读,易懂。

任何复杂的算法,都可以由顺序结构、选择(分支)结构和循环结构三种基本结构组成。在构造算法时,也仅以这三种结构作为基本单元,同时规定基本结构之间可以并列和互相包含,不允许交叉和从一个结构直接转到另一个结构的内部去。结构清晰,易于正确性验证和纠正程序中的错误,这种方法就是结构化方法,遵循这种方法的程序设计,就是结构化程序设计。遵循这种结构的程序只有一个输入口和一个输出口;

结构化程序的概念首先是从以往编程过程中无限制地使用转移语句而提出的。转移语句可以使程序的控制流程强制性的转向程序的任一处,在传统流程图中,用"很随意"的流程线来描述转移功能。如果一个程序中多处出现这种转移情况,将会导致程序流程无序可寻,程序结构杂乱无章,这样的程序是令人难以理解和接受的,并且容易出错。尤其是在实际软件产品的开发中,更多的追求软件的可读性和可修改性,象这种结构和风格的程序是不允许出现的。为此提出了程序的三种基本结构;

在讨论算法时我们列举了程序的顺序、选择和循环三种控制流程,这就是结构化程序设计方法强调使用的三种基本结构。算法的实现过程是由一系列 *** 作组成的,这些 *** 作之间的执行次序就是程序的控制结构。1996年,计算机科学家Bohm和Jacopini证明了这样的事实:任何简单或复杂的算法都可以由顺序结构、选择结构和循环结构这三种基本结构组合而成。所以,这三种结构就被称为程序设计的三种基本结构。也是结构化程序设计必须采用的结构;

结构化程序中的任意基本结构都具有唯一入口和唯一出口,并且程序不会出现死循环。在程序的静态形式与动态执行流程之间具有良好的对应关系。

结构化程序的概念首先是从以往编程过程中无限制地使用转移语句而提出的。转移语句可以使程序的控制流程强制性的转向程序的任一处,在传统流程图中,就是用上节我们提到的"很随意"的流程线来描述这种转移功能。如果一个程序中多处出现这种转移情况,将会导致程序流程无序可寻,程序结构杂乱无章,这样的程序是令人难以理解和接受的,并且容易出错。尤其是在实际软件产品的开发中,更多的追求软件的可读性和可修改性,象这种结构和风格的程序是不允许出现的。为此提出了程序的三种基本结构。

在讨论算法时我们列举了程序的顺序、选择和循环三种控制流程,这就是结构化程序设计方法强调使用的三种基本结构。算法的实现过程是由一系列 *** 作组成的,这些 *** 作之间的执行次序就是程序的控制结构。1996年,计算机科学家Bohm和Jacopini证明了这样的事实:任何简单或复杂的算法都可以由顺序结构、选择结构和循环结构这三种基本结构组合而成。所以,这三种结构就被称为程序设计的三种基本结构。也是结构化程序设计必须采用的结构。

1 顺序结构

顺序结构表示程序中的各 *** 作是按照它们出现的先后顺序执行的,其流程如图1-6所示。图中的s1和s2表示两个处理步骤,这些处理步骤可以是一个非转移 *** 作或多个非转移 *** 作序列,甚至可以是空 *** 作,也可以是三种基本结构中的任一结构。整个顺序结构只有一个入口点a和一个出口点b。这种结构的特点是:程序从入口点a开始,按顺序执行所有 *** 作,直到出口点b处,所以称为顺序结构。上一节图1-2表示的就是一个顺序结构的流程图。事实上,不论程序中包含了什么样的结构,而程序的总流程都是顺序结构的。例如,在图1-3、图1-4和图1-5所表示的流程图中,其总体结构流程都是自上而下顺序执行的。

2选择结构

选择结构表示程序的处理步骤出现了分支,它需要根据某一特定的条件选择其中的一个分支执行。选择结构有单选择、双选择和多选择三种形式。

双选择是典型的选择结构形式,其流程如图1-8所示,图中的s1和s2与顺序结构中的说明相同。由图中可见,在结构的入口点a处是一个判断框,表示程序流程出现了两个可供选择的分支,如果条件满足执行s1处理,否则执行s2处理。值得注意的是,在这两个分支中只能选择一条且必须选择一条执行,但不论选择了哪一条分支执行,最后流程都一定到达结构的出口点b处。前面的图1-3中就采用了双选择结构流程图。

当s1和s2中的任意一个处理为空时,说明结构中只有一个可供选择的分支,如果条件满足执行s1处理,否则顺序向下到流程出口b处。也就是说,当条件不满足时,什么也没执行,所以称为单选择结构,如图1-7所示。

多选择结构是指程序流程中遇到如图1-9所示的s1、s2、……、sn等多个分支,程序执行方向将根据条件确定。如果满足条件1则执行s1处理,如果满足条件n则执行Sn处理,总之要根据判断条件选择多个分支的其中之一执行。不论选择了哪一条分支,最后流程要到达同一个出口处。如果所有分支的条件都不满足,则直接到达出口。有些程序语言不支持多选择结构,但所有的结构化程序设计语言都是支持的,C语言是面向过程的结构化程序设计语言,它可以非常简便的实现这一功能。本书在第五章将详细介绍各种形式的选择结构应用问题。

3循环结构

循环结构表示程序反复执行某个或某些 *** 作,直到某条件为假(或为真)时才可终止循环。在循环结构中最主要的是:什么情况下执行循环?哪些 *** 作需要循环执行?循环结构的基本形式有两种:当型循环和直到型循环,其流程如图1-10所示。图中虚线框内的 *** 作称为循环体,是指从循环入口点a到循环出口点b之间的处理步骤,这就是需要循环执行的部分。而什么情况下执行循环则要根据条件判断。

当型结构:表示先判断条件,当满足给定的条件时执行循环体,并且在循环终端处流程自动返回到循环入口;如果条件不满足,则退出循环体直接到达流程出口处。因为是"当条件满足时执行循环",即先判断后执行,所以称为当型循环。其流程如图1-10(a)所示。

直到型循环:表示从结构入口处直接执行循环体,在循环终端处判断条件,如果条件不满足,返回入口处继续执行循环体,直到条件为真时再退出循环到达流程出口处,是先执行后判断。因为是"直到条件为真时为止",所以称为直到型循环。其流程如图1-10(b)所示。本章图1-5用迭代法求和的流程图就是一个典型的直到型循环结构。

同样,循环型结构也只有一个入口点a和一个出口点b,循环终止是指流程执行到了循环的出口点。图中所表示的S处理可以是一个或多个 *** 作,也可以是一个完整的结构或一个过程。

整个虚线框中是一个循环结构。

通过三种基本控制结构可以看到,结构化程序中的任意基本结构都具有唯一入口和唯一出口,并且程序不会出现死循环。在程序的静态形式与动态执行流程之间具有良好的对应关系。

132 N-S流程图

N-S流程图是结构化程序设计方法中用于表示算法的图形工具之一。对于结构化程序设计来说,传统流程图已很难完全适应了。因为传统流程图出现得较早,它更多地反映了机器指令系统设计和传统程序设计方法的需要,难以保证程序的结构良好。另外,结构化程序设计的一些基本结构在传统流程图中没有相应的表达符号。例如,在传统流程图中,循环结构仍采用判断结构符号来表示,这样不易区分到底是哪种结构。特别是传统流程图由于转向的问题而无法保证自顶而下的程序设计方法,使模块之间的调用关系难以表达。为此,两位美国学者Nassi和Shneiderman于1973年就提出了一种新的流程图形式,这就是N-S流程图,它是以两位创作者姓名的首字母取名,也称为Nassi Shneiderman图。

N-S图的基本单元是矩形框,它只有一个入口和一个出口。长方形框内用不同形状的线来分割,可表示顺序结构、选择结构和循环结构。在N-S流程图中,完全去掉了带有方向的流程线,程序的三种基本结构分别用三种矩形框表示,将这种矩形框进行组装就可表示全部算法。这种流程图从表达形式上就排除了随意使用控制转移对程序流程的影响,限制了不良程序结构的产生。

与顺序、选择和循环这三种基本结构相对应的N-S流程图的基本符号如图1-11所示。图1-11(a)和图1-11(b)分别是顺序结构和选择结构的N-S图表示,图1-11(c)和图1-11(d)是循环结构的N-S图表示。由图可见,在N-S图中,流程总是从矩形框的上面开始,一直执行到矩形框的下面,这就是流程的入口和出口,这样的形式是不可能出现无条件的转移情况。下面用N-S流程图表示前面例1-2中求函数值m的算法,其流程如图1-12所示。

值得注意的是,N-S流程图是适合结构化程序设计方法的图形工具,对于非结构化的程序,用N-S流程图是无法表示的。

例如在例1-3中,求任意两个正整数的最大公约数,其算法是非常经典的,图1-5中用传统流程图表示了该算法,但是这个算法却无法直接用N-S流程图表示。因为该算法的关键是执行一个循环结构,但图1-5表示的循环结构既不是当型循环,也不是直到型循环,这样,用N-S流程图就无法表示。如果将例1-3中的算法稍作调整,使流程图采用单选择结构形式,其中的条件改为r≠0,这样就可以用直到型循环的N-S流程图表示这个算法。图1-13是表示例1-3的N-S流程图。

N-S流程图是描述算法的重要图形工具之一,在结构化程序设计中得到了广泛应用。在此仅作简单介绍,旨在抛砖引玉。在实际软件开发中,有兴趣的读者可参阅有关软件工程或软件开发技术等方面的著作。

133 结构化程序设计方法

结构化程序设计方法是公认的面向过程编程应遵循的基本方法和原则。结构化程序设计方法主要包括:①只采用三种基本的程序控制结构来编制程序,从而使程序具有良好的结构;②程序设计自顶而下;③用结构化程序设计流程图表示算法。

有关结构化程序设计及方法有一整套不断发展和完善的理论和技术,对于初学者来说,完全掌握是比较困难的。但在学习的起步阶段就了解结构化程序设计的方法,学习好的程序设计思想,对今后的实际编程是很有帮助的。

1结构化程序设计特征

结构化程序设计的特征主要有以下几点:

(1) 以三种基本结构的组合来描述程序;

(2) 整个程序采用模块化结构;

(3) 有限制地使用转移语句,在非用不可的情况下,也要十分谨慎,并且只限于在一个结构内部跳转,不允许从一个结构跳到另一个结构,这样可缩小程序的静态结构与动态执行过程之间的差异,使人们能正确理解程序的功能;

(4) 以控制结构为单位,每个结构只有一个入口,一个出口,各单位之间接口简单,逻辑清晰;

(5) 采用结构化程序设计语言书写程序,并采用一定的书写格式使程序结构清晰,易于阅读;

(6) 注意程序设计风格。

2 自顶而下的设计方法

结构化程序设计的总体思想是采用模块化结构,自上而下,逐步求精。即首先把一个复杂的大问题分解为若干相对独立的小问题。如果小问题仍较复杂,则可以把这些小问题又继续分解成若干子问题,这样不断地分解,使得小问题或子问题简单到能够直接用程序的三种基本结构表达为止。然后,对应每一个小问题或子问题编写出一个功能上相对独立的程序块来,这种象积木一样的程序块被称为模块。每个模块各个击破,最后再统一组装,这样,对一个复杂问题的解决就变成了对若干个简单问题的求解。这就是自上而下,逐步求精的程序设计方法。

确切地说,模块是程序对象的集合,模块化就是把程序划分成若干个模块,每个模块完成一个确定的子功能,把这些模块集中起来组成一个整体,就可以完成对问题的求解。这种用模块组装起来的程序被称为模块化结构程序。在模块化结构程序设计中,采用自上而下,逐步求精的设计方法便于对问题的分解和模块的划分,所以,它是结构化程序设计的基本原则。

例1-9: 求一元二次方程:

ax2+bx+c=0

的根。

分析:先从最上层考虑,求解问题的算法可以分成三个小问题,即:输入问题、求根问题和输出问题。这三个小问题就是求一元二次方程根的三个功能模块:输入模块M1、计算处理模块M2和输出模块M3。其中M1模块完成输入必要的原始数据,M2模块根据求根算法求解,M3模块完成所得结果的显示或打印。这样的划分,使求一元二次方程根的问题变成了三个相对独立的子问题,其模块结构如图1-14所示。

分解出来的三个模块从总体上是顺序结构。其中M1和 M3模块是完成简单的输入和输出,可以直接设计出程序流程,不需要再分解。而M2模块是完成求根计算,求根则需要首先判断二次项系数a是否为0。当a=0时,方程蜕化成一次方程,求根方法就不同于二次方程。如果a≠0,则要根据b2-4ac的情况求二次方程的根。可见M2模块比较复杂,可以将其再细化成M21和M22两个子模块,分别对应一次方程和二次方程的求根,其模块结构如图1-15所示。

此次分解后,M21子模块的功能是求一次方程的根,其算法简单,可以直接表示。M22是求二次方程的根,用流程图表示算法如图1-16所示,它由简单的顺序结构和一个选择结构组成,这就是M22模块最细的流程表示。然后,按照细化M22模块的方法,分别将M1、M21和M3的算法用流程图表示出来,再分别按图1-15和图1-14的模块结构组装,最终将得到细化后完整的流程图。

可见,编制程序与建大楼一样,首先要考虑大楼的整体结构而忽略一些细节问题,待把整体框架搭起来后,再逐步解决每个房间的细节问题。在程序设计中就是首先考虑问题的顶层设计,然后再逐步细化,完成底层设计。使用自顶向下、逐步细化的设计方法符合人们解决复杂问题的一般规律,是人们习惯接受的方法,可以显著地提高程序设计的效率。在这种自顶而下、分而治之的方法的指导下,实现了先全局后局部,先整体后细节,先抽象后具体的逐步细化过程。这样编写的程序具有结构清晰的特点,提高程序的可读性和可维护性。

3 程序设计的风格

程序设计风格从一定意义上讲就是一种个人编写程序时的习惯。而风格问题不象方法问题那样涉及一套比较完善的理论和规则,程序设计风格是一种编写程序的经验和教训的提炼,不同程度和不同应用角度的程序设计人员对此问题也各有所见。正因为如此,程序设计风格很容易被人们忽视,尤其是初学者。结构化程序设计强调对程序设计风格的要求。因为,程序设计风格主要影响程序的可读性。一个具有良好风格的程序应当注意以下几点:

(1) 语句形式化。程序语言是形式化语言,需要准确,无二义性。所以,形式呆板、内容活泼是软件行业的风范;

(2) 程序一致性。保持程序中的各部分风格一致,文档格式一致;

(3) 结构规范化。程序结构、数据结构、甚至软件的体系结构要符合结构化程序设计原则;

(4) 适当使用注释。注释是帮助程序员理解程序,提高程序可读性的重要手段,对某段程序或某行程序可适当加上注释;

(5) 标识符贴近实际。程序中数据、变量和函数等的命名原则是:选择有实际意义标识符,以易于识别和理解。要避免使用意义不明确的缩写和标识符。例如:表示电压和电流的变量名尽量使用v和i,而不要用a和b。要避免使用类似aa、bb等无直观意义的变量名。

以上就是关于结构化程序设计的工作原理是什么全部的内容,包括:结构化程序设计的工作原理是什么、什么叫结构化的算法为什么要提倡结构化的算法、结构化程序设计思想的核心是要求等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9818350.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存