- C/C++常用算法手册(第3版)
- 刘亚东 曲心慧编著
- 1121字
- 2021-03-23 12:52:07
1.6 伪代码与算法程序的对应
使用伪代码来描述算法的最大优势就是简洁易懂、书写方便,也容易向C、C++语言过渡。传统的流程图和N-S图虽然也具有直观易懂的特点,但是画起来比较费事。在设计一个算法时,可能要反复修改,而修改流程图或者N-S图是比较麻烦的。相比较而言,伪代码是最简单和便于在算法设计之初反复修改的。
虽然伪代码并无固定的、严格的语法规则,但是为了便于书写和阅读,仍然建议按照一定的规则来编写。这样便于清晰地实现从伪代码到C、C++算法的转换。下面将介绍一些基本的伪代码书写规范及其与C、C++算法的对应关系。
1.6.1 基本对应规则
伪代码与C、C++代码之间具有一些基本的对应规则,主要体现在如下几点:
(1)在伪代码中,每一条指令占一行,指令后不跟任何符号。而对应的C、C++代码则同样是每一条指令占一行,不过语句要以分号结尾。
(2)在伪代码中,可以使用△来表示注释。而对应的C、C++代码则需要使用“//”或者“”来表示注释。
(3)在伪代码中,为了简单方便,变量名和保留字可以不区分大小写。而对应的C、C++代码则是区分大小写的。
(4)在伪代码中,变量不需要声明就可以直接使用。而对应的C、C++代码则必须在合适的位置将变量进行声明和初始化之后才可以使用。
(5)赋值语句用符号“←”表示,x←exp表示将exp的值赋给x,其中x是一个变量,exp是一个与x同类型的变量或表达式,多重赋值i←j←e是将表达式e的值赋给变量i和j,这种表示与j←e和i←e等价。例如:

而对应的C、C++代码则需要使用“=”来表示,例如伪代码语句转换为C、C++代码为:

(6)在伪代码中,通常用连续的数字或字母来表示同一级模块中的连续语句,有时也可省略标号。例如:

而对应的C、C++代码则无须用数字或字母来表示。
1.6.2 分支结构
为了描述if-then-else的分支结构,伪代码需要在书写上采用“缩进”来表示。“缩进”的基本原则如下:
同一模块的语句有相同的缩进量。
次一级模块的语句相对与其父级模块的语句缩进。
典型的分支结构伪代码示例如下:

而相对应的C、C++代码用花括号“{”和“}”的嵌套来表示分支结构,上述伪代码对应的C、C++代码可以写为如下形式:

1.6.3 循环结构
使用伪代码描述循环语句时,同样一般使用“缩进”来表示。例如:

而相对应的C、C++代码则使用花括号“{”和“}”的嵌套来表示。例如,上述伪代码转换为C、C++代码如下:

1.6.4 数组及函数
在伪代码中,数组元素的存取采用数组名后跟“[下标]”表示。例如A[j]指示数组A的第j个元素。符号“…”用来指示数组中值的范围。例如,A[1…j]表示含元素A[1]、A[2]、…、A[j]的子数组。
函数值利用“return(函数返回值)”语句返回,调用方法与Pascal类似;过程用“call过程名”语句来调用。例如:

而对应的C、C++代码中,函数也是使用return来表示返回值,过程则不需要用call来表示。