</p> 算法是一个有穷规则的集合,这些规则确定了解决某类问题的一个运算序列。对于该类问题的任何初始输入值,它都能机械地一步一步地执行计算,经过有限步骤后终止计算并产生输出结果。归纳起来,算法具有以下基本特征:
" c9 t, X" M: }6 |) Q6 g (1) 有穷性:一个算法必须在执行有限个操作步骤后终止; 9 J( q& h0 ~5 i @
(2) 确定性:算法中每一步的含义必须是确切的,不可出现任何二义性;
5 m9 T- b; l5 |3 K) Y2 ?3 L (3) 有效性:算法中的每一步操作都应该能有效执行,一个不可执行的操作是无效的。例如,一个数被0除的操作就是无效的,应当避免这种操作。 3 }# r' R) v9 ?
(4) 有零个或多个输入:这里的输入是指在算法开始之前所需要的初始数据。这些输入的多少取决于特定的问题。有些非凡算法也可以没有输入。 , Y5 I- d5 N, g& G1 k# m* Q
(5) 有一个或多个输出:所谓输出是指与输入有某种特定关系的量,在一个完整的算法中至少会有一个输出。
6 [+ n/ u+ S, i0 w2 ? 算法可以用任何形式的语言和符号来描述,通常有自然语言、程序语言、流程图、N-S图、PAD图、伪代码等。所有的程序是直接用程序设计语言表示算法。流程图、N-S图和PAD图是表示算法的图形工具,其中,流程图是最早提出的用图形表示算法的工具,所以也称为传统流程图。它具有直观性强、便于阅读等特点,具有程序无法取代的作用。N-S图和PAD图符合结构化程序设计要求,是软件工程中强调使用的图形工具。 2 @+ k' C6 ]. o+ P+ l9 M
(3) 编制程序。
0 _/ ]2 Q- z- P$ \! u 4) 调试程序。 , ^# I9 n/ B* O: y# R. P& S
语言、程序和程序设计;算法、算法设计和算法的表示;程序结构、结构化程序和程序风格。 0 }# @* f# M% W
语言是交流的工具,程序是指令的集合,而程序设计就是用计算机语言对所要解决的问题进行完整而准确的描述过程。一个完整的程序应该涉及到以下四个方面的问题:
+ D# R D L- R% A) _ 数据结构、算法、编程语言、程序设计方法 " ~8 b' [7 u5 `0 M
程序设计过程的五个步骤是:①分析问题,建立数学模型;②确定数据结构和算法;③编制程序;④测试程序。其中第①、②步就是确定解决问题的方案;第③步是用程序语言把这个解决方案严格的描述出来;第④步是在计算机上测试这个程序。在这里,工作过程的第①、②步与其他领域里解决问题的方法相类似,只是考虑问题的基础不同、出发点不同。在程序设计领域里,我们需要从计算的观点、程序的观点出发,由此引出了数据结构、算法设计以及算法的表示等新问题。这是本章的重点,也是程序设计的基础。第③、④步是程序设计工作的非凡问题。由于程序设计具有严格规定的组成结构,各种结构有明确定义的功能和形式,要把问题解决方案转变为符合这些结构的形式,这也不是轻而易举的,需要把握相关的技术和方法。由此引出了程序的三种基本结构、流程图、N-S图和结构化程序设计等方法和技术。这些都是程序设计的基本知识,每一个程序设计工作者都必须把握。 3 N; W8 h3 }) p1 b( y, v; h2 l3 z
会用一些常用算法(例如迭代法、枚举法、递归法等)解决实际问题,对于初学者来说,是至关重要的。许多初学者往往是把要解决的问题首先和程序设计语言中的语句联系在一起,影响了程序设计质量。设计算法和编写程序要分开考虑,当你还没有学习程序语言时,就学会针对一些简单问题设计算法,这是学习程序设计入门的好方法。
9 z; r2 q( T: ~9 v* p8 D 程序的结构化技术是程序设计的基本技术,它使得程序在逻辑上层次分明、结构清楚、易读、易维护,从而提高程序质量和开发效率。采用结构化程序设计方法,并且用流程图表示算法是必须的。将算法转换成程序代码,并注重程序风格,这都是编写代码时要注重的问题。 |