1.2.2 程序设计
设计程序通常是一个困难的任务。没有一套完整的规则,也没有算法告诉你怎样写程序。程序设计是创新过程。但是,仍有一个过程纲要可循。图1.7展示了这个纲要。如图所示,整个程序设计过程可划分为两阶段,即问题求解阶段和实现阶段。问题求解阶段的结果是用于解决当前问题的算法,通常用中文或英文描述。为了用C++(www.cppentry.com)等编程(www.cppentry.com)语言生成程序,算法需要翻译为编程(www.cppentry.com)语言。根据算法生成最终程序就是实现阶段的任务。
|
| 图1.7 程序设计过程 |
第一步是确定任务(想让程序做的事情)得到了完整、准确的定义。不要轻视这个步骤的重要性。如果自己都不确定程序应该产生什么输出,看到真正的输出时,可能会大吃一惊。一定要确定程序应该获得什么输入,而且要知道提供了特定输入之后,程序的输出结果以及输出结果的格式。例如,对于一个银行会计程序,不仅要知道利率,还要知道利率是否需要每年、每月或者每日进行复利计算。对于一个自动写诗程序,需要确定输出的是自由体、抑扬格还是其他诗体。
许多涉足编程(www.cppentry.com)领域的新手都不理解为什么要先设计好算法,再用编程(www.cppentry.com)语言(比如C++(www.cppentry.com))写真正的程序。他们可能完全省略"问题求解阶段",或者只做其中的"问题定义"部分。这表面上是合理的。为什么不能"直奔目标",节省一些时间呢?答案很简单:"这根本节省不了时间!"经验证明,将程序设计过程分为两阶段,能更快地生成一个能正确工作的程序。两阶段的程序设计过程简化了算法设计,因为在进行算法设计时,不需要关心编程(www.cppentry.com)语言(比如C++(www.cppentry.com))的详细规则。结果是算法设计过程的复杂程度大大降低,出错几率也大幅降低。即使很小的程序,这样做也有好处。你是希望进行半天有条不紊的工作,就设计出一个完善的程序?还是想进行几天令人抓狂的工作,对一个不好理解的程序进行排错呢?
实现阶段并不轻松。一些细节需要关注,其中一些可能很容易被忽略。但是,相较于许多人最初的想象,这个步骤还是要简单得多。一旦熟悉了C++(www.cppentry.com)或者其他任何编程(www.cppentry.com)语言,将算法从自然语言(比如中文)翻译成编程(www.cppentry.com)语言,就像例行公事那样简单。
如图1.7所示,两个阶段都需要测试。写程序前要测试算法,如果发现算法存在不足,必须重新设计算法。对于一个不大的程序,为了进行桌面测试,只需在心里面跟着算法走几遍,自己执行算法的各个步骤。如果算法较复杂,可能需要一支笔和一张纸。为了测试C++(www.cppentry.com)程序,只需编译并运行它,并提供一些样本输入数据。编译器会为一些特定类型的错误给出准确的错误消息。但对于其他类型的错误,则必须对输出进行检查,自己验算是否出错。
图1.7展示的是理想情况下的程序设计过程。应该记住这个基本流程,但在实际应用中,设计过程也许要复杂一些。实际编程(www.cppentry.com)时,错误和缺陷会不定期显现出来,而你可能必须退回去,重做以前的步骤。例如,通过测试算法,你可能发现问题定义还不完善。在这种情况下,就必须退回去,重新定义问题。另一些时候,问题定义或算法中的缺陷要等到测试程序时才会显现。在这种情况下,就必须回头修改问题定义或算法,然后重新执行它们之后的所有步骤。