第 5 章 陣列與字串

33
1 第5第 第第第第第 5-1 陣陣陣陣 5-2 陣陣陣陣 5-3 陣陣陣陣陣陣陣陣 5-4 陣陣陣陣陣陣

Upload: medea

Post on 23-Jan-2016

63 views

Category:

Documents


4 download

DESCRIPTION

第 5 章 陣列與字串. 5-1 陣列簡介 5-2 認識字串 5-3 字串處理功能實作 5-4 本章綜合練習. 5-1 陣列簡介. 在說明陣列之前,首先來講一下普通變數在記憶體中的配置方式。例如各位要計算班上 3 位學生的總成績,通常會將程式碼撰寫成以下格式: int a,b,c,sum; sum=0; a=50,b=70,c=83; sum=a+b+c; /* 計算全班總成績 * /. 記憶體位置示意圖. 記憶體內容示意圖. 陣列元素. 將陣列想像成你家門口的信箱,每個信箱都有固定住址,其中路名就是名稱,信箱號碼就是索引。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 5 章  陣列與字串

1

第 5章 陣列與字串

5-1 陣列簡介 5-2 認識字串 5-3 字串處理功能實作5-4 本章綜合練習

Page 2: 第 5 章  陣列與字串

2

5-1 陣列簡介

在說明陣列之前,首先來講一下普通變數在記憶體中的配置方式。例如各位要計算班上 3 位學生的總成績,通常會將程式碼撰寫成以下格式: int a,b,c,sum; sum=0; a=50,b=70,c=83; sum=a+b+c; /* 計算全班總成績 */

Page 3: 第 5 章  陣列與字串

3

記憶體位置示意圖

Page 4: 第 5 章  陣列與字串

4

記憶體內容示意圖

Page 5: 第 5 章  陣列與字串

5

陣列元素

將陣列想像成你家門口的信箱,每個信箱都有固定住址,其中路名就是名稱,信箱號碼就是索引。

而程式設計師只要根據陣列名稱所代表的起始位址與索引所計算出來的相對位移 (offset) ,就可以找到此陣列元素的實際位址,並直接存取資料。

Page 6: 第 5 章  陣列與字串

6

一維陣列

資料型態:陣列中所有的資料都是此資料型態。

陣列名稱:是陣列中所有資料的共同名稱。陣列大小:代表陣列中有多少的元素。初始值:陣列中設定初始值時,需要用大

括號和逗號來分隔。

Page 7: 第 5 章  陣列與字串

7

一維陣列 score

陣列中可以放入 6 個整數元素設定值,而陣列元素分別是 score[0] 、 score[1] 、 score[2] 、… score[5] 。如下圖所示:

Page 8: 第 5 章  陣列與字串

8

一維陣列的宣告與應用: CH05_1

程式範例是將五位學生分數寫入陣列,並計算總和及平均。

Page 9: 第 5 章  陣列與字串

9

元素的作用表

元素 作用 元素 作用degree[0

]儲存分數 0~ 9的人數 degree[5] 儲存分數 50~ 59的人

數degree[1

]儲存分數 10~ 19的人數

degree[6] 儲存分數 60~ 69的人數

degree[2]

儲存分數 20~ 29的人數

degree[7] 儲存分數 70~ 79的人數

degree[3]

儲存分數 30~ 39的人數

degree[8] 儲存分數 80~ 89的人數

degree[4]

儲存分數 40~ 49的人數

degree[9] 儲存分數 90~ 100的人數

Page 10: 第 5 章  陣列與字串

10

初始化陣列及計算學生成績分佈圖: CH05_2

程式範例是結合 if-else 條件敘述與一維陣列的應用。

使用一個長度為 10 的陣列來儲存位於該分數級距的學生人數,及加入學生成績的分佈圖,並以星號代表該級距的人數。

Page 11: 第 5 章  陣列與字串

11

二維陣列

一維陣列當然可以擴充到二維或多維陣列,在使用上和一維陣列相似,都是處理相同資料型態資料,差別只在於維度的宣告。

Page 12: 第 5 章  陣列與字串

12

二維陣列的宣告與應用: CH05_3

程式範例是定義二維整數陣列來儲存兩個班級學生的成績,並分別計算該班學生的總分,是個簡單的二維陣列應用範例。

Page 13: 第 5 章  陣列與字串

13

多維陣列

由於在 C 中所宣告的資料都存取在記憶體上,只要記憶體大小許可時,當然可以宣告更多維陣列存取資料。

多維陣列表示法同樣可視為一維陣列的延伸,在標準 C 中,凡是二維以上的陣列都可以稱作多維陣列,目前的編譯器最多可以宣告到 12 維陣列。

Page 14: 第 5 章  陣列與字串

14

三維陣列想像成空間上的立方體圖形

Page 15: 第 5 章  陣列與字串

15

認識字串

如果與其他程式語言相比, C 在字串處理方面就顯得相當複雜。

在 C 中,並沒有字串 (string) 的基本資料型態,如果要儲存字串,還是老話一句,就是必需使用字元陣列來表示。

Page 16: 第 5 章  陣列與字串

16

字串宣告

字串宣告的最重要特點是必須使用空字元(‘\0’) 來代表每一個字串的結束,例如’ a’與” a” 分別代表字元常數及字串常數,其中’ a’ 的長度為 1 ,” a” 的長度為 2 。

字串宣告方式如下: 方式 1 : char 字串變數 [ 字串長度 ]=" 初始字串 "; 方式 2 : char 字串變數 [ 字串長度 ]={' 字元 1', ' 字元

2', ...... ,' 字元 n', '\0'};

Page 17: 第 5 章  陣列與字串

17

記憶體儲存示意圖

Page 18: 第 5 章  陣列與字串

18

字串的宣告與應用: CH05_4

程式範例是示範字串宣告的兩種方式,不過在第6 行定義 Str_1 的字元陣列中,並沒有加入‘ \0’(NULL 字元 ) 。

當 printf() 函式輸出 Str_1 字元陣列後,並未結束執行,程式將會輸出亂碼,這也是筆者一直強調 '\0'(NULL 字元 ) 與字串間密切的關係。

Page 19: 第 5 章  陣列與字串

19

字串陣列簡介

字串在 C 中被視為字元陣列,所以字串陣列自然可看成是二維字元陣列,字串陣列宣告方式如下: char 字串陣列名稱 [ 字串數 ][ 字元數 ];

字串數是表示此字串陣列容納最多的字串數目,而字元數是表示每個字串大小最多可容納多少字元,並且包含了 \0 結尾字元。

Page 20: 第 5 章  陣列與字串

20

字串陣列的宣告與應用: CH05_5

程式範例說明了字串陣列的宣告與存取,讓使用者輸入號碼來選擇所訂購的報紙,並列印出字串陣列中元素的報紙名稱。

Page 21: 第 5 章  陣列與字串

21

字串處理功能實作

這本節中,將為各位介紹一些字串基本處理的方法,包括計算字串長度、複製、連接和搜尋等方法,且採取直接在範例中來說明,讓您更清楚字串的實際操作模式。

在 C 中,也制定了相關字串處理功能的常用函數庫,這部份將在第十章中再為各位介紹。

Page 22: 第 5 章  陣列與字串

22

字串長度與複製功能

C 中並不會主動為字串計算大小,所以在宣告或使用上都必須注意字串長度是否超出宣告範圍。

字串不是 C 的基本資料型態,所以無法利用陣列名稱直接指定給另一個字串,如果需要指定字串,必需從字元陣列中一個一個取出元素內容作複製。

Page 23: 第 5 章  陣列與字串

23

字串長度與複製功能實作: CH05_6

程式範例是利用 for迴圈來計算字串長度,並且從字串中一個一個取出元素內容來複製到另一個字串。

Page 24: 第 5 章  陣列與字串

24

字串連接功能

字串連接功能,是將 B 字串接到 A 字串後方,其實也是利用陣列位址將 B 字串的第一個字元的記憶體位址安排到 A 字串最後一個字元的記憶體位址。

Page 25: 第 5 章  陣列與字串

25

字串連接功能實作: CH05_7

程式範例是利用整數變數 s_record 作為 Str_3 字元陣列的索引值。

利用複製字串的方法,將 Str_1 與 Str_2字串複製到 Str_3 ,即可得到新連結的字串。

Page 26: 第 5 章  陣列與字串

26

字串比較功能

字串比較就是比對兩個字串內容是否完全相同。

比較方法也是使用迴圈從頭開始逐一比較字串中的每個字元在 ASCII 碼中的數字大小來排列,直到出現字元不相同或結束字元 ('\0') 為止。

Page 27: 第 5 章  陣列與字串

27

字串比較功能實作: CH05_8

程式範例相當簡單,還是利用迴圈從頭開始逐一比較每一個字元,只要有一個不相等即跳出迴圈執行,相等則繼續比較下一個字元,直到比較到結尾字元為止。

Page 28: 第 5 章  陣列與字串

28

字串搜尋功能

字串搜尋就是一種延伸字串比較功能的應用,例如在 Word 或筆記本之類的文書處理器,都可以看到字串搜尋的功能。

Page 29: 第 5 章  陣列與字串

29

字串搜尋功能實作: CH05_9

程式範例是使用字串比較方法,在事先準備的一段文章中,搜尋某一個字串,並找到出現這些字串的所有位置與次數。

Page 30: 第 5 章  陣列與字串

30

矩陣相加

矩陣相加的程式,首先必須兩者的列數與行數都相等,而相加後矩陣的列數與行數也是相同。例如: Amxn+Bmxn=Cmxn

Page 31: 第 5 章  陣列與字串

31

矩陣相加的程式實作: CH05_10

設計一程式,宣告 3 個二維陣列來實作矩陣相加的過程,並顯示兩矩陣相加後的結果。

Page 32: 第 5 章  陣列與字串

32

字串反轉功能程式實作: CH05_11

設計一程式,可以將使用者所輸入的字串反轉輸出。

計算輸入的字串長度,再使用 for迴圈由字元陣列後端往前讀取陣列元素,不過不可使用 C 的庫存函數。

Page 33: 第 5 章  陣列與字串

33

字串比較功能程式實作: CH05_12

設計一程式,能夠事先檢查兩個字串長度是否相等,如果不相等,字串自然不同,如果長度相等,再比較字串中每個字元是否相同。