![C/C++常用算法手册(第3版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/78/26179078/b_26179078.jpg)
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等价。例如:
![](https://epubservercos.yuewen.com/A2B1C3/14615857704551406/epubprivate/OEBPS/Images/img00029001.jpg?sign=1738946748-1Wq7Xy4elWeXVz7ZM2TF2cMk8LU97jeW-0-0a254abc0d50a0efccbd73f83627c6b1)
而对应的C、C++代码则需要使用“=”来表示,例如伪代码语句转换为C、C++代码为:
![](https://epubservercos.yuewen.com/A2B1C3/14615857704551406/epubprivate/OEBPS/Images/img00029002.jpg?sign=1738946748-J7mW4w9C5Ghy6n18lnMlGUzsKIIEhieJ-0-fb9865f639b2c95a648e3b523cdf01aa)
(6)在伪代码中,通常用连续的数字或字母来表示同一级模块中的连续语句,有时也可省略标号。例如:
![](https://epubservercos.yuewen.com/A2B1C3/14615857704551406/epubprivate/OEBPS/Images/img00029003.jpg?sign=1738946748-rrZA7MN4xD9bNbUAOvYsd4xEO2Ze3UzX-0-3d3447491371c6057b7e1c2733650079)
而对应的C、C++代码则无须用数字或字母来表示。
1.6.2 分支结构
为了描述if-then-else的分支结构,伪代码需要在书写上采用“缩进”来表示。“缩进”的基本原则如下:
同一模块的语句有相同的缩进量。
次一级模块的语句相对与其父级模块的语句缩进。
典型的分支结构伪代码示例如下:
![](https://epubservercos.yuewen.com/A2B1C3/14615857704551406/epubprivate/OEBPS/Images/img00029004.jpg?sign=1738946748-71zjBxWUNkAvl7J2KxjzkcdRf4oWX4XZ-0-c3134b93d6214f3203e19554b84d63b0)
而相对应的C、C++代码用花括号“{”和“}”的嵌套来表示分支结构,上述伪代码对应的C、C++代码可以写为如下形式:
![](https://epubservercos.yuewen.com/A2B1C3/14615857704551406/epubprivate/OEBPS/Images/img00029005.jpg?sign=1738946748-TNN1io8k3SX6jgrm0CcU1xWd10JrIY6Y-0-cc3e0f1bd872f8141343dee867a5ac7d)
1.6.3 循环结构
使用伪代码描述循环语句时,同样一般使用“缩进”来表示。例如:
![](https://epubservercos.yuewen.com/A2B1C3/14615857704551406/epubprivate/OEBPS/Images/img00030001.jpg?sign=1738946748-2IEZPZRacUOou6NVCZyobIeidUPpPosv-0-4674b18688a0da421f5325d7ba479339)
而相对应的C、C++代码则使用花括号“{”和“}”的嵌套来表示。例如,上述伪代码转换为C、C++代码如下:
![](https://epubservercos.yuewen.com/A2B1C3/14615857704551406/epubprivate/OEBPS/Images/img00030002.jpg?sign=1738946748-Vo8W0fdZsMiATR4Mf05EpgGv0uVnfXpP-0-6679333cebde8f9a35e9ccc2314742bd)
1.6.4 数组及函数
在伪代码中,数组元素的存取采用数组名后跟“[下标]”表示。例如A[j]指示数组A的第j个元素。符号“…”用来指示数组中值的范围。例如,A[1…j]表示含元素A[1]、A[2]、…、A[j]的子数组。
函数值利用“return(函数返回值)”语句返回,调用方法与Pascal类似;过程用“call过程名”语句来调用。例如:
![](https://epubservercos.yuewen.com/A2B1C3/14615857704551406/epubprivate/OEBPS/Images/img00030003.jpg?sign=1738946748-OFhklTFuDL5af07GYUtDdWtI08R2cJqB-0-afdd3799a7d1602a24ac009547d8e3ae)
而对应的C、C++代码中,函数也是使用return来表示返回值,过程则不需要用call来表示。