C语言程序设计实践
上QQ阅读APP看书,第一时间看更新

2.1 问题分析

一般来说,问题分析首先是要对接受的任务进行认真的分析,研究所给定的条件,分析最后应达到的目标,找出解决问题的规律,选择解题方法的过程,也就是通常所讲的“看懂题目”。与大规模软件的严格的需求分析过程类似,小规模程序设计的问题分析过程可以从以下几方面考虑。

1.了解问题的有关专业基本知识

和程序阅读类似,问题分析的第一步,也是要对问题的有关专业基本知识有一定了解。例如程序设计中经常会碰到数学问题中的“水仙花数”问题,如果对于水仙花数的概念没有一定的了解,想解决这个问题是不太现实的。

2.分析问题的输入和输出数据

问题的输入和输出数据主要涉及后面设计时数据的存储结构和处理算法。在C语言中,通过分析问题的输入数据确定需要采用的数据类型和存储结构,进而确定输入的格式和处理过程。其次,通过对输入数据的数据规模分析,可以预估问题的时间复杂度和空间复杂度,进而选择不同的算法。

3.分析问题的处理过程

对于一般的算法问题,对处理过程的分析其实也是对算法的分析和选择过程。而对于一般的数据处理问题,对处理过程的分析主要是系统功能的确定和划分过程,也可以借助数据流图等工具辅助分析。

【例2-1】 累加求和问题分析举例。

输入一个数字n(0≤n≤10000000),请输出1+2+3+…+(n-1)+n的值。

问题分析过程:

(1)简单来看,本问题就是输入一个数字,循环累加后求出结果。

(2)从数据的输入和输出角度分析,输入的数据的存储可以考虑使用整型(int),但从数据输出角度看,运算的中间结果使用长整型(long)也可能会溢出,需考虑使用64位整数(long long)。

(3)从输入数据的规模和基本处理过程来看,如果单纯地使用循环可能运行时间较长,如果有运行的时间限制则最后实现的算法可以考虑使用累加公式n(n+1)/2。