文章标题

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

程序设计初学者常常受困于不会想问题:“不知道让计算机解决这个问题该如何做”。这里写图片描述其实,程序员的一个基本功是,能够将复杂的问题分解开来。而”自顶向下,逐步求精“的程序设计技术便是如此基本功的正式版本。其核心思想是:
对于一个要解决的问题,在寻找其算法的过程中(若想让计算机解题必须用清晰而无两义性的方式给它提供算法),
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=”<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值