就程序的内容而言,一个程序应该包括以下两方面信息:
(1) 对数据的描述。在程序中要指定用到哪些数据以及这些数据的类型和数据的组织形式。这就是数据结构(data structure)。
(2) 对操作的描述。即要求计算机进行操作的步骤,也就是算法(algorithm)。
数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。作为程序设计人员,必须认真考虑和设计数据结构和操作步骤(即算法)。著名计算机科学家沃斯(Nikiklaus Wirth)提出一个公式:算法+数据结构=程序 直到今天,这个公式对于过程化程序依然是适用的。
实际上,一个过程化的程序除了以上两个主要要素之外,还应当采用结构化程序设计方法进行程序设计,并且用某一种计算机语言表示。因此,算法、数据结构、程序设计方法和语言工具4个方面是一个程序设计人员所应具备的知识。
什么是算法
广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。例如,描述太极拳动作的图解,就是“太极拳的算法”。在C语言的学习中主要关注的是计算机算法,即计算机能执行的算法。
计算机算法可分为两大类别:数值运算算法和非数值运算算法。数值运算的目的是求数值解,例如求方程的根、求一个函数的定积分等,都属于数值运算范围。非数值运算包括的面十分广泛,最常见的是用于事务管理领域,例如对一批职工按姓名排序、图书检索、人事管理和行车调度管理等。目前,计算机在非数值运算方面的应用远远超过了在数值运算方面的应用。
算法的特性
一个有效的算法应该具有以下特点:
- 有穷性。一个算法应该包括有限的操作步骤,而不能是无限的。
- 确定性。算法中的每一个步骤都应该是确定的,而不应当是含糊的、模棱两可的。
- 有零个或多个输入。所谓输入是指在执行算法时需要从外界取得必要的信息。
- 有一个或多个输出。算法的目的就是为了求解,“解”就是输出。
- 有效性。算法中的每一个步骤都应当能有效地执行,并得到确定的结果。