本文发布于 1229 天前,最后更新于 1219 天前,其中的信息可能已经有所发展或是发生改变。
伪代码(英语:pseudocode),是高层次描述算法的一种方法。
它不是一种现实存在的编程语言.
它以编程语言的书写形式指明算法的职能。相比于程序语言(例如Java、C++、C、Delphi 等等)它更类似自然语言。
它是半形式化、不标准的语言。
我们可以将整个算法运行过程的结构用接近自然语言的形式描述出来。
使用伪代码,可以帮助我们更好地表述算法,不用拘泥于具体的实现。
人们在用不同的编程语言实现同一个算法时意识到,他们做出来的实现(而非功能)很不同。程序员要理解一个用他们并不熟悉的编程语言编写的程序,可能是很困难的,因为程序语言的形式限制了程序员对程序关键部分的理解,而伪代码可以用于帮助人们理解解释代码的语法、规则、内涵和结构。
当考虑算法功能(而不是其语言实现)时,伪代码常常得到应用。
- 在伪代码中,每一条指令占一行(else if 例外),指令后不跟任何符号,而对应的C、C++代码则同样是每一条指令占一行,不过语句要以分号结尾。
- 在伪代码中,为了简单方便,变量名和保留字可以不区分大小写。而对应的C、C++代码则是区分大小写的。
- 在伪代码中,变量不需要声明就可以直接使用。而对应的C、C+代码则必须在合适的位置将变量进行声明和初始化之后才可以使用。
- “缩进”表示程序中的分支程序结构(同一模块的语句有相同的缩进量,次一级模块的语句相对与其父级模块的语句缩进);
- 通常每个算法开始时都要描述它的输入和输出,而且算法中的每一行都给编上行号,在解释算法的过程中会经常使用算法步骤中的行号来指代算法的步骤;
- 在伪代码中,可以使用△来表示注释。而对应的C、C++代码则需要使用“//”或者“/*……*/”来表示注释;
- 赋值语句用符号“←”表示,x←exp表示将exp的值赋给x,其中x是一个变量,exp是一个与x同类型的变量或表达式,多重赋值i←j←e是将表达式e的值赋给变量i和j,这种表示与j←e和i←e等价。例如:
- 每一行可以加上编号(也可不加)。
1. if 九点以前 then
2. 私人事务
3. else if 9点到18点 then
4. 工作
5. else
6. 下班
1.变量的声明
算法中出现的数组、变量可以是以下类型:整数、浮点数、字符、字符串或指针。
定义变量的语句不用写出来,但必须在注释中给出。
2.指令的表示
在算法中的某些指令或子任务可以用文字来叙述,例如,”设x是A中的最大项”,这里A是一个数组;或者”将x插入L中”,这里L是一个链表。
这样做的目的是为了避免因那些与主要问题无关的细节使算法本身杂乱无章。
3.表达式
算术表达式可以使用通常的算术运算符(+,-,*,/,以及表示幂的^)。
逻辑表达式可以使用关系运算符 = 、≠、<、>、≤ 和 ≥。
逻辑运算符与(and)、或(or)、非(not)。
4.赋值语句
赋值语句是如下形式的语句:a←b
。
这里a是变量、数组项,b是算术表达式、逻辑表达式或指针表达式。语句的含义是将b的值赋给a。
变量交换:若a和b都是变量、数组项,那么记号a<->b 表示a和b的内容进行交换。
5.goto语句
goto语句具有形式:
goto label(goto标号)
它将导致转向具有指定标号的语句。
6.分支结构
条件语句:
if i=10
then xxxx
else xxxx //else 和 then 要对齐
//或者
if i=10
then xxxx //if 后面必定跟上then,else后面不用跟then
elseif i=9 //elseif 要连在一起写
then xxxx
yyyy
else xxxx //else 跟在 elseif 的 then 对齐
7.循环结构
有两种循环指令:while和for。
while语句的形式是:
while time<10
do xxxxx //while后面必定要紧跟缩进的do
xxxxx
end
for语句的形式是:
for var init to limit by incr
do s
end
这里var是变量,init、limit和incr都是算术表达式,而s是由一个或多个语句组成的语句串。
初始时,var被赋予init的值。假若incr≥0
,则只要var≤limit
,就执行s并且将incr加到var上。
(假若incr<0
,则只要var≥limit
,就执行s并且将incr加到var上)。incr的符号不能由s来该改变。
8.程序的结束
exit语句可以在通常的结束条件满足之前,被用来结束while循环或者for循环的执行。exit导致转向到紧接在包含exit的(最内层)while或者for循环后面的一个语句。
return用来指出一个算法执行的终点;如果算法在最后一条指令之后结束,它通常是被省略的;它被用得最多的场合是检测到不合需要的条件时。return的后面可以紧接被括在引号的信息。
9.注释风格
算法中的注释被括在 /* */ 之中。
10.函数的编写
函数的伪代码格式例子为:search(A,name), 参数类型可以不给出,但必须在注释中说明。
伪代码实例
伪代码:
x ← 0
y ← 0
z ← 0
while x < N
do x ← x + 1
y ← x + y
for t ← 0 to 10
do z ← ( z + x * y ) / 100
repeat
y ← y + 1
z ← z - y
until z < 0
z ← x * y
y ← y / 2
正常的C语言代码:(并不能运行,只做大体表示)
int x = 0, y = 0, z = 0;
while (z < N) {
x++;
y += x;
for (int t = 0; t < 10; t++) {
z = (z + x * y) / 100;
do {
y++;
z -= y;
} while (z >= 0);
}
z = x * y;
}
y /= 2;