自顶向下,逐步求精------一条编程的捷径
2017-11-28 22:08
232 查看
引言
第一次听到这个思想时,我觉得这和那些形而上的指导方针是一个套路,就是说来听听,没有任何实际的应用价值。事实似乎也验证了我的这个猜想,在开始学习码代码的前两个月,我从来没有应用过这个思想,然而这也没有给我造成什么困扰。究其原因,大概就是题目简单,代码不长。终于,在前两天我完成了一个200行的程序,才第一次感受到了这个思想的重要性。200行的代码,如果不通过“自顶向下,逐步求精”,将问题具体化,那么找bug,修改参数将是一件痛苦得不能再痛苦的事情。至此,才终于后悔“不听老人言”,没有在一开始就养成这个好习惯。
自顶向下,逐步求精
那么,什么叫自顶向下逐步求精呢?简单来说,就是将问题分化,将大的问题分成小的问题,将每一个要实现的操作转变为一个函数,然后再在函数中继续这个过程。
图片来自网络
这样的编程思路,有助于我们修正代码,检查中间量,同时也有助于将问题分工,实现合作。下面我就通过一个具体的例子来解释一下。
举个例子
比如现在我们想要解决这样一个问题:将用户输入的10进制数转化为16进制数。(为了更好地体现这个思想,这里选择的方法可能较为复杂,请读者不要在意这些细节,体会思想就好)首先我们敲出main函数,即这个程序的主体。
int main() { int number1; char number[10]; scanf("%d", &number1); if (number1 >= 0) { translate(number1, 0, number); } else { number[0] = '-'; number1 = -number1; translate(number1, 1, number); } print(number); system("pause"); }
这里我们调用了两个函数,分别是translate—具体的转换函数,以及print—打印字符组的函数。下面我们分别敲出这两个函数。
void translate(int n, int i, char text[]) { int j; int y = len(n); for (j = 0; j < y; j++) { int x = n % 16; n = n / 16; if (x < 10) text[i + y - j - 1] = '0' + x; else text[i + y - j - 1] = 'A' + x - 10; //printf("%c ",text[i + j]); } text[i + y ] = '\0'; } void print(char text[]) { for (int i = 0; ; i++) { if (text[i] == '\0') break; printf("%c", text[i]); } }
在实现translate函数时,我们又用到了这个一个10进制的数在16进制下的位数。遇到这样一个问题时不急,我们先搁置,继续完成为剩下的部分。然后再转过头来实现这个新的函数len。
int len(int n) { if (n == 0) return 1; int count = 0; while (n != 0) { n = n / 16; count++; } return count; }
至此,这道题终于完成了,代码具有很高的可读性,而且我们完成题目的过程中思路也很清晰,不至于出现码着码着忘了自己要干嘛的情况。这就是“自顶向下,逐步求精”的代码思路了。怎么样,您学会了吗?
相关文章推荐
- 自顶向下 逐步求精编程方法
- 自顶向下,逐步求精的编程方法
- “自顶向下,逐步求精”---编程思想方法介绍
- 【编程思想】自顶向下 逐步求精
- UVA 489 Hangman Judge 自顶向下逐步求精
- 自顶向下,逐步求精
- 自顶向下,逐步求精
- 自顶向下,逐步求精的程序设计方法
- 自顶向下,逐步求精
- 自顶向下,逐步求精
- 自顶向下,逐步求精 方法简介
- “自顶向下,逐步求精”——面向程序设计
- “自顶向下,逐步求精”的概念和应用
- 自顶向下,逐步求精
- 自顶向下,逐步求精
- “自顶向下, 逐步求精”的程序设计方法。
- “自顶向下,逐步求精”——Top-down Design
- 自顶向下,逐步求精
- 模块化程序设计之自顶向下、逐步求精
- 自顶向下逐步求精