偽代碼的使用規則及表示


偽代碼的使用 Usage of Pseudocode
  偽代碼(Pseudocode)是一種算法描述語言。使用為代碼的目的是為了使被描述的算法可以容易地以任何一種編程語言(Pascal, C, Java, etc)實現。因此,偽代碼必須結構清晰,代碼簡單,可讀性好,並且類似自然語言。
下面介紹一種類Pascal語言的偽代碼的語法規則。
偽代碼的語法規則
  在偽代碼中,每一條指令占一行(else if 例外,),指令后不跟任何符號(Pascal和C中語句要以分號結尾);
  書寫上的“縮進”表示程序中的分支程序結構。這種縮進風格也適用於if-then-else語句。用縮進取代傳統Pascal中的begin和end語句來表示程序的塊結構可以大大提高代碼的清晰性;同一模塊的語句有相同的縮進量,次一級模塊的語句相對與其父級模塊的語句縮進;
例如:
line 1
line 2
sub line 1
sub line 2
sub sub line 1
sub sub line 2
sub line 3
line 3
而在Pascal中這種關系用begin和end的嵌套來表示,
line 1
line 2
begin
sub line 1
sub line 2
begin
sub sub line 1
sub sub line 2
end;
sub line 3
end;
line 3
在C中這種關系用{ 和 } 的嵌套來表示,
line 1
line 2
{
sub line 1
sub line 2
{
sub sub line 1
sub sub line 2
}
sub line 3
}
line 3
在偽代碼中,通常用連續的數字或字母來標示同一即模塊中的連續語句,有時也可省略標號。
例如:
1. line 1
2. line 2
a. sub line 1
b. sub line 2
1. sub sub line 1
2. sub sub line 2
c. sub line 3
3. line 3
符號△后的內容表示注釋;
在偽代碼中,變量名和保留字不區分大小寫,這一點和Pascal相同,與C或C++不同;
在偽代碼中,變量不需聲明,但變量局部於特定過程,不能不加顯示的說明就使用全局變量;
賦值語句用符號←表示,x←exp表示將exp的值賦給x,其中x是一個變量,exp是一個與x同類型的變量或表達式(該表達式的結果與x同類型);多重賦值i←j←e是將表達式e的值賦給變量i和j,這種表示與j←e和i←e等價。
例如:
x←y
x←20*(y+1)
x←y←30
以上語句用Pascal分別表示為:
x := y;
x := 20*(y+1);
x := 30; y := 30;
以上語句用C分別表示為:
x = y;
x = 20*(y+1);
x = y = 30;
選擇語句用if-then-else來表示,並且這種if-then-else可以嵌套,與Pascal中的if-then-else沒有什么區別。
例如:
if (Condition1)
then [ Block 1 ]
else if (Condition2)
then [ Block 2 ]
else [ Block 3 ]
循環語句有三種:while循環、repeat-until循環和for循環,其語法均與Pascal類似,只是用縮進代替begin - end;
例如:
1. x ← 0
2. y ← 0
3. z ← 0
4. while x < N
1. do x ← x + 1
2. y ← x + y
3. for t ← 0 to 10
1. do z ← ( z + x * y ) / 100
2. repeat
1. y ← y + 1
2. z ← z - y
3. until z < 0
4. z ← x * y
5. y ← y / 2
上述語句用Pascal來描述是:
x := 0;
y := 0;
z := 0;
while x < N do
begin
x := x + 1;
y := x + y;
for t := 0 to 10 do
begin
z := ( z + x * y ) / 100;
repeat
y := y + 1;
z := z - y;
until z < 0;
end;
z := x * y;
end;
y := y / 2;
上述語句用C或C++來描述是:
x = y = z = 0;
while( z < N )
{
x ++;
y += x;
for( t = 0; t < 10; t++ )
{
z = ( z + x * y ) / 100;
do {
y ++;
z -= y;
} while( z >= 0 );
}
z = x * y;
}
y /= 2;
數組元素的存取有數組名后跟“[下標]”表示。例如A[j]指示數組A的第j個元素。符號“ …”用來指示數組中值的范圍。
例如:
A[1…j]表示含元素A[1], A[2], … , A[j]的子數組;
復合數據用對象(Object)來表示,對象由屬性(attribute)和域(field)構成。域的存取是由域名后接由方括號括住的對象名表示。
例如:
數組可被看作是一個對象,其屬性有length,表示其中元素的個數,則length[A]就表示數組A中的元素的個數。在表示數組元素和對象屬性時都要用方括號,一般來說從上下文可以看出其含義。
用於表示一個數組或對象的變量被看作是指向表示數組或對象的數據的一個指針。對於某個對象x的所有域f,賦值y←x就使f[y]=f[x],更進一步,若有f[x]←3,則不僅有f[x]=3,同時有f[y]=3,換言之,在賦值y←x后,x和y指向同一個對象。
有時,一個指針不指向任何對象,這時我們賦給他nil。
函數和過程語法與Pascal類似。
函數值利用 “return (函數返回值)” 語句來返回,調用方法與Pascal類似;過程用 “call 過程名”語句來調用;
例如:
1. x ← t + 10
2. y ← sin(x)
3. call CalValue(x,y)
參數用按值傳遞方式傳給一個過程:被調用過程接受參數的一份副本,若他對某個參數賦值,則這種變化對發出調用的過程是不可見的。當傳遞一個對象時,只是拷貝指向該對象的指針,而不拷貝其各個域。
a) 偽代碼表示的算法
  用傳統的流程圖和N-S圖表示算法直觀易懂,但畫起來比較費事,在設計一個算法時,可能要反復修改,而修改流程圖是比較麻煩的。因此,流程圖適宜於表示一個算法,但在設計算法過程中使用不是很理想的(尤其是當算法比較復雜、需要反復修改時)。為了設計算法時方便,常用一種稱為偽代碼的工具。偽代碼是用介於自然語言和計算機語言之間的文字和符號來描述算法。它如同一篇文章一樣,自上而下地寫下來。每一行(或幾行)表示一個基本操作。它不用圖形符號,因此書寫方便、格式緊湊,易懂也便於向計算機語言算法(即程序)過渡。
  可以用英文、漢字、中英文混合表示算法,以便於書寫和閱讀為原則。用偽代碼寫算法並無固定的、嚴格的語法規則,只要把意思表達清楚,並且書寫的格式要寫成清晰易讀的形式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM