指标与阵列-东海大学.PPT
文本预览下载声明
陣列 東海大學物理系?資訊教育 施奇廷 使用陣列的時機: 在科學運算中,我們經常要處理大量性質相同的資料,如果逐一宣告處理會,程式的編寫與維護都很麻煩。利用陣列變數處理這些資料,將會方便許多。 程式中有大量性質相同的資料,若逐一命名、宣告資料型態十分不便。 這些資料值在程式中被使用不止一次 經常需要使用多個這些資料 程式中要用到 10 個學號, 就要宣告 10 個變數來儲存: C 語言提供了一種特殊的資料結構:陣列 (Array)。宣告一個陣列, 可以取代宣告多個變數, 讓程式更容易撰寫和閱讀。像上述 10 個學號的例子, 改用陣列的語法來撰寫會方便許多, 如下: 陣列的意義 陣列可說是一組同型別與同性質變數的集合, 一個陣列等於一串連續的變數 當我們宣告一個陣列時, 就等於宣告了多個變數 我們可以根據所需變數的多寡, 自由的設定陣列的大小 陣列也可以如變數一樣, 當成引數在函式間的傳遞, 是一種非常方便的資料儲存空間。 一維陣列的宣告 格式: 範例: 宣告方式與一般變數類似,只是要宣告這個陣列中有幾個元素 陣列的 Index 在上面的例子中,ID[n] 表示 ID 這個陣列有十個元素,其編號分別是 ID[0], ID[1], ID[2]……ID[n-1] 陣列內的每個元素可視為同一型別的 n 個變數,不同資料型別的變數無法塞進同一個陣列內 範例 陣列初值給定 int x[10]; → 沒有給定初值 int x[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; → 表示 x[0]=1, x[1]=2……x[9]=10 int x[10] = {0}; → 表示 x[0] = x[1] = x[2] = …… = x[10]=0 int x[10] = {0,1,2,3,4,5,6,7,8,9,10}; → 會出現錯誤,因為 x 只有十個元素,但是初值集合 { } 內有十一個數 矩陣大小宣告較好的方式 把矩陣大小用「define」指令定義,程式本體內全部此取代,若要改變其值時,只要在 define 指令中修改即可 練習 將上一章(函式)的範例(輸入八個整數後找出其最大值)改寫,用陣列來儲存輸入的變數。找最大值的方法有二: 用原來的方法:自訂函數compare兩兩比出較大者 將biggest這個變數初值設為很小,保證不會比輸入數字中最大者還大。然後用一迴圈,將所有陣列中的元素(即輸入之值)跟biggest相比,只碰到比biggest大的元素,就將biggest的值更新為該元素的值 範例:陣列元素排序 所謂排序, 就是將一個隨意排列的數列, 經過一連串『比較大小』和『調換次序』的處理後, 使數列中的每個數字都依由小到大的升冪或者由大到小的降冪方式排列。 一維陣列元素排序法, 稱為汽泡排序法 (Bubble Sort)。在迴圈配合條件式執行過程, 較大的數值位置會漸漸的往前面移動, 感覺就好像一個氣泡由水底浮到水面, 因為壓力減小, 氣泡的體積會慢慢變大, 這就是其名稱的由來。 陣列內所有數值的排序 以下程式是由一個包含 5 個元素的字元陣列, 利用氣泡排序法, 將 5 個字母由大到小排列, 程式如下: 將陣列中的資料降冪排序 從螢幕輸出 將陣列中的資料降冪排序 從螢幕輸出 將陣列中的資料降冪排序 從螢幕輸出 執行結果 程式執行說明 氣泡排序法會先取第 1 個陣列元素, 與所有陣列元素比較後, 如果第 1 個陣列元素比第 2 個小, 則交換位置, 反之則不換。 i=0 時, 字元大小的比較, 就是在比較其 ASCII 碼, s、c、i、o、n 的 ASCII 碼分別為 115、99、105、111、110: 程式執行說明 程式執行說明 接著 i=1 時, 取第 2 個陣列元素與其後的所有元素比較: 程式執行說明 以此類推, 排序直到完成為止: 練習:資料的平均值以及標準差 若有一組資料 {x1, x2, ……, xN},其平均值 標準差為: 試寫作一程式,由鍵盤讀入 5 個數字,計算其平均值與標準差 練習:記票 寫作一程式,要求輸入 0~9 的數字,計算每個數字出現的次數以及出現率,若輸入 0~9 以外的數字或字元則結束程式,並輸出統計結果,以及計算各數字出現的比率 二維陣列 二維陣列的宣告語法如下: 資料型別 陣列名稱[列數][行數] 例如: int a[5][6]; ← 宣告一陣列 a,一共有五列、六行,共三十個元素,皆為整數 注意:與一維陣列相同,index 是由 0 開始計算,以
显示全部