Presentation is loading. Please wait.

Presentation is loading. Please wait.

程式設計 博碩文化出版發行.

Similar presentations


Presentation on theme: "程式設計 博碩文化出版發行."— Presentation transcript:

1 程式設計 博碩文化出版發行

2 第六章 陣列與字串 課前指引 「線性串列」(Linear List)是數學應用在電腦科學中一種相當簡單與基本的資料結構,簡單的說,線性串列是n個元素的有限序列(n≧0),線性串列的應用在計算機科學領域中是相當廣泛的,例如C程式中的陣列或字串結構,就是一種典型線性串列的應用。

3 章節大綱 6-1 認識陣列 6-2 C的陣列簡介 6-3 字串進階處理簡介 備註:可依進度點選小節

4 6-1 認識陣列 陣列結構型態的五種屬性 起始位址: 維度(dimension): 索引上下限: 元素個數:是索引上限與索引下限的差+1。
以陣列名稱來代表陣列第一個元素所在的記憶體位址。 維度(dimension): 代表此陣列為幾維陣列 例如:一維陣列、二維陣列、三維陣列等等。 索引上下限: 指陣列中元素編號的上限與下限。 元素個數:是索引上限與索引下限的差+1。 型態:宣告此陣列的型態,它決定陣列元素在記憶體所佔有的大小。

5 6-1 認識陣列 陣列儲存元素的方式 以列為主(Row-major):一列一列依序儲存,例如Java、C/C++、PASCAL語言的陣列存放方式。 以行為主(Column-major)::一行一行依序儲存,例如Fortran語言的陣列存放方式。

6 6-2 C的陣列簡介 在C中,可以把陣列(array)看作是一群相同名稱與資料型態的集合,並且在計憶體中佔有一塊連續的記憶體空間。要存取陣列中的資料時,則配合索引值(index)尋找出資料在陣列的位置。

7 6-2 C的陣列簡介 一維陣列 資料型態 陣列名稱[陣列長度]; 資料型態 陣列名稱[陣列大小]={初始值1,初始值2,…};
資料型態 陣列名稱[陣列長度]; 資料型態 陣列名稱[陣列大小]={初始值1,初始值2,…}; 在C中,陣列的索引值是從0開始,對於定義好的陣列,可以藉由索引值的指定來存取陣列中的資料。 兩個陣列間不可以直接用「=」運算子互相指定,只有陣列元素才能互相指定。

8 6-2 C的陣列簡介 範例CH06_01.c /* 一維陣列的使用之1 */

9 6-2 C的陣列簡介 執行結果 程式解說 第6行宣告整數陣列Score時,同時設定學生成績初始值。
第11行中透過for迴圈,設定i變數從0開始計算,並當作陣列的索引值,計算總分Total。 第18行輸出成績總分及平均。

10 6-2 C的陣列簡介 範例CH06_02.c /* 一維陣列的使用之2 */

11 6-2 C的陣列簡介 執行結果 程式解說 第6行宣告並設定陣列元素值,不過有些元素並未指定初值。
第9行當輸出所有元素值時,各位將發現arr[3]與arr[4]的值為0。

12 6-2 C的陣列簡介 範例CH06_03.c /* 一維陣列的使用之3 */

13 6-2 C的陣列簡介 執行結果 程式解說 第6行宣告整數陣列,不過並未同步設定初值。第8~10行設定陣列部份元素的值,但arr[3]與arr[4]並未設定初值。 第13行輸出陣列元素值時,會發現arr[3]與arr[4]顯示不可預期的值。

14 6-2 C的陣列簡介 範例CH06_04.c /* 一維陣列的使用之4 */

15 6-2 C的陣列簡介 執行結果 程式解說 第7行宣告一個整數陣列arr,並設定初始值。第17行將整數陣列arr內的值累加到變數sum中。
第18行輸出累加後的結果。

16 6-2 C的陣列簡介 範例CH06_05.c /* 一維陣列的使用之5 */

17 6-2 C的陣列簡介 執行結果 程式解說 第7行定義整數陣列 bArray。 第8行定義浮點數陣列 cArray。
在第10~14行中,各位發現陣列所佔用的空間大小與資料型態與元素個數有關。

18 6-2 C的陣列簡介 範例CH06_06.c /* 一維陣列的使用之6 */

19 6-2 C的陣列簡介 執行結果 程式解說 第13行由鍵盤輸入陣列元素值。 第14行每個元素值累加1到total。

20 6-2 C的陣列簡介 範例CH06_07.c /* 氣泡排序法 */

21 6-2 C的陣列簡介 範例CH06_07.c

22 6-2 C的陣列簡介 執行結果 程式解說 第7行宣告並將此數列值以一維陣列儲存。 第10~11行輸出此一維陣列的所有元素值。
第18行比較相鄰兩數,如第一數較大則交換。 第20~22行直接進行陣列中元素的移動與交換動作。

23 6-2 C的陣列簡介 二維陣列 資料型態 陣列名稱 [列的個數] [行的個數];
資料型態 陣列名稱 [列的個數] [行的個數]; 二維陣列設初始值時,為了方便區隔行與列,所以除了最外層的{}外,最好以{}括住每一列的元素初始值,並以「,」區隔每個陣列元素,例如: int A[2][3]={{1,2,3},{2,3,4}};

24 6-2 C的陣列簡介 陣列註標的設定 C對於多維陣列註標的設定,只允許第一維可以省略不用定義,其它維數的註標都必須清楚定義長度。

25 6-2 C的陣列簡介 範例CH06_08.c /* 二維陣列的使用之1 */

26 6-2 C的陣列簡介 範例CH06_08.c

27 6-2 C的陣列簡介 執行結果

28 6-2 C的陣列簡介 程式解說 第7~9行宣告了一個二維整數陣列,用了存放3個業務員半年內每個月的業績,宣告時省略第一維的索引值不填。
第17行利用運算式sum+=sale[i][j]計算每個業務員半年的業績金額。 第26行利用sum+=sale[j][i];運算式計算每個月三個業務員的業績總金額。

29 6-2 C的陣列簡介 範例 CH06_09.c /* 二維陣列的使用之2 */

30 6-2 C的陣列簡介 執行結果 程式解說 第7~9行分別宣告三個二維陣列A、B、C,其中A、B陣列分別設定初始值。
第11~13行利用運算式C[i][j]=A[i][j]+B[i][j],計算矩陣C=矩陣A+矩陣B。 第18~19行輸出C陣列的內容。

31 6-2 C的陣列簡介 多維陣列 多維陣列的表示法和二維陣列一樣,皆可視為是一維陣列的延伸,在C中如果要提高陣列的維數,就是多加一組括號與索引值即可。定義語法如下所示: 以下舉出C中幾個多維陣列的宣告實例: 資料型態 陣列名稱[元素個數] [元素個數] [元素個數]……. [元素個數]; int Three_dim[2][3][4]; //三維陣列 int Four_dim[2][3][4][5]; // 四維陣列

32 6-2 C的陣列簡介 範例 CH06_10.c /* 三維陣列的使用之1 */

33 6-2 C的陣列簡介 執行結果

34 6-2 C的陣列簡介 程式解說 第7~14行宣告並設定一2*3*4三維陣列的值。
第18~20行分別以三層迴圈方式將第21行輸出三維陣列中的元素。 其中第18行的外層迴圈控制第一維維度,第19行的中層迴圈控制第二維維度,第20行的內層迴圈控制第三維維度。

35 6-2 C的陣列簡介 範例CH06_11.c /* 三維陣列的使用之2 */

36 6-2 C的陣列簡介 範例CH06_11.c

37 6-2 C的陣列簡介 執行結果

38 6-2 C的陣列簡介 程式解說 第8~11行宣告並設定陣列元素值。 第19行將所有元素值累加到sum變數。
第20~21行如果元素值於為負數,則資料值重新設定為零。

39 6-3 字串進階處理簡介 字串進階處理包括了字元陣列的介紹與各種字串處理功能,並包括C函數庫中許多實用多的字元與字串處理函數。 字串陣列

40 6-3 字串進階處理簡介 字串陣列 宣告方式如下:
在宣告時就設定初值,不過要記得每個字串元素都必須包含於雙引號之內,而且每個字串間要以逗號「,」分開。語法格式如下: char 字串陣列名稱[字串數][字元數]; char 字串陣列名稱[字串數][字元數]={ "字串常數1", "字串常數2", "字串常數3"…};

41 6-3 字串進階處理簡介 範例CH06_12.c /* 字串陣列的使用之1 */

42 6-3 字串進階處理簡介 執行結果 程式解說 第6~11行字串陣列的宣告與設定初值。
第15行輸出字串陣列內容,請留意在此是以一維陣列Str[i]的方式輸出。 第18行輸出第二個字串中的第一個字元,則是以二維陣列Str[1][0]方式輸出。

43 6-3 字串進階處理簡介 範例CH06_13.c /* 字串陣列的使用之2 */

44 6-3 字串進階處理簡介 範例CH06_13.c

45 6-3 字串進階處理簡介 執行結果 程式解說 第6行宣告儲存姓名與成績的兩個陣列。
第12行以scanf()函數來輸入每一筆姓名字串與三科成績。 第21行計算三科成績的總分。

46 6-3 字串進階處理簡介 範例CH06_14.c /* 字串長度之計算 */

47 6-3 字串進階處理簡介 執行結果 程式解說 第6行length變數用來作計算字串的長度。 第7行宣告此字串最多可儲存30個字元。
第11行以gets()函數輸入字串,第13行宣告length=0。 第14行以while迴圈,當此元素不為空字元,length變數就累加1。 第16行輸出這個字串的字元數。

48 6-3 字串進階處理簡介 範例CH06_15.c

49 6-3 字串進階處理簡介 範例CH06_15.c /* 字串之串接 */

50 6-3 字串進階處理簡介 執行結果 程式解說 第8行宣告連結後的新陣列,首先要注意本身宣告字串大小,如果串接後超過字串大小時,編譯器可是會自動清除後方連接的字串。 第16行把整數變數 record 歸 0,用來記錄 S3 所設定陣列元素的索引值。 第18行將 S1 字串複製到 S3,第21行將 S2 字串複製到 S3。 第24行字串最後要加上 NULL 字元。 第24行顯示字串連結的結果。

51 6-3 字串進階處理簡介 範例 CH06_16.c /* 字串之大小寫轉換 */

52 6-3 字串進階處理簡介 執行結果 程式解說 第7行宣告一字元陣列,可存放50個字元。
第14~15行利用字元的ASCII碼判斷,並將大寫字母換小寫字母。 第16~17行利用字元的ASCII碼判斷,並將小寫字母換為大寫字母。

53 6-3 字串進階處理簡介 範例 CH06_17.c /* strcat(), strlwr()之使用 */

54 6-3 字串進階處理簡介 執行結果 程式解說 第3行含括 <string.h> 標頭檔,才能使用C的字串庫存函數。
第16行利用strcat()函數則將 str2 字串連結到字串 str1。 第17行將字串內的大寫字母轉為小寫字母。

55 6-3 字串進階處理簡介 範例 CH06_18.c /* 反向列印字串 */

56 6-3 字串進階處理簡介 執行結果 程式解說 第7行宣告所輸入字串變數的最大長度。
第11行使用gets()函數,允許所輸入的字串中含有空白字元。 第13~14行中使用C的庫存函數strlen()來逐一反向印出字元。

57 本章結束 Q&A討論時間


Download ppt "程式設計 博碩文化出版發行."

Similar presentations


Ads by Google