第二章 程序的灵魂-算法
一个程序应包括对数据的描述和对数据处理的描述。
对数据处理的描述,即计算机算法,算法是为解决一个问题而采取的方法和步骤,是程序的灵魂。
程序=算法+数据结构+程序设计方法+语言工具和环境
2.1 算法的概念
算法是解决一个具体问题的意义明确的步骤的集合。概括地说,算法是指解题方案的准确而完整的描述。从程序来说,也可以说算法是一个有限条指令的集合,这些指令确定了解决某一特定类型问题的运算序列。
对于同一个问题可以有不同的解题方法和步骤,也就是有不同的算法。算法有优劣,一般而言,应当选择简单的、运算步骤少的,既运算快、内存开销小的算法(算法的时空效率)。
2.2 算法的特性
1.有穷性
一个算法应当包含有限的步骤,而不能是无限的步骤;同时一个算法应当在执行一定数量的步骤后,算法结束,不能死循环。
2.确定性
算法中的每一个步骤都应当是确定的,而 不是含糊的、摸棱两可的。也就是说不应产生歧义。
3.有0个或多个输入
所谓输入是指算法执行时从外界获取必要信息。
4.有1个或多个输出
算法必须有结果,没有结果的算法没有意义。
5.有效性
算法的每个步骤都应当能有效执行,并能得到确定的结果。
2.3 算法的描述
为了表示一个算法,可以用不同的方法。常用的算法表示方法:自然语言,传统流程图,结构化流程图(N-S流程图),伪代码、计算机语言等。
流程图:用一些约定的几何图形来描述算法。用某种图框表示某种操作,用箭头表示算法流程
流程图(的符号及意义)美国标准化协会ANSI规定了一些常用的流程图符号:
例如,求5!
三种基本结构
1.顺序结构:按指令的顺序依次执行
2.判断选择结构:根据判别条件有选择地改变执行流程
3.循环结构:有条件的重复地执行某个程序块
三种基本结构,有以下共同点:
l 只有一个入口:不得从结构外随意转入结构中某点。
l 只有一个出口:不得从结构内某个位置随意转出(跳出)。
l 结构中的每一部分都有机会被执行到。(没有“死语句”)
l 结构内不存在“死循环”(无终止的循环)
已经证明:由三种基本结构顺序组成的算法结构,可以解决任何复杂问题。由基本结构组成的算法属于“结构化”算法。
用N-S流程图表示算法
基本结构的顺序组合可以表示任何复杂的算法结构全部算法写在一个矩形框内,完全去掉了带箭头的流程线。这种流程图称为N-S结构化流程图(盒图)。
N-S流程图适于结构化程序设计
1.顺序结构程序设计
依次顺序执行程序语句
先执行a操作,再执行b操作
2判别选择结构程序设计
当条件成立,执行a操作,当条件不成立,执行b操作。a,b操作允许空操作,即什么都不做。注意选择结构是一个整体,代表一个基本结构。
3.循环结构程序设计
1)循环又分“当型循环”和“直到型循环”
2)当型循环:当条件p成立时,反复执行循环体中指令,直到p条件不成立为止。当型循环先判断,再决定是否执行循环体,所以在条件p一次都不满足时,循环体可能一次都不执行
直到型循环:当条件p不成立时,反复执行循环体中的指令,直到p条件成立为止。直到型循环先执行循环体,然后再判断条件p,所以循环体至少执行一次。
用伪代码表示算法
用传统流程图、N-S图表示算法,直观易懂,但绘制比较麻烦,流程图适合表示算法,但在设计算法过程中使用不是很理想。
伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。伪代码不用图形符号,书写方便,格式紧凑,便于向计算机语言算法过渡
用计算机语言表示算法
用某种程序设计语言编写的程序本质上也是问题处理方案的描述,并且是最终的描述。
程序是程序设计的最终产品,需要经过每一步的细致加工才能得到,不提倡一开始就编写程序,特别是对于大型的程序。
2.4 结构化程序设计方法
结构化程序设计强调设计风格和程序结构的规范化,提倡清晰的结构。
具体说,采用以下方法来保证得到结构化的程序:
1.自顶向下;
2.逐步细化;
3.模块化设计;
4.结构化编码。
联系客服