程序设计与问题求解:C语言
上QQ阅读APP看书,第一时间看更新

1.2.2 算法表示方法

算法在描述上一般使用半形式化的语言,而程序是用形式化的计算机语言描述的;算法对问题求解过程的描述可以比对程序的描述略粗,算法经过细化以后可以得到计算机程序。一个计算机程序是一个算法的计算机语言表述,而执行一个程序就是执行一个用计算机语言表述的算法。在算法的表示上,常采用以下几种方式。

1. 用自然语言表示

这种方法易懂但不直观,因此除了很简单的问题外,一般不用这种方法描述。

2. 用流程图表示

如图1.1所示,这种方法采用不同的图元形状来表示“程序开始/结束”“输入/输出”“程序处理”“选择判断”“程序连接”“流程线”“注释”等程序描述要素。这种方法灵活、自由、形象、直观,可表示任何算法,但由于使用有向线来表示流程走向,因此流程图有较大的随意性。对流程图,读者要熟练掌握,会看会画。

图1.1 常用的流程图符号及其含义

常用的流程图制作软件有以下几款。

① Visio属于Office系列应用软件,功能全面,推荐使用。

② Raptor是一种基于流程图的可视化程序设计环境,推荐有一定编程基础的读者使用。

③ Word可以做基本的流程图,最容易上手。

例1.1 用流程图表示求解5!的算法。

问题分析与程序思路:

如图1.2所示,求解5!本质上是两个数的乘法问题。因此,需要设计一个变量t保存初值1,另一个变量i既可作为操作数递增变量,同时也可作为循环控制变量使用。变量it每做一次乘法运算后,变量i便以步长为1进行递增,继续循环计算it的乘法,直至i增长超过5后运算结束。算法所体现的思维方式就是通过将从1~5这5个数的连乘运算分解为两个数的循环乘法运算,实现了将复杂问题分解为多个具有相同运算结构的简单问题。

图1.2 用流程图表示求解5!算法

3. 用N-S流程图(盒图)表示

如图1.3所示,这种方法完全去掉了带箭头的流程线,算法的所有处理步骤都写在一个大的矩形框内,表示方法简单,符合结构化思想。因此,N-S流程图比传统流程图更为简洁。对N-S流程图,读者要熟练掌握。

图1.3 N-S流程图符号及画法

使用图1.3所示的顺序结构、选择结构和循环结构这3种基本框,可以组成复杂的N-S流程图。图1.3中的A框或B框可以是一个简单的操作,也可以是3个基本结构之一。

优点:

① N-S图强制设计人员按结构化程序(Structured Programming,SP)设计方法进行思考并描述其设计方案。因为除了表示几种标准结构的符号外,它不再提供其他描述手段,这样就有效地保证了设计的质量,从而也保证了程序的质量。

② N-S图形象、直观,具有良好的可见度。例如循环的范围、条件语句的范围都是一目了然的,所以容易理解设计意图,为编程、复查、选择测试用例、维护都带来了方便。

③ N-S图简单、易学易用,可用于软件教育和其他方面。

缺点:

主要是手工修改比较麻烦,这是有些人不用它的主要原因。

对于例1.1,若使用N-S流程图来表示算法,如图1.4所示。

图1.4 用N-S流程图表示求解5!算法

4. 用伪代码表示

伪代码用介于自然语言和计算机语言之间的文字及符号来描述算法。它如同一篇文章一样,自上而下地写下来,每一行(或几行)表示一个基本操作。它不用图形符号,因此书写方便、格式紧凑,也比较好懂和便于向计算机语言算法(即程序)过渡。这种方法适用于设计过程中需要反复修改时的流程描述。软件专业人员一般习惯使用伪代码,读者要掌握该方法。

例1.2 用伪代码表示“打印x的绝对值”的算法。

第一种表示方法:使用英文书写伪代码。

if x is positive then
    print x
else
    print -x

第二种表示方法:使用汉字书写伪代码。

若x 为正
     输出 x
否则
     输出 -x

第三种表示方法:可以混合使用中英文书写伪代码。

if x 为正
    print x
else
    print -x

若使用伪代码表示例1.1中求解5!算法,则采用以下两种方式都可以。