浅析结构化程序的设计技巧

时间:2022-07-27 04:25:32

浅析结构化程序的设计技巧

摘 要:结构化程序设计方法可以概括为自顶向下、逐步求精和模块化,将原来较为复杂的问题化简为一系列简单模块的设计方法。本文从结构程序设计的基本特点入手,简要分析了在结构化程序设计中灵活运用若干技巧对提高程序设计的稳定性和可靠性的应用价值。

关键词:结构化程序设计 数据结构 算法 设计技巧

近年来,计算机程序设计技术已从结构化程序设计技术逐步向对象程序设计技术过渡,特别是当设计一个较大规模的应用程序时,面向对象设计思路成为首选。纵观计算机软件技术的发展,在局部功能的实现上及功能模块的设计上,结构化程序设计仍然有其不可替代的独特魅力。在结构化程序设计中(以C语言为例),巧妙地运用一些设计技巧,对增强程序的稳定性和可靠性,简化程序操作步聚,提高程序的运行效率十分有效。

结构化程序设计的概念最初是由荷兰学者E・W・DUKSTRA等人在20世纪60年代提出的,它的基本思路是:以模块化设计为中心,将原来较为复杂的问题简化为一系列简单模块的设计,也就是将一个大的计算任务划分为若干个较小的任务,这些小任务均由函数来完成。函数既可以是C语言定义的标准库函数,也可以是自定义函数。在实际应用程序中,一个具备一定规模的C语言程序往往由多个函数组成,其中必有一个命名为main的主函数,由main来调用其他函数。必要时,其他函数还可以调用另外的函数,同一函数可以被一个或多个函数调用一次或多次。

结构化程序设计把程序归结为用顺序结构、选择结构和循环结构等三种基本结构来描述的逻辑问题。顺序结构的程序流程是按语句的书写顺序依次执行;在C语言中,有4种语句是顺序执行的:即空语句、表达式语句、函数调用语句及复合语句;选择结构是对给定条件进行判断,根据判断结果决定执行两分支中的一个分支或多分支中的一个分支,选择语句有if语句和switch语句;循环结构是在给定条件成立的情况下,反复执行某个程序段,循环语句有for,while和do-while语句以及一些辅助流程转向语句如continue,break,go to等等。以上三种结构通过流程控制语句来实现。流程控制语句在程序设计中起着十分重要的作用,通过三种基本控制结构的合理调配使结构化程序具有唯一的入口和出口,不会出现死循环,而且程序的静态形式与动态执行形式之间具有良好的对应关系。

从以上结构化程序的基本特点分析,结构化程序设计主要强调的是程序。程序=算法+数据结构+程序设计方法+语言工具和环境,其中算法是灵魂,是解决“做什么”和“怎么做”的问题;数据结构是加工对象;语言是工具;编程需要采用合适的方法。具体解决主要问题包含以下几个步骤:

分析问题,找出解决问题的模型根据模型设计出适合计算机特点的处理方法即算法进行编程程序,以实现算法上机编辑(.c)、编译(.obj)、连接(.exe)、运行所编制的程序,直到得出正确结果对结果进行分析,整理出文字材料。

程序设计的任务不只是编写出一个能得到正确结果的程序,还应考虑程序的质量,否则编写的程序就会出现质量低下、可靠性差、开发周期长、维护费用高等不良后果,即所谓的的“软件危机”,它会严重阻碍计算机应用的发展。由于大多高级语言都支持结构化程序设计方法,其语法上都含有表示三种基本结构的语句,所以用结构化程序设计方法设计的模块从结构到程序的实现是直接转换的,只需用相应的语句结构代替标准的控制结构即可。笔者在实际应用中,总结出以下几点实用技巧。

一、通过引申法廓清思路,选准目标

“引申法”就是通过对某一结论的合理引申,结合已经解决的问题,因势利导,在此基础上解决相关联的其他问题。“引申法”可以培养人们在程序设计方面的发散思维,提高程序设计的应变能力。问题是活的,但程序是有章可循的;语法是有限的,可解决的问题是无限的。程序设计相当一部分工作是分析问题,找到解决问题的方法,再以相应的语言写出代码。要熟练掌握一些简单的算法,根据不同的问题,再灵活应用。如用100元钱买100只鸡,公鸡、母鸡、小鸡分别是5元、3元、1元一只。在数学上解三元一次方程,三个未知数,两个方程好像解不出来。通过“穷举法”,我们要费好大一番工夫才能算出结果,但是通过计算机“引申”编程运算却不用一秒钟即可解决问题。只有在分析实际向题的基础上,以清晰的思路去设计算法,才能举一反三,以不变应万变。通过“引申”法,我们可使初学者对函数设计的关键问题有清晰的认识,利于从统筹全局的角度去考虑问题,体现了程序设计逐步求精的思路。

二、利用框架法培养全局思维和算法的整体设计能力

其具体体现在两方面。一是在有了一点编程基础后要利用伪代码或流程图,从算法设计的角度讲解编程思路,而不应拘泥于语法细节,不分主次、逐条语句地讲解代码。这样可以层次分明,突出算法设计的关键,利于培养编程思路。二是在学习重点章节函数时,由于新的算法已很少,主要是学习用函数调用的方法来重新编制以前所熟悉的程序,我们可以把着眼点放在函数的设计框架上,体现参数设计、返回值设计等关键问题,而无需细讲函数体的实现细节。结构化构造减小了程序的复杂性,提高了可靠性、可测试性和可维护性,使用少数的基本结构,就可使程序逻辑结构清晰,易读易懂,并且容易验证程序的正确性。

三、借助求异法引导新思路,启迪新思维

结构化程序设计方法的基本思路是:把一个复杂的问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。一个固定的问题,解决的方法可能不唯一,如果能启发人们多角度、多侧面去寻求解决问题的办法,则可激发思考的积极性,提高其学习兴致。对一个初学计算机语言的人来说,最重要的就是要有正确的程序流程概念,不仅要懂得,而且要灵活应用。由此可见,用结构化方法设计的结构是清晰的,有利于编写出结构良好的程序。在C语言中一题多解的情况有很多,有意识地引导新思路,鼓励新方法,以培养人们在编程中的求异思维,而不是死记硬背,墨守成规。结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构。

四、选准切入口,合理划分功能模块“分而治之”

结构化程序设计的关键在于功能模块的选定和划分。模块化设计的思想实际上是一种“分而治之”的思想,把一个大任务分为若干个子任务,每一个子任务的划分以相对简单为前提。划分子模块时我们应注意模块的独立性,即:使一个模块完成一项功能,耦合性愈少愈好。具体应用时从问题本身入手,自顶向下,逐步细化,精益求精,将解决问题的步骤分解为由基本程序结构模块组成的通过程序流程图、N-S图、PAD图表格等表示的结构化程序框图。在实践应用中往往会出现以下几个问题:一是用户要求难以在系统分析阶段准确定义,致使系统在交付使用时产生许多问题。二是用系统开发每个阶段的成果来进行控制,不能适应事物变化的要求。三是系统的开发周期较长。

为解决这些问题,我们要求模块的设计要简洁明了,语句的选用要直观,不要拖泥带水。下面是一段小程序,从中可以看出一些语句选用的技巧。

某淘宝商城为鼓励更多网友光临本店,对新老网友给出如下优惠:凡是购买10件以上者,打9折;20件以上者,8.5折优惠;30件以上者,8折优惠,40件以上者,7.5折优惠。如用习惯上的if嵌套语句编写程序如下:

Main()

{float x,y;

printf(“请输入优惠购额款X:\n”);

scanf(“%f”,&x);

if(x

y=x;

else if(x

y=0.9*x;

else if(x

y=0.85*x;

else if(x

y=0.8*x;

else

y=0.75*x;

printf(“网友应付优惠后款额Y为:y);}

显然,这段程序冗长,一旦情况有变化,难以扩展。转换为switch语句结构后,程序就变得相对简单:

Main()

{float x,y;

Int t;

Printf(“请输入优惠购额款X:\n”);

Scanf(“%f”,&x);

If(x>=40)

t =4;

elst

t=(in)(x/10);

switch(t)

{case 0:y=x;break;

case1:y=0.9*x;break;

case2:y=0.85*x;break;

case3:y=0.8*x;break;

case4:y=0.75*x;break;}

printf(“网友应付优惠后款额Y为:y);}

两种方法可谓异曲同工,但是对于程序的调试性和可维护性却有天壤之别。在结构化程序的编程实践中,我们要查找某些错误比较困难,所以要尽可能避免出现这些问题。编程技巧需要在编制和调试结构化程序时不断总结和完善,力求找出最简便、最直观的方法。

总之,结构化程序设计方法在实际应用中有许多技巧可以合理运用,这需要我们对算法和数据结构展开深入分析,寻找最佳结合点,有的放矢,对症下药;更需要在实践中不断总结和积累。在编写过程中我们觉得有些程序没什么问题,但是一上机调试,就出现这样或那样的问题,这说明程序还不完善,还需要调整或改进。当今,高效率和快节凑的生活与工作方式对程序的设计提出了更高的要求和更苛刻的标准,我们只有不断创新设计理念和方法,才能编制出更多高质量、高性能、低故障的优质程序。

参考文献:

[1]林锐等编著.高质量程序设计指南[M].北京:电子工业出版社,2002.

[2]欧立奇等编著.程序员面试宝典型[M].北京:机械工业出版社,2008.

(作者单位:广东省中山市技师学院)

上一篇:在机械制造工艺基础课中进行直观―启发式教学 下一篇:对职工教育培训有效模式特征与途径的思考