阵列(Arrays)是C语言的延伸资料型态.ppt
文本预览下载声明
陣列 王振生 陣列(P 6-2) 「陣列」(Arrays)是C語言的延伸資料型態,陣列與指標間擁有非常密切的關係,陣列是一種程式語言的基本資料結構,屬於一種循序性的資料結構。日常生活最常見的範例是一排信箱,如下圖所示: 陣列圖例(P 6-2) 陣列是將C語言資料型態的變數集合起來,以一個名稱代表,然後以索引值存取元素,每一個元素相當於一個變數,陣列的每一個「陣列元素」(Array Elements)是使用「索引」(Index)存取,C語言的索引值是從0開始到陣列長度減1,下列即0~7。 靜態記憶體配置(P 6-3) C語言的靜態記憶體配置是指在編譯階段,程式碼就已經配置宣告變數所需的記憶體空間。 這和在執行階段才配置變數所需大小,然後向作業系統要求所需記憶體空間的動態記憶體配置,是兩種截然不同的記憶體配置方法(關於動態記憶體配置的說明請參閱第11章)。 靜態記憶體配置範例(P 6-3) 如下宣告基本資料型態變數 a,b,c 和整數陣列data[] int a, b, c; int data[8]; 程式碼宣告的3個變數和1個陣列,在編譯階段就已經配置所需的記憶體空間,每一個整數佔用4個位元組,陣列宣告8個元素(索引值是0~7),共需8* 4 = 32位元組的記憶體空間。 為什麼使用陣列-使用變數(P 6-4) 第一種方法使用多個變數儲存成績,此方法的擴充性很差,如果小考次數改變,增加為10、50、100次或減少為3次,程式都需要大幅修改計算總分部分的程式碼。 int i,t1=81,t2=93,t3=77,t4=59,t5=69; sum = t1 + t2 + t3 + t4 + t5; average = sum / 5.0; 為什麼使用陣列-使用陣列(P 6-4) 使用一維陣列儲存成績,這種方法擁有較好的擴充性,當小考次數更改時,只需更改陣列大小及迴圈次數,就可以使用同樣for迴圈計算成績,而不用寫出冗長的加法運算式。 int t[5]={ 81, 93, 77, 59, 69 }; for ( sum=0, i=0; i 5; i++ ) sum += t[i]; average = sum / 5.0; 宣告一維陣列語法(P 6-6) C語言的陣列宣告分成三個部分:陣列型態、陣列名稱和陣列維度,其宣告語法,如下所示: 陣列型態 陣列名稱[整數常數] 語法宣告一維陣列時只有一個「[]」(一個「[]」表示一維,二維就有2個),因為陣列是同資料型態的變數集合,所以用一個陣列名稱代表,陣列元素則以陣列名稱[索引值]來存取(索引值為0~整數常數-1),陣列型態是陣列元素的資料型態,整數常數是陣列的元素個數,。 宣告一維陣列範例 如下例以C語言宣告一維陣列scores[] int scores[5]; 上述程式碼宣告int資料型態(整數資料型態)的陣列,陣列名稱為scores,整數常數5表示陣列共擁有5個元素,索引值為0~4。 宣告一維陣列-圖例 程式執行時配置給陣列的記憶體空間,如下圖所示: 一維陣列存取陣列元素 在C語言可以使用指定敘述存取陣列元素,陣列索引值是從0開始,例如:使用指定敘述指定陣列各元素的值,如下所示: scores[0] = 81; scores[1] = 93; scores[2] = 77; scores[3] = 59; scores[4] = 69; 一維陣列存取陣列元素 每一個陣列元素如同是一個變數,所以一樣可以在運算式取得陣列元素的值來進行計算,如下所示: sum = scores[0] + scores[1] + scores[2] + \ scores[3] + scores[4]; 程式碼是陣列元素相加的運算式。不過,C語言並不會檢查陣列邊界,如果存取陣列元素超過陣列尺寸,例如:scores[5],並不會產生編譯錯誤,但有可能造成不可預期的執行結果。 一維陣列的初值指定 C語言的陣列可以在宣告時指定陣列初值,其語法如下所示: 陣列型態 陣列名稱[整數常數] = { 常數值, 常數值, … } 語法宣告一維陣列,陣列使用「=」指定陣列元素的初值,使用大括號括起的各陣列元素的常數值清單,以「,」逗號分隔。 使用迴圈存取一維陣列 因為陣列可以使用索引值來循序存取,換句話說,我們可以使用一個for迴圈走訪整個陣列來計算總和。 例如:使用for迴圈顯示陣列的每一個元素和計算總和,如下所示: for ( i = 0; i LENGTH; i++) { sum += scores[i]; printf(成績: %.3f\n, scores[i]); } 二維與多維陣列(P
显示全部