对于算法的描述有很多方法,如自然语言、流程图、计算机语言和伪代码等,其中使用最广泛的是流程图。流程图主要有传统的流程图和N-S流程图。 1.传统的流程图 传统的流程图采用特定符号描述算法,常用的符号及其功能如下:
传统流程图的特点是算法描述灵活自由,形象直观。但是由于它允许使用流程线任意转移,这在程序设计时留下隐患。如果在程序中允许流程毫无限制地任意转移,就会使程序如同一团乱麻,难以阅读和维护。于是有人提出了结构化程序设计的思想,主张限制这种无规律的任意转向,而用3种基本结构作为构成程序的基本单位。这样就限制了流程线的使用。也就是说,结构化程序可以不采用带流程线的传统流程图来描述算法,而用N-S流程图来描述。
2.N-S流程图
N-S流程图是一种新的流程图形式,在这种流程图中,完全去掉了带箭头的流程线,全部算法写在一个矩形框内,在该矩形框内还可以包含其它的从属于它的框。N-S流程图很适于表示结构化程序算法。
与结构化程序设计思想相对应,N-S流程图中有3种最基本的结构,它们分别是:顺序结构、分支结构和循环结构,如下图所示:
(1)顺序结构
它表示A和B两个框组成一个简单的顺序结构,在执行完A框操作之后,顺序执行B框操作。
(2)分支结构
它表示当条件成立时执行A框操作,条件不成立时执行B框操作。
(3)循环结构
循环结构有两种情况,一种是当型循环情况,它表示当型条件成立时重复执行A框操作,条件不成立时结束循环;还有一种是直到型循环结构,它表示重复执行A框操作,直到条件成立为止。
N-S流程图的每个基本结构都是一个矩形框,在一个基本结构中可以嵌套另一个基本结构,整个算法可以像堆积木一样堆成,三种基本结构组成的算法能够解决任何复杂问题。
N-S流程图保留了传统流程图形象直观地表示算法的优点,但去掉了容易导致非结构化的流程线。使用N-S流程图设计算法可以使自己养成结构化程序设计的良好风格,但N-S流程图的修改不大方便。
算法是解决某一问题的方法和步骤。程序实际上就是用计算机语言描述的算法。程序设计时应认真分析问题,找出合适的算法和数据结构。解决同一问题的算法可能有很多,但它们的效率却可能相差很多,选择合适的算法可能会大大降低程序设计的复杂程序,提高程序的运行效率和存储效率。 计算机所能执行的算法必需具备以下几个特性: (1)有穷性 算法是一个有穷的计算机操作的序列,即计算机可以按照算法的规定从一个惟一的初始动作开始,经过执行有限次数的操作后终止。 (2)可行性 算法中规定的每个操作都是计算机可以执行的基本操作。 (3)确定性 算法中的每个操作应执行何种动作必须是确定的(即无二义性)且每个操作都只有一个后继操作。对于一组给定的数据,同一个算法对应的程序在计算机上的执行过程是可以再现的,执行结果也是确定的。 (4)输入 一个算法可以有0个或多个输入,即算法中要用到的一组初始数据,可以在算法中确定,也可以在程序运行时由用户通过输入设备(如键盘)输入到计算机中。 (5)输出 一个算法必须产生一个或多个输出,即程序在运行时将产生一组与输入的初始数据相对应的输出数据。一个没有输出的算法是没有任何意义的。
计算机所能执行的算法必需具备以下两个要素:
(1)操作 即构成算法的操作取自哪个操作集。计算机操作主要包括:算术运算、关系运算、逻辑运算、函数运算、位运算及I/O操作等。由于不同的计算机语言对应的操作集略有不同,所以在设计算法前,应先确定编程语言。 (2)控制结构 即如何控制算法中的各操作的执行顺序。通常情况下,各操作是按照书写的顺序执行的,若要改变这种执行顺序可以通过流程控制语句来实现。不同的计算机语言中的流程控制语句也有所不同。
|