一个让计算机处理问题的程序应该怎么写呢?
处理一个问题的时候我们应该把问题分解,所以我们需要把一个问题一步步分解它.
- 一个超级大问题 > 大问题 > 问题 > 小问题 > 不是问题的问题.
一个程序员学会把问题简单化是非常重要的,超大问题大问题小问题超小问题,知道用一个简单的办法解决问题.
这就是我们所说的: 自顶而下,逐步求精,采用自顶向下、逐步求精方法构造程序有如下优点:
1. 程序的层次分明、结构清晰。
2. 便于集体开发程序。对于大型程序来讲,可以每组负责一个模块(一个子部分),在一个组内又可以每个人负责一个子模块(更小的子部分)等等。而各个模块之间以及各个子模块之间相对独立,互相之间没有制约,各个模块的负责人员可以独立的进行各自的程序设计。
3. 便于调试。若程序有错误,可以很容易的将错误局部于某一子部分,找出错误,同时每一部分的错误是独立的,也不至于影响其它的部分。
- 这种自顶向下、逐步求精的思维方式不是计算机程序员独有的。事实上在日常生活、工作中也经常的使用该技术,只不过不自觉或没意识到罢了。例如写一本书、或文章,总要作一个提纲,全书分成几章;然后对每一章又列出本章分几节;对每一节又分出几小节等等;最后再具体着手写每个小节。又如,设计生产某产品的一个工厂(比如汽车厂):首先应考虑全厂应该分成几个车间
简单的例子:
程序员不能只看到一堆星星,要用分解的思想,整理出关于图的规律来,或者说,会分层次地看这个问题。这要训练“自顶向下,逐步求精”的思维方式。
思路:首先看到的是一个图;这个图有6行;每一行有若干个星号。可喜的是,每一行星号的个数还有规律:第i行星号的个数是2*i-1个!
伪代码算法就出来了:
输出6行星星
这是我们“自顶向下,逐步求精”的第一次分解:将一个图分成了若干行;
输出6行用一个循环结构解决,循环每执行1次就输出1行,写成伪代码是:
//程序片段(1)
i = 1;
while (i <= 6){
输出第一行;
换行;
i ++;
}
- “输出第i行”的问题还需要分解下去。实际上,输出“输出第i行”就是要“重复输出2*i-1个星号”,也用一个循环结构完成。
//程序片段(2)
j=1;
While(j<=2*i-1){
输出一个*;
j=j+1;
}
- 将程序片段(1)中的“输出第i行”替换为程序片段(2),整个算法也就清晰了。
i=1;
While(i<=6){
j=1;
While(j<=2*i-1){
输出一个*;
j=j+1;
}
换行 i=i+1;
}
我们可以写出完整的算法,据此写程序也就容易了。无论用while语句,还是for语句
//用while循环的程序
#include <iostream>
using namespace std;
int main( ){
int i,j,n=6;//n可以赋别的值
i=1;
while(i<=n){
j=1;
while(j<=2*i-1){
cout<<'*';
j++;
}
cout<<endl;
i++;
}
return 0;
}
以上材料,部分来自网络.