![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=1739672159-HfdROd1GZaxkMVXiwzFwUJEiahd9JRAP-0-a7d75af188da28520cb04eed540f8054)
而对应的C、C++代码则需要使用“=”来表示,例如伪代码语句转换为C、C++代码为:
![](https://epubservercos.yuewen.com/A2B1C3/14615857704551406/epubprivate/OEBPS/Images/img00029002.jpg?sign=1739672159-uqoWFq0YuvKhkRCbw1QrUlCta8ycRrkE-0-6e4e2b66064c9fc9d14c787b884bdaf3)
(6)在伪代码中,通常用连续的数字或字母来表示同一级模块中的连续语句,有时也可省略标号。例如:
![](https://epubservercos.yuewen.com/A2B1C3/14615857704551406/epubprivate/OEBPS/Images/img00029003.jpg?sign=1739672159-qJy3uSuW2J9npXV8I5XfHObDPh1JfVxX-0-98a32f8fcb0361f54175a45da02f5523)
而对应的C、C++代码则无须用数字或字母来表示。
1.6.2 分支结构
为了描述if-then-else的分支结构,伪代码需要在书写上采用“缩进”来表示。“缩进”的基本原则如下:
同一模块的语句有相同的缩进量。
次一级模块的语句相对与其父级模块的语句缩进。
典型的分支结构伪代码示例如下:
![](https://epubservercos.yuewen.com/A2B1C3/14615857704551406/epubprivate/OEBPS/Images/img00029004.jpg?sign=1739672159-hrYTGhv5rC9PfVXgfn6Nc8sgxv2BeeE9-0-170572431ab857d7e3c5c15803f2f2c9)
而相对应的C、C++代码用花括号“{”和“}”的嵌套来表示分支结构,上述伪代码对应的C、C++代码可以写为如下形式:
![](https://epubservercos.yuewen.com/A2B1C3/14615857704551406/epubprivate/OEBPS/Images/img00029005.jpg?sign=1739672159-YFgOKYe9dcffdk2kJbdyCfreveXUvykH-0-ba7ff1d815a71d524eb04093bf9c559a)
1.6.3 循环结构
使用伪代码描述循环语句时,同样一般使用“缩进”来表示。例如:
![](https://epubservercos.yuewen.com/A2B1C3/14615857704551406/epubprivate/OEBPS/Images/img00030001.jpg?sign=1739672159-LPZVMCALNWOXAUTDJyCYlDWuzt8b30g0-0-37cddecba6732ff3c940ab2853104d16)
而相对应的C、C++代码则使用花括号“{”和“}”的嵌套来表示。例如,上述伪代码转换为C、C++代码如下:
![](https://epubservercos.yuewen.com/A2B1C3/14615857704551406/epubprivate/OEBPS/Images/img00030002.jpg?sign=1739672159-eAp6HGYdYSljgVQQFZRQqtF1PdO6wbKS-0-69210cfd7196d6b668290f3ad2af3115)
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=1739672159-eUrXu29z8WxGGL0gubQKHuw7TlT7vLi1-0-039cd7f5d61c9c9f3f1cf6eb640aa9ce)
而对应的C、C++代码中,函数也是使用return来表示返回值,过程则不需要用call来表示。