11月 27, 2008

【語言】陣列是什麼 - What is Array?

@
  在前幾篇文章中,我們已經介紹過變數了。但是,假設現在出現了這種情況:現在班上有 30 個人,而你想要寫一個程式,記錄班上所有人的期中考成績,並計算出全班總平均。

  於是,你可能會這麼寫:

input score1;
input score2;
input score3;
......
......
input score30;

average = score1 + score2 + score3 + ... + score30;

  喔,這樣的程式看起來真討厭!

  若是現在班上不只 30 個人,而是 300 個人,你就得重複寫 300 次這種類似 "input scoreX" 這種敘述。無論對於撰寫或是閱讀而言,這種情況都是相當麻煩的一件事。

  不過,我們可以利用陣列(array)來解決這個問題。


  陣列所代表的是一串佔用連續記憶體的變數集合。我們可以只利用一個名稱(陣列名稱)來表示這些變數,以省去大量變數命名的麻煩。

  而在存取時,我們只需要透過指定索引(index)值的方式,就可以取得陣列中的某個元素。換句話說,在某些情況下我們也可以利用迴圈(loop),來對整個陣列的元素進行處理。

  例如,上面期中考成績的程式,我們可以利用陣列改寫成這樣:

for (i = 1 to 30)
{
    input score[i];
    total = total + score[i];
}

average = total / 30;



  由上面可以看到,我們可以直接利用 for 迴圈來依次取得使用者的輸入,並根據索引值 i 存進適當的陣列元素中,同時計算出全班的分數總和以得出平均分數。這樣的寫法是不是簡潔、俐落多了呢?


  接下來,情況改變一下。若是你現在要記錄的不止是全班期中考成績,而是全年級 15 個班(假設人數皆為 30 人)的期中考成績,那麼該怎麼做呢?

  別想得那麼難!其實我們只需要將 score 改成一個「陣列的陣列」,也就是一個二維陣列(two-dimensional array)就可以了:

for (i = 1 to 15)
{
    for (j = 1 to 30)
    {
        input score[i][j];
        total[i] = total[i] + score[i][j];
    }

    average[i] = total[i] / 30;
}



  外圍的 for 迴圈用來控制代表「班級」的索引值 i,內層的 for 迴圈用來控制代表「座號」的索引值 j。於是,我們便可以利用 score[i][j] 來存取 i 班 j 號同學的成績了。


  那麼,要記錄全校 3 個年級的學生成績呢?要記錄全區域 10 所學校的學生成績呢?當然,你也可以建立出三維、四維等多維陣列,它們的想法都是差不多的。

0 回覆:

張貼留言