您的位置:首页 > 其它

文章标题

2017-11-26 22:34 239 查看

“自顶向下,逐步求精”的程序设计技术

程序设计初学者常常受困于不会想问题:“不知道让计算机解决这个问题该如何做”。

其实,程序员的一个基本功是,能够将复杂的问题分解开来。而”自顶向下,逐步求精“的程序设计技术便是如此基本功的正式版本。其核心思想是:

对于一个要解决的问题,在寻找其算法的过程中(若想让计算机解题必须用清晰而无两义性的方式给它提供算法),

1.首先从问题的整体,即最顶层出发,将它分解成独立而不交叉的若干个子问题。每个问题解决整体的一部分,若子问题都能解决,则整体问题便解决了。

2.若子问题还不能解决,则分别把子问题看作整体,继续分解并求精,若还不能解决,继续直到子问题能简单的解决。

(这样的过程便如同要搬运一堆东西,一个人搬不了,俩个人还是不能,三个人勉强可以,而四个更轻松……把如此大的任务分解到每个人身上,任务便能解决)

上述的求精过程中的每一步,主要用到如下四种求精技术:

1.顺序连接的求精;

2.分支,选择的求精

3.循环的求精

4.递归的求精(一般可用循环代替)

当问题的子解具有前后关系时,采用第一种求精技术,将整体分为顺序执行的子问题;

当子问题是不同情况的处理时,采用第二种求精技术,构造分支(条件要准确);

当问题的子解具有层层递进的特征时,采用第三种求精技术,注意循环条件,初始值和结束值;

当问题的某步解法与前边的某步解法只是某些参数不同时,采用第四种,注意参数的变化规律以及递归出口。

下图是一个模板:


接着谈谈该技术的优点:

1.程序的层次分明,结构清晰。

2.便于集体开发程序——对于大型程序来讲,可以每组负责一个子问题,在一个组内组员又可以负责更小的子问题。

3.便于调试。若程序有错误,可以比较容易的将错误局部于某一子问题,找出错误;同时每一部分的错误是独立的,也不至于影响其他的部分。

常见的求精过程表示:

1.流程图:把每一步用流程图表示。优点是直观,;缺点是不能体现结构化程序设计思想。

2.函数方法:用函数表示每个子问题。优点是程序层次分明,能体现结构化程序设计思想。缺点是逻辑结构和算法不直观。

3.PAD方法:用二维树形结构图描述程序的逻辑,直观,清楚。具有前面俩种的优点,但摒弃了俩者的缺点。

最后举一个例子:

求1+2+3+…+100

  解题思路为:

设:和用sum表示,循环100次,第i次循环将i累加到sum

sum初值为0;

i初始为1,每循环一次增加1,直到100

  下面是解决这个问题的算法的不同描述形式:

  






  接着是程序:

include 《iostream>

using namespace std;

int main( )

{

int i=1,sum=0;

while (i<=100)

{ sum=sum+i;

i++;

}

cout<<”sum=”<
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: