虛擬碼的使用

來源:互聯網
上載者:User
虛擬碼的使用 Usage of Pseudocode

虛擬碼(Pseudocode)是一種演算法描述語言。使用為代碼的目的是為了使被描述的演算法可以容易地以任何一種程式設計語言(Pascal, C, Java, etc)實現。因此,虛擬碼必須結構清晰,代碼簡單,可讀性好,並且類似自然語言。

下面介紹一種類Pascal語言的虛擬碼的文法規則。

虛擬碼的文法規則
  1. 在虛擬碼中,每一條指令佔一行(else if 例外,),指令後不跟任何符號(Pascal和C中語句要以分號結尾);
  2. 書寫上的“縮排”表示程式中的分支程式結構。這種縮排風格也適用於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    
  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
  4. 符號△後的內容表示注釋;
  5. 在虛擬碼中,變數名和保留字不區分大小寫,這一點和Pascal相同,與C或C++不同;
  6. 在虛擬碼中,變數不需聲明,但變數局部於特定過程,不能不加顯示的說明就使用全域變數;
  7. 指派陳述式用符號←表示,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;    
  8. 選擇語句用if-then-else來表示,並且這種if-then-else可以嵌套,與Pascal中的if-then-else沒有什麼區別。

    例如:

      if (Condition1)    then [ Block 1 ]    else if (Condition2)    then [ Block 2 ]    else [ Block 3 ]    
  9. 迴圈語句有三種: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;    
  10. 數組元素的存取有數組名後跟“[下標]”表示。例如A[j]指示數組A的第j個元素。符號“ …”用來指示數組中值的範圍。

    例如:

     A[1…j]表示含元素A[1], A[2], … , A[j]的子數組;

  11. 複合資料用對象(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

  12. 函數和過程文法與Pascal類似。

    函數值利用 “return (函數傳回值)” 語句來返回,調用方法與Pascal類似;過程用 “call 過程名”語句來調用;

    例如:

       1. x ← t + 10    2. y ← sin(x)    3. call CalValue(x,y)    

    參數用按值傳遞方式傳給一個過程:被調用過程接受參數的一份副本,若他對某個參數賦值,則這種變化對發出調用的過程是不可見的。當傳遞一個對象時,只是拷貝指向該對象的指標,而不拷貝其各個域。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.