
2.4 算法概述
2.4.1 什么是算法
1.概念
做任何事情都有一定的步骤,为解决一个问题而采取的方法和步骤即算法。计算机算法是指计算机能够执行的算法,可分为两大类,一是数值运算算法,即求解数值;二是非数值运算算法,即事务管理领域的应用。
2.简单算法举例
【例2-1】求1×2×3×4×5的积。
算法如下:
S1:使t=1
S2:使i=2
S3:使t×i,乘积仍然放在在变量t中,可表示为t×i→t。
S4:使i的值+1,即i+1→i。
S5:如果i≤5,返回重新执行步骤S3步及其后的两步;否则算法结束。
如果计算100!,则只需将步骤S5的i≤5改成i≤100即可。
该算法不仅正确,而且是较好的算法。因为计算机是高速运算的自动机器,实现循环轻而易举。
【例2-2】有50个学生,要求将他们之中成绩在80分以上者打印出来。
如果n表示学生学号,ni表示第i个学生学号,g表示学生成绩,gi表示第i个学生的成绩,则算法可表示如下:
S1:1→i。
S2:如果gi≥80,则打印ni和gi;否则不打印。
S3:i+1→i。
S4:若i≤50,返回S2;否则结束。
2.4.2 算法的性质
算法的性质如下。
(1)有穷性:一个算法应包含有限的操作步骤,而不能是无限的。
(2)确定性:每一个步骤应当是确定的,而不应当是模棱两可的。
(3)输入:有0个或多个输入。
(4)输出:有1个或多个输出。
(5)有效性:每一个步骤应当能有效地执行,并得到确定的结果。
程序开发人员必须会设计算法,并根据算法写出程序。
2.4.3 算法的描述
1.用流程图描述算法
流程图描述算法直观形象,易于理解,流程图的常用图标如图2-6所示。
一个流程图包括表示相应操作的框、带箭头的流程线和框内外必要的文字说明。

图2-6 流程图的常用图标
【例2-3】将【例2-1】求5!的算法用流程图表示。
如图2-7所示。

图2-7 求5!的算法流程图
【例2-4】将【例2-2】的算法用流程图表示。
如图2-8所示。

图2-8 【例2-2】的算法流程图
2.3种基本结构的流程图
(1)顺序结构。
顺序结构的流程图如图2-9所示。

图2-9 顺序结构的流程图
(2)选择结构。
选择结构的流程图如图2-10所示。

图2-10 选择结构的流程图
(3)循环结构。
循环结构的流程图如图2-11所示。

图2-11 循环结构的流程图
3种基本结构的共同特点是只有一个入口和一个出口,结构内的每一部分都有机会被执行,并且不存在死循环。
3.用N-S流程图描述算法
1973年美国学者提出了一种新型流程图,即N-S流程图。
顺序结构的N-S流程图如图2-12所示。

图2-12 顺序结构的N-S流程图
选择结构的N-S流程图如图2-13所示。

图2-13 选择结构的N-S流程图
循环结构的N-S流程图如图2-14所示。

图2-14 循环结构的N-S流程图
4.用伪代码描述算法
伪代码是指不能够直接编译运行的程序代码,它是用介于自然语言和计算机语言之间的文字和符号来描述算法及进行语法结构讲解的一个工具。表面上它很像高级语言的代码,但又不像高级语言那样要接受严格的语法检查。它比真正的程序代码更简明,更贴近自然语言。它不用图形符号,因此书写方便,格式紧凑且易于理解,便于向计算机程序设计语言算法程序过渡。用伪代码书写算法时,既可以采用英文字母或单词,也可以采用汉字,以便于书写和阅读。它没有固定且严格的语法规则,只要把意思表达清楚即可。用伪代码描述算法时自上而下地往下写,每一行(或每几行)表示一个基本操作。伪代码采用缩进格式来表示3种基本结构,一个模块的开始语句和结束语句都靠左边界书写。模块内的语句向内部缩进一段距离,选择结构和循环结构内的语句再向内缩进一段距离。这样算法书写格式一致,富有层次且清晰易读,能直观地区别出控制结构的开始和结束。
5.用计算机语言表示算法
我们的任务是用计算机解题就是用计算机实现算法,用计算机语言表示算法必须严格遵循所用语言的语法规则。
【例2-5】求1×2×3×4×5的积,用C语言表示。
