C Arrays

Size: px
Start display at page:

Download "C Arrays"

Transcription

1

2

3

4 本章將介紹資料結構中的重要主題 陣列 (Arrays) 是由相同型別的相關資料項所組成的資料結構 在第十章當中, 我們會討論 C 的 struct( 結構 )- 它可能是由不同型別的相關資料項所組成的資料結構 陣列和結構都屬於 靜態 的資料結構, 它們在程式執行期間的大小並不會改變 十二章介紹的是動態資料結構, 例如串列 佇列 堆疊和樹, 它們都可以在程式執行期間改變大小

5 陣列是一群具有相同名稱以及相同型別的記憶體位置 若要引用陣列的某個位置或元素, 我們必須指定陣列名稱, 以及此元素在陣列中的位置編號 (position number) 圖 6.1 表示一個稱為 c 的整數陣列 這個陣列含有 12 個元素 (elements) 我們可以使用陣列名稱, 並且在後面接著一個放有位置編號的中括號 ([]), 來引用任何一個元素

6 每個陣列中的第一個元素均是第零個元素 (zeroth element) 所以陣列 c 的第一個元素是 c[0], 第二個元素稱是 c[1], 第七個元素稱為 c[6], 用一般化的表示式來說, 陣列 c 當中的第 i 個元素是 c[i - 1]. 陣列名稱如同其它變數一樣, 只能夠使用字母 數字和底線, 但是陣列名稱的第一個字母不能夠以數字開頭 中括號中的位置編號正式名稱為下標 (subscript) 或索引 (index) 下標必須是整數或是整數運算式

7 如果在程式中使用運算式當作下標, 就會以此運算式運算之後的值當作下標值 例如, 假設 a=5, b=6 底下的敘述式 c[ a + b ] += 2; 將會為陣列中的元素 c[11] 加上 2 請注意, 具有下標的陣列名稱是一個左值 (lvalue) - 它可以用於指定運算子的左邊

8 讓我們更進一步地檢視圖 6.1 的陣列 此陣列的名稱 (name) 是 c 它的 12 個元素分別是 c[0], c[1], c[2],...,c[11] c[0] 的值 (value) 是 -45,c[1] 的值是 6,c[2] 的值是 0,c[7] 的值是 62,c[11] 的值是 78 若我們想印出陣列 c 前三個元素所含之值的總和, 可以撰寫以下的敘述式 : printf( "%d", c[ 0 ] + c[ 1 ] + c[ 2 ] ); 若想將陣列 c 的第七個元素除以 2, 並將結果設給變數 x, 可以寫成

9

10

11 用來圈住陣列下標的中括號事實上被認為是 C 的運算子 它們的運算優先順序和函式呼叫運算子 ( 也就是放在函式後面, 用來呼叫函式的括號 ) 相同 圖 6.2 列出截至目前為止, 我們所介紹過的運算子的運算優先順序和結合性

12

13 陣列會佔用記憶體空間 你會指定每個陣列所需要的元素型別和元素個數, 電腦會依此來預留適當大小的記憶體空間 若要告訴電腦為具有 12 個元素的整數陣列 c 預留空間, 你可以使用以下的定義 : int c[ 12 ];

14 以下的定義 int b[ 100 ], x[ 27 ]; 為整數陣列 b 預留 100 個元素的位置, 以及為整數陣列 x 預留 27 個元素的位置 陣列還可以儲存別種資料型別 字元字串及他們與陣列之間的相似之處, 將於第八章討論 而指標與陣列之間的關係, 則會在第七章中討論

15 圖 6.3 的程式使用了一個 for 敘述式, 將 10 個元素的整數陣列 n 的所有元素的初始值設定為零, 並且以表列的方式印出這個陣列的內容 第一個 printf 敘述式 ( 第 16 行 ) 印出兩個欄位的標題, 著由 for 敘述式印出這兩個欄位的內容

16

17

18 陣列中的元素也可以在陣列宣告時就指定初始值, 其方式就是在宣告之後加上一個等號和大括號包住的一串初始值 (initializers) 串列 圖 6.4 的程式便是在宣告時為陣列設了 10 個初始值 ( 第 9 列 ), 並以表列的方式印出這個陣列的內容

19

20

21 如果給定的初始值的個數小於陣列的元素個數, 則剩下的元素將自動指定初始值為零 例如, 圖 6.3 中陣列 n 的元素在下列的宣告後也會全部指定初始值為零 : int n[ 10 ] = { 0 }; 這個定義明確為第一個元素指定初始值零, 並且也自動為其餘的 9 個元素指定初始值零, 因為初始值的個數少於陣列的元素個數

22 陣列並不會自動地將初始值設定為零 你必須至少將第一個元素的初始值設定為零, 剩下的元素才會自動設定為零 這種把陣列初始化為零的方法, 如果應用在 static 陣列時, 會在編譯時期完成 ; 如果應用在自動陣列中, 則會在執行期間完成

23

24 以下的陣列定義 int n[ 5 ] = { 32, 27, 64, 18, 95, 14 }; 將會造成一個語法錯誤, 因為初始值的數目會比陣列的元素個數還多

25

26 如果在一個有初始值串列的定義上省略陣列的大小, 則此陣列的元素個數將等於初始值串列上的元素個數 例如, int n[] = { 1, 2, 3, 4, 5 }; 將會產生一個具有 5 個元素的陣列

27 圖 6.5 的程式將 10 元素的陣列 s 的元素指定初始值為 2, 4, 6,...,20, 並且以表列的方式印出這個陣列的內容 陣列元素的數值會以迴圈計數器乘以 2 再加上 2 而得到

28

29

30 本程式使用了 #define 前置處理器命令 第 4 行 #define SIZE 10 定義了一個符號常數 (symbolic constant) SIZE, 其值為 10 符號常數是一個識別字, 它會在程式編譯之前, 由 C 的前置處理器將它代換成代換文字 (replacement text)

31 當程式進行前置處理時, 所有出現符號常數的位置都會代換成代換文字 10 利用符號常數來指定陣列的大小, 將可以使程式更具擴充性 (scalable) 我們可以將圖 6.5 #define 命令列中 SIZE 的定義從 10 改為 1000, 以便讓第一個 for 迴圈 ( 第 13 列 ) 為 1000 個元素的陣列填入數值 如果沒有使用符號常數 SIZE, 我們必須修改程式的三個位置, 才能夠將程式變成處理 1000 個元素的陣列

32

33 如果程式當中第 4 行的 #define 前置處理器命令之後加上分號的話, 則程式中所有出現符號常數 SIZE 的位置都會被前置處理器代換成文字 10; 這在編譯時期將會造成語法錯誤, 或在執行時期造成邏輯錯誤

34

35

36

37

38 圖 6.6 的程式將 12 元素的整數陣列 a 的所有內含值進行加總 for 迴圈本體內的敘述式 ( 第 16 列 ) 為我們做了這件事

39

40 我們的下一個例子利用陣列來分析整理某項調查中所收集的資料 請看以下的問題描述 要求 40 位學生對學生自助餐廳的食物打分數, 分數為 1 分到 10 分 (1 代表很差,10 代表非常好 ) 請將這 40 份回應放到一個整數陣列中, 並且整理此項調查的結果 這是一種典型的陣列應用 ( 見圖 6.7) 我們希望整理出每一種回應 (1 到 10) 的數量

41 陣列 responses ( 第 17 列 ) 是個含有 40 個元素的陣列, 它會用來存放學生們的回應 我們另外使用一個 11 個元素的陣列 frequency ( 第 14 列 ) 來計算每種回應的次數 但是我們捨棄第一個元素 ( 亦即 frequency[0]) 不用, 因為用 frequency[1] 來代表反應 1 的次數較合乎邏輯 這會允許我們直接使用每個回應當作 frequency 陣列的下標

42

43

44

45

46

47 for 迴圈 ( 第 24 列 ) 從 responses 陣列中一次取出一個回應, 然後將 frequency 陣列中的 10 個計數器 (frequency[1] 到 frequency[10]) 中的某一個遞增 1 迴圈中的關鍵敘述式是 ( 第 25 列 ) ++frequency[ responses[ answer ] ]; 此敘述式會根據 response[answer] 的值來遞增適當的 frequency 計數器

48 當 answer 為 0,responses[answer] 為 1 時, ++frequency[responses[answer]]; 將解釋成 ++frequency[ 1 ]; 它會將陣列元素 1 遞增 當 answer 為 1,responses[answer] 為 2 時, ++frequency[responses[answer]]; 將解釋成 ++frequency[ 2 ]; 它會將陣列元素 2 遞增

49 當 answer 為 2,responses[answer] 為 6 時, ++frequency[responses[answer]]; 將解釋成 ++frequency[ 6 ]; 會將陣列元素 6 遞增, 依此類推 請注意, 不論在這項調查中有多少個回應, 都只需要一個 11 元素的陣列 ( 元素 0 不用 ) 來整理調查的結果 但如果資料中含有不合法的數值, 例如 13, 則程式會嚐試為 frequency[13] 加 1 而這已超出陣列的範圍

50 C 並不會進行陣列範圍檢查, 來防止程式存取到一個不存在的元素 因此, 執行中的程式可能會超出陣列的界線而不自知 所以你必須能夠確保所有的陣列的存取都在陣列的範圍內

51

52

53

54 我們的下一個例子 ( 參閱圖 6.8) 會從陣列讀取數值, 然後將這些資訊以長條圖 (histogram) 印出來 - 先印出每個數字, 然後再根據其大小印出相同數目的星號 程式中的巢狀 for 迴圈會負責印出這些長條圖 ( 第 20 列 ) 此外, 我們使用 printf( \n ) 來結束每個長條圖的列印 ( 第 24 列 )

55

56

57 投擲一個六面的骰子 6000 次, 來驗證亂數產生器是否真的可以產生亂數 現在我們就將該程式改寫成陣列版本, 結果如圖 6.9 所示

58

59

60 現在讓我們來討論使用字元陣列來存放字串 在此之前, 唯一介紹過的字串處理能力就是以 printf 輸出一個字串 而對 C 而言, 字串 ( 如 "hello") 的是一個存放各個字元的陣列 字元陣列可以使用字串常數來指定初始值 例如, char string1[] = "first"; 會將陣列 string1 的元素初始值設定為字串常數 "first" 中的各個字元

61 上述宣告中陣列 string1 的大小, 將由編譯器根據字串的長度來加以決定 字串 first 包含五個字元加上一個稱為空字元 (null character) 的字串終止字元 因此, 陣列 string1 實際上含有 6 個元素 空字元的字元常數表示法為 '\0' C 的所有字串都會以此字元做為結束 用來表示字串的字元陣列, 其宣告的大小應該要能夠放入字串的字元以及結束的空字元 字元陣列也可以用初始值串列中的個別字元常數, 來指定初始值

62 以下的宣告和前面的宣告是相同的 char string1[] = { 'f', 'i', 'r', 's', 't', '\0' }; 因為字串實際上是字元所組成的陣列, 所以我們可以使用陣列下標記號來直接存取字串當中各別的字元 例如,string1[0] 是字元 'f', 而 string1[3] 則是字元 's' 我們可以用 scanf 及轉換指定詞 %s, 直接從鍵盤輸入一個字串到字元陣列中

63 例如, char string2[ 20 ]; 產生了一個能夠存放 19 個字元加上一個結束空字元的字元陣列 敘述式 scanf( "%s", string2 ); 則會從鍵盤讀入一個字串到 string2 當中 字元陣列的名稱並沒有像其它變數一樣, 要加上 & 才能夠傳給 scanf & 通常會用來提供 scanf 有關變數在記憶體中的位置, 讓 scanf 能夠將讀入的數值放到該位置

64 我們將在第 6.5 節討論傳遞陣列給函式的問題 屆時我們將可以看到, 陣列名稱代表陣列的起始位址, 因此便不需要使用 & scanf 函式將會一直讀入字元, 直到遇上了空白 tab 新行 或 end-of-file 指示器為止 字串不應該大於 19 個字元, 我們必須留一個位置給結束的空字元 假如使用者鍵入了 20 個以上的字元, 你的程式可能會當掉! 因此, 請使用轉換指定詞 %19s, 如此 scanf 就不會將超過陣列末端的字元寫入記憶體

65 使字元陣列能夠放得下由鍵盤所讀入之字串是你的責任 scanf 函式會一直由鍵盤上讀入字元, 直到遇到第一個空白字元為止 - 它不會檢查陣列的大小 所以 scanf 可能會將資料寫到陣列的範圍以外

66

67 一個代表字串的字元陣列, 可以用 printf 和轉換指定詞 %s 來加以輸出 上述的陣列 string2 可以用以下的敘述式印出 printf( "%s\n", string2 ); 如同 scanf,printf 也不會檢查字元陣列到底有多大 它會一直列印此陣列的字元, 直到遇到結束的空字元為止

68 圖 6.10 的程式示範以字串常數來為字元陣列指定初始值, 讀入一個字串到字元陣列中, 以字串的方式印出一個字元陣列, 以及存取字串中的各別字元等

69

70

71 圖 6.10 使用一個 for 敘述式 ( 第 22 列 ) 來走訪 string1 陣列, 並且用轉換指定詞 %c 將每個字元以空白區隔印出 for 敘述式中的條件 string1[i]!= '\0', 在尚未遇到代表字串結束的空字元之前, 將會一直為真

72 static 區域變數在程式執行期間會一直存在, 但只有在此函式的本體內才能夠使用它 我們可以將 static 用於一個區域陣列的定義上, 這樣陣列就不會在每次函式呼叫時產生以及指定初始值, 也不會在每次離開這個函式時加以清除 這樣子可以減少程式的執行時間, 特別是經常呼叫含有大型陣列函式的程式

73

74 宣告成 static 的陣列會自動在編譯時期進行初始化 假如你沒有明確地為 static 陣列設定初值, 編譯器就會將陣列元素的初始值設定為零 圖 6.11 的程式示範含有宣告 static 區域陣列 ( 第 22 列 ) 的 staticarrayinit 函式 ( 第 25 列 ), 以及含有自動區域陣列 ArrayInit ( 第 44 列 ) 的 automaticarrayinit 函式 ( 第 47 列 ) 其中呼叫兩次 staticarrayinit 函式 ( 第 12 和 16 列 ) 此函式中的 static 區域陣列的初始值被編譯器設為零 ( 第 25 列 ) 此陣列會先印出這個陣列的內容, 接著為每個元素加上 5, 然後再印出一次陣列的內容

75 當這個函式第二次呼叫時,static 陣列仍保有上一次呼叫後的數值 它也呼叫兩次 automaticarrayinit 函式 ( 第 13 和 17 列 ) 函式中的自動區域陣列的元素的初始值會設定為 1, 2, 3 ( 第 47 行 ) 此陣列會先印出這個陣列的內容, 接著為每個元素加上 5, 然後再印出一次陣列的內容 第二次呼叫函式時, 因為此陣列具有自動儲存佔用期間, 所以陣列元素的初始值會指定為 1, 2, 3

76

77

78

79

80

81 若我們想傳遞陣列引數給某個函式的話, 只需要指定陣列名稱即可, 不必加任何的中括號 例如, 若陣列 hourlytemperatures 的宣告定義為 int hourlytemperatures[ 24 ]; the function call modifyarray( hourlytemperatures, 24 ) 會傳遞陣列 hourlytemperatures 和其大小給函式 modifyarray

82 和內含字串的 char 陣列不同, 其它形式的陣列並沒有特殊的結束字元 因為這個原因, 當傳遞一個陣列給函式時, 程式通常也會將陣列的大小一起傳給函式, 使函式能夠正確處理元素的數量 C 會自動以傳參考的方式, 來將陣列傳給函式 被呼叫的函式能夠更改位於呼叫者內的原始陣列 陣列的名稱實際上是此陣列第一個元素的位址 因為我們傳遞了陣列的起始位址, 所以被呼叫函式即可得知儲存這個陣列的位置

83 所以當被呼叫函式在其函式本體內更改陣列的元素時, 它便會更改到陣列的真正元素所在的原始記憶體位置 圖 6.12 的程式利用 %p 轉換指定詞 ( 一個用來列印位址的特殊轉換指定詞 ) 印出 array,&array[0] 和 &array, 來驗證陣列名稱確實是此陣列第一個元素所在的位址 %p 轉換指定詞通常會將位址以十六進制數的形式印出來

84 十六進制數 ( 基底為 16) 是由數元 0 到 9, 以及字母 A 到 F ( 相當於十進制的 10-15) 所組成 附錄 C 將針對二進制 ( 基底為 2) 八進制 ( 基底為 8) 十進制 ( 基底為 10; 標準整數 ) 和十六進制的整數, 進行介紹和比較 這個程式的輸出結果顯示,array 和 &array[0] 的值都是 0012FF78

85

86

87 雖然整個陣列會以傳參考呼叫的方式來進行傳遞, 不過各別的陣列元素卻與簡單的變數一樣, 會以傳值呼叫來進行傳遞 這種單一而簡單的資料項 ( 例如各別的整數 浮點數以及字元 ) 稱為純量 (scalar) 若我們想傳陣列中的某元素給一個函式, 可以用這個元素的下標名稱當做此函式呼叫的引數 我們將在第 7 章介紹如何以純量 ( 亦即各別的變數和陣列元素 ) 來模擬傳參考呼叫

88

89 函式若想經由函式呼叫來接收一個陣列, 則此函式的參數列中必須指明它將希望接收一個陣列 例如, 函式 modifyarray ( 本節中較前面的函式呼叫 ) 的標頭可以寫成 void modifyarray( int b[], int size ) 這表示 modifyarray 函式希望以參數 b 接收一個整數陣列, 以及以參數 size 接收此陣列的元素個數 在陣列的中括號裡不需要指定陣列的大小

90 如果指定了大小, 則編譯器會檢查它是否大於零, 然後省略它 指定一個負的大小會造成編譯錯誤 由於陣列會自動模擬成傳參考呼叫來進行傳遞, 因此當被呼叫函式使用陣列名稱 b 時, 實際上會引用呼叫函式的原始陣列 ( 在上述呼叫中是引用陣列 hourlytemperatures) 圖 6.13 的程式示範傳遞整個陣列和傳遞一個陣列元素之間的差異 此程式首先會印出整數陣列 a 的 5 個元素 ( 第 行 )

91 接著 a 和它的大小會傳遞給函式 modifyarray ( 第 27 列 ), 將 a 的每個元素都乘上 2 ( 第 列 ) 然後回到 main 再印出 a 的內容 ( 第 行 ) 如同輸出所示,a 的元素確實由 modifyarray 改變了 接下來, 程式會印出 a[3] 的數值 ( 第 38 列 ), 並且將 a[3] 傳給函式 modifyelement ( 第 40 列 ) 此函式會為它的引數乘上 2 ( 第 64 列 ), 並印出運算後的新值 然而當回到 main 後再印出一次 a[3] 的數值 ( 第 43 列 ), 我們發現它並沒有改變 因為各別的陣列元素會以傳值呼叫來進行傳遞

92

93

94

95

96 在很多種狀況下, 你的程式不可以用來更改陣列中的元素 但由於陣列會以模擬的傳參考呼叫來傳遞, 因此你很難控制呼叫函式不去更改陣列的值 C 提供一種特殊的型別修飾詞 const 來避免呼叫函式更改陣列的值 當一個陣列參數前面加上 const 修飾詞之後, 陣列的元素在函式的本體當中會成為常數, 所以在函式本體內任何試圖更改陣列之值的動作, 都會造成編譯時期的錯誤 這讓你能夠修正程式, 以確保陣列元素不會受到更動

97 圖 6.14 解釋 const 修飾詞的用法 函式 trytomodifyarray( 第 20 列 ) 和參數 const int 一起定義, 這項定義指出陣列 b 為常數, 並且不能夠更改 輸出的結果是編譯器所產生的錯誤訊息 - 使用不同的系統會產生不同的錯誤結果 此函式中試圖修改陣列元素的三個敘述式, 都會造成編譯錯誤 l-value specifies a const object.

98

99

100

101 排序 (Sorting) 資料 ( 也就是照特定的順序放置資料, 例如遞增或遞減順序 ) 是電腦最重要的應用之一 在本章中, 我們將討論最簡單的排序技術 而我們將在第十二章和附錄 F 中, 再介紹一些較複雜但效率較好的排序技術

102

103 圖 6.15 的程式以遞增順序, 為擁有 10 個元素的陣列 a ( 第 10 列 ) 中的所有元素值進行排序 我們所使用的技術稱為氣泡排序 (bubble sort 或 sinking sort), 因為較小的數值將會如氣泡浮出水面一樣, 慢慢地上升至陣列的頂點, 而較大的數值則會沉到陣列的尾端 這個技巧會對陣列處理數個回合 在每一回合當中, 將會比較相鄰的一對元素 如果此對元素為遞增順序 ( 或相等 ) 的話, 則將他們維持現狀 如果這對元素為遞減順序的話, 便將他們的值對調過來

104

105

106

107 此程式首先比較 a[0] 和 a[1], 然後比較 a[1] 和 a[2], 然後比較 a[2] 和 a[3], 然後一直持續下去, 直到比較完 a[8] 和 a[9] 才結束這一回合 注意到雖然有 10 個元素, 但只有執行 9 次比較 由於採用的是相鄰比較法, 因此在一個回合中, 一個大的數可能會往後移動數個位置, 但小的數卻可能只往前移一個位置 在第一回合裡, 最大的數保證會移到陣列的最底部, 即 a[9]

108 在第二回合裡, 次大的數保證會沈到 a[8] 而在第九回合裡, 第九大的數即可保證沈到 a[1] 而此時剩下的最小的值恰好在 a[0] 裡 因此, 雖然這個陣列含有 10 個元素, 但只需 9 個回合便能將之排序完成 排序的動作是由巢狀的 for 迴圈來執行的 ( 第 行 )

109 如果需要對調的話, 將由下列三個指定動作來進行 hold = a[ i ]; a[ i ] = a[ i + 1 ]; a[ i + 1 ] = hold; 其中額外的變數 hold, 會用來暫時存放對調的兩個數當中的一個 對調動作不能只用以下的兩個指定動作來進行 a[ i ] = a[ i + 1 ]; a[ i + 1 ] = a[ i ];

110 例如, 若 a[i] 為 7,a[i + 1] 為 5 的話, 在第一個指定動作之後, 這兩個值都將變為 5, 而 7 則漏失了 因此需要一個額外的變數 hold 氣泡排序的優點是它很容易撰寫 但氣泡排序執行得相當慢, 因為每次的交換只能朝元素的最終位置前進一步 尤其是在排序很大的陣列時 在習題中, 我們將發展出一種較有效率的氣泡排序法 一些遠比氣泡排序法有效率的排序方法已經發展出來了

111 電腦常會用來進行調查資料分析 (survey data analysis), 也就是用來編輯分析測驗和民意調查的結果 圖 6.16 使用陣列 response 來初始化 99 個調查的回應 每個回應都是範圍介於 1 到 9 之間的數字 這個程式會計算 99 個數值的平均數 中位數和眾數 平均數是這 99 個數值的算術平均數 函式 mean ( 第 40 列 ) 會將這 99 個元素加起來再除 99 來求出平均值 中位數是 位在中間的值

112 中位數是中間的值 函式 mefian ( 第 61 列 ) 呼叫 bubblesort ( 定義在第 133 列 ) 來對回應的陣列進行遞增排序, 然後從已排序的元素當中選出中間的元素 answer[size / 2] 要注意當有偶數個元素的時候, 中位數是由兩個中間數的平均算出 不過 median 函式目前並不提供此項功能 此外, 程式會呼叫 printarray( 第 156 列 ) 函式來印出 response 陣列 眾數是這 99 個反應中出現頻率最高的數值

113 函式 mode ( 第 82 行 ) 會對每種類型的回應執行計數的動作, 並且以此來決定眾數, 它會選出最大的計數值 目前這一版本的 mode 函式並沒有處理相等的狀況 ( 見習題 7.14) 函式 mode 也產生長條圖, 它可以以圖形化來輔助眾數的決定 圖 6.17 顯示此程式的執行結果

114

115

116

117

118

119

120

121

122

123

124 有時候可能需要知道陣列中是否有一個符合某個關鍵值 (key value) 的數值 找出陣列中某個元素的過程稱為搜尋 (searching) 本節將為您介紹兩種搜尋的技術 - 最簡單的線性搜尋 (linear search) 和較有效率 ( 也較複雜 ) 的二元搜尋 (binary search)

125 線性搜尋 ( 見圖 6.18) 用搜尋關鍵值 (search key) 來比較陣列中的每個元素 由於陣列中並沒有任何特別的順序, 所以有可能在第一次比較就找到, 也有可能要到最後一個元素才能找到 平均上, 程式需要一半的陣列元素來與搜尋鍵比較

126

127

128

129

130 對於小型的陣列或未排序過的陣列而言, 線性搜尋可以表現的很好 但是將線性搜尋用在大型陣列上, 就很沒有效率了 如果陣列已經排序過了, 則我們可以用速度很快的二元搜尋法 二元搜尋演算法在每次比較之後, 就可以將已排序陣列中一半的元素刪去不考慮 此演算法先找出陣列的中間元素, 將之與搜尋關鍵值作比較

131 如果相等的話, 表示已找到要找的元素, 就將此元素的陣列下標傳回 如果不相等, 此時問題便簡化成只需搜尋陣列的某一半 如果搜尋的關鍵值小於陣列的中間元素, 就搜尋陣列的前半部 ; 否則就會搜尋陣列的後半部 假如在指定的子陣列 ( 原始陣列的一部分 ) 當中找不到搜尋的關鍵值, 演算法就會搜尋原始陣列的四分之一

132 搜尋的動作會一直持續到搜尋關鍵值等於子陣列的中間元素為止, 或是子陣列只包含一個與搜尋關鍵值不相等的元素為止 ( 也就是沒有找到搜尋關鍵值 ) 在最壞的情形之下, 使用二元搜尋來搜尋 1023 個元素的陣列只需 10 次比較 重複將 1024 除以 2 將會得到 516, 256, 128,64, 32, 16, 8, 4, 2, 1 等數值 即 1024(210) 只要除以 2 十次, 便可得到 1 除以 2 的動作相當於二元搜尋的比較動作

133 一個具有 (220) 個元素的陣列, 最多需要進行 20 次的比較, 就能找到搜尋關鍵值 而一個具有十億個元素的陣列, 最多也只需要 30 次比較便能找到搜尋關鍵值 這比起線性搜尋, 有了大幅的效能改進, 線性搜尋需要的比較次數平均為陣列元素個數的一半 對一個具有十億個元素的陣列來說, 平均要比較 5 億次, 與最多比較 30 次相比, 其差別是很大的

134 任何一個陣列的最大比較次數, 可以由大於此陣列元素個數的第一個 2 的次方數來加以決定 圖 6.19 的程式為 binarysearch 函式的迭代版本 ( 第 行 ) 此函式 ( 定義在第 32 列 ) 接收四個引數 - 要搜尋的一個整數陣列 b, 一個整數 searchkey, 陣列的 low 下標, 和陣列的 high 下標 ( 這些定義了陣列要搜尋的部分 ) 如果搜尋關鍵值不等於子陣列的中間元素, 則 low 下標或 high 下標將會受到更改, 所以它能夠繼續搜尋較小範圍的子陣列

135 如果搜尋關鍵值小於中間的元素, 下標 high 將設定為 middle-1, 接下來程式會繼續搜尋 low 到 middle-1 的元素 如果搜尋關鍵值大於中間的元素, 則下標 low 將會設定為 middle+1, 接下來程式會繼續搜尋 middle+1 至 high 之間的元素 這個程式使用 15 個元素的陣列 第一個大於 15 的 2 的次方數是 16(24), 因此最多只需要 4 次便能找到搜尋鍵

136 這個程式使用 printheader 函式 ( 第 列 ) 來輸出陣列下標, 並且使用 printrow 函式 ( 第 列 ) 在二元搜尋的過程當中輸出每個子陣列 每個子陣列的中間元素都會標上星號 (*), 來表示此元素將與搜尋鍵進行比較

137

138

139

140

141

142

143

144 C 語言的陣列可以有多重下標 多重下標陣列 ( 又稱多維陣列 ) 經常會用來表示表格 (tables), 其數值是依照列 (rows) 和行 (columns) 排列的資料所組成 為了指出特定的表格元素, 我們必須指定兩個下標 : 一般而言, 第一個下標會指定元素的列數, 第二個下標則會指定元素的行數 使用兩個下標來指定某個特定元素的陣列, 稱為二維陣列

145 多重下標陣列能夠有兩個以上的索引 圖 6.20 示範一個二維陣列 a 這個陣列包含三列以及四行, 因此它稱為 3x4 的陣列 更一般地來說, 一個有 m 列和 n 行的陣列就稱為 mxn 陣列 (m-by-n array)

146

147 在圖 6.20 中, 陣列 a 的每個元素都可以用 a[i][j] 的方式來加以指定, 其中 a 是陣列名稱, 而 i 和 j 則會用來指出 a 的每個元素的下標 第一列所有元素名稱的第一個下標都是 0; 而第四行所有元素名稱的第二個下標都是 3

148

149 多維陣列可以和一維陣列一樣, 在宣告時指定其初始值 例如, 二維陣列 b[2][2] 可以用以下的方式來宣告並且指定初始值 : int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } }; 這些數值會以列為單位, 並且用大括號括起來 第一個括號的值會初始化第 0 列, 第二個括號的值會初始化第 1 列 所以 1 和 2 分別會初始化 b[0][0] 和 b[0][1] 3 和 4 分別初始化 b[1][0] 和 b[1][1]

150 如果某一列的初始值個數不夠的話, 則此列剩下的元素會將初始值設定為零 因此, int b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } }; 會將 b[0][0] 初始化成 1 b[0][1] 初始化成 0 b[1][0] 初始化成 3 b[1][1] 初始化成 4

151 圖 6.21 表示定義和初始化二維陣列 這個程式定義了三個陣列, 每個陣列都有兩列和三行 ( 也就是每個陣列有六個元素 ) array1 的定義 ( 第 11 列 ) 提供了 6 個初始值 ( 分別放在兩個子串列中 ) 第一個子串列會將陣列的第一列 ( 也就是第 0 列 ) 初始值設定為 1, 2, 3; 第二個子串列則會將陣列的第二列 ( 也就是第 1 列 ) 初始值設定為 4, 5, 6

152

153

154

155 如果從 array1 的初始值串列當中移除每個子串列的大括號, 則編譯器會先用這些數值來為第一列指定初始值, 接著再為第二列指定初始值 array2 ( 第 12 列 ) 的定義提供 5 個初始值 這 5 個初始值會先指定給第一列, 然後再指定給第二列 所有沒有明確初始值的元素都會自動設定為零, 因此 array2[1][2] 的初始值將為零 Array3 ( 第 13 列 ) 的宣告提供了 3 個初始值 ( 分別放在兩個子串列中 )

156 給第一列的子串列將第一列的前兩個元素設定為 1 和 2, 第 3 個元素則自動設定為零 給第二列的子串列則只將第一個元素設定為 4, 而剩下的兩個元素也自動設定為零 這個程式呼叫了 printarray 函式 ( 第 列 ) 來印出每一個陣列的元素 此陣列的定義將陣列參數指定為 const int a[][3] 當我們在接收一維陣列做為函式的引數時, 函式參數串列的陣列括號是空的

157 而多維陣列的第一個下標也不需指定, 但其他的下標則都是必須的 編譯器將利用這些下標, 來判斷多維陣列的元素位於記憶體中的什麼位置 不論是幾維的陣列, 所有的陣列元素都是連續的存放在記憶體中的 對二維陣列來說, 元素存放在記憶體中的順序是第一列之後跟隨著第二列 在參數宣告時提供下標值, 可以讓編譯器告訴這個函式如何找到陣列中的某個元素

158 在二維陣列中, 每一列基本上都是一個一維陣列 若想找到某一列的某個元素, 編譯器必須知道每一列到底有多少個元素, 這樣子它才可以算出總共要跳過多少個元素, 才能夠找到所要的元素 因此, 當我們的例子在存取 a[1][2] 時, 編譯器便知道要跳過第一列的 3 個元素, 找到第二列 ( 即列 1) 然後編譯器才會存取此列的第三個元素 ( 即元素 2)

159 許多常見的陣列處理都會使用 for 重複敘述式 例如, 下面的敘述式會將圖 6.20 中的陣列 a 的第三列所有元素, 均設定為零 for ( column = 0; column <= 3; column++ ) { a[ 2 ][ column ] = 0; } 由於我們指定對第三列操作, 因此第一個下標應該都是 2 (0 是第一列,1 是第二列 )

160 這個迴圈只改變第二個下標 ( 即行 ) 上述的 for 敘述式和下列的指定敘述式是相同的 a[ 2 ][ 0 ] = 0; a[ 2 ][ 1 ] = 0; a[ 2 ][ 2 ] = 0; a[ 2 ][ 3 ] = 0;

161 底下的巢狀 for 敘述式則計算了陣列 a 所有元素的總和 total = 0; for ( row = 0; row <= 2; row++ ) { for ( column = 0; column <= 3; column++ ) { total += a[ row ][ column ]; } } 這個 for 敘述式一次一列地來計算此陣列元素的總和

162 外層的 for 敘述式先將 row ( 即列下標 ) 設定為零, 所以內層的 for 敘述式便計算第一列的總和 接著外層 for 敘述式將 row 遞增成 1, 將第二列的元素加到總和裡 最後, 外層 for 敘述式會將 row 遞增成 2, 因此第三列的元素也會加到總和 當巢狀的 for 敘述式結束時, 程式就會列印出結果

163 圖 6.22 的程式使用 for 敘述式對一個 3x4 的陣列 studentgrades 執行幾種其他常見的陣列處理 陣列的每一列代表一個學生, 而每一行則代表學生四次考試成績中的其中一次 陣列的處理是由四個函式來加以執行 函式 minimum ( 第 行 ) 會找出所有學生在本學期中的最差成績

164 函式 maximum ( 第 行 ) 會找出所有學生在本學期中的最高成績 函式 average ( 第 行 ) 會算出某位學生本學期的平均成績 函式 printarray ( 第 行 ) 會以表列的方式清楚印出這個二維陣列.

165

166

167

168

169

170

171

172 函式 minimum, maximum 和 printarray 接收了三個引數 -studentgrades 陣列 ( 在每個函式裡都稱為 grades), 學生的人數 ( 亦即陣列的列數 ) 以及考試的次數 ( 亦即陣列的行數 ) 這三個函式都使用巢狀的 for 敘述式來走訪 grades 陣列

173 以下的巢狀 for 敘述式是取自 minimum 函式的定義 : /* loop through rows of grades */ for ( i = 0; i < pupils; i++ ) { /* loop through columns of grades */ for ( j = 0; j < tests; j++ ) { if ( grades[ i ][ j ] < lowgrade ) { lowgrade = grades[ i ][ j ]; } /* end if */ } /* end inner for */ } /* end outer for */

174 外層的 for 敘述式開始時會將 I ( 即列下標 ) 設定為 0, 這使得第一列的元素 ( 第一個學生的成績 ) 可在內層 for 敘述式的本體當中, 與變數 lowgrade 進行比較 內層的 for 敘述式走訪了某列中的四個成績, 並且比較每個成績與 lowgrade 的大小 如果成績小於 lowgrade, 則將 lowgrade 設定為該成績. 接著外層 for 敘述式將 row 的下標遞增成 1, 將第二列的元素加到總和裡

175 接著外層 for 敘述式將 row 的下標遞增成 2, 將第三列的元素加到總和裡 當巢狀結構執行完畢後,lowGrade 便是這個二維陣列中的最差成績了 函式 maximum 的運作類似於 minimum 函式 average ( 第 87 列 ) 有兩個引數 - 一個存放某位學生所有考試成績的一維陣列 ( 稱為 setofgrades), 以及此陣列中的考試成績數目

176 當呼叫 average 時, 第一個傳遞給它的引數是 studentgrades[student] 這將使得二維陣列某一列的位址傳給 average 引數 studentgrades[1] 是此二維陣列第二列的起始位址 二維陣列實際上是由一維陣列所組成的陣列, 而一維陣列的名稱即代表它在記憶體中的位址 函式 average 計算所有陣列元素的總和, 然後將總和除以考試成績的個數, 最後將結果以浮點數傳回

Microsoft PowerPoint - Bronson-v3-ch07.ppt [相容模式]

Microsoft PowerPoint - Bronson-v3-ch07.ppt [相容模式] C++ FOR ENGINEERS AND SCIENTISTS THIRD EDITION Chapter 7 Arrays Objectives 2 In this chapter, you will learn about: One-dimensional arrays 一維陣列 Array initialization 陣列起始化 Declaring and processing two-dimensional

More information

PowerPoint Presentation

PowerPoint Presentation Chapter 6 Arrays ( 陣列 ) 1 Outline 6.1 Introduction 6.2 Arrays 6.3 Declaring Arrays 6.4 Examples Using Arrays 6.5 Passing Arrays to Functions 6.6 Sorting Arrays 6.7 Case Study: Computing Mean, Median and

More information

Microsoft Word - part doc

Microsoft Word - part doc 3 指標與陣列 3-1 指標與一維陣列 3-2 指標與二維陣列 3-3 陣列指標 3-4 為什麼 parr 等同於 *parr? 3-5 指向陣列的指標 3-6 多重指標 3-7 命令列引數 3-8 除錯題 3-9 問題演練 3-10 程式實作 32 Part 1 C 程式語言篇 指標其實就是一位址 陣列的名稱, 表示此陣列第一個元素的位址, 所以它也是指標 由此可知, 指標與陣列的關係是很密切的

More information

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1 0 0 = 1 0 = 0 1 = 0 1 1 = 1 1 = 0 0 = 1 : = {0, 1} : 3 (,, ) = + (,, ) = + + (, ) = + (,,, ) = ( + )( + ) + ( + )( + ) + = + = = + + = + = ( + ) + = + ( + ) () = () ( + ) = + + = ( + )( + ) + = = + 0

More information

Microsoft PowerPoint - STU_C_Lang_CH13.ppt

Microsoft PowerPoint - STU_C_Lang_CH13.ppt 第 13 章 動態配置記憶體 程式設計與生活 - 使用 C 語言 Shi-Huang Chen Spring 2013 第 13 章 動態配置記憶體 13-1 記憶體配置函式 malloc( ) 13-2 動態配置結構陣列 配置記憶體 預估需求數量的範圍是一項不容易的學問 例 : 大到預估今年國家預算, 小到預估櫥窗裡展示的毛線衣, 需要多少磅毛線才能織成 撰寫程式時, 一樣無法預估程式執行所需的記憶體空間

More information

Microsoft PowerPoint - vb_net8

Microsoft PowerPoint - vb_net8 字串與陣列 資訊科技系 林偉川 一維陣列的處理 陣列 (Array) 是一種基本的資料結構, 它是將相同資料型別的變數集合起來, 使用一個名稱代表, 然後使用索引值存取變數的值, 如下圖所示 : 2 1 宣告一維陣列 - 宣告 VB.NET 陣列同樣使用 Dim 指令宣告, 我們可以在宣告時同時指定陣列的尺寸, 一維陣列的宣告語法, 如下所示 : Dim 陣列名稱 ( 最大索引 ) As 資料型別

More information

C Pointers

C Pointers 指標 (pointer) 是 C 程式語言最強大的功能之一, 我們將在本章中討論 指標能讓程式模擬傳參考呼叫, 以及產生和操作動態的資料結構, 亦即在執行時期會增大和減小的資料結構, 如鏈結串列 (linked lists) 佇列 堆疊和樹 第十章將討論使用指標的結構 第十二章則介紹動態記憶體管理 (dynamic memory management) 技術, 以及一些產生和使用動態資料結構的例子

More information

Microsoft PowerPoint - 13_指標、資料傳遞2.pptx

Microsoft PowerPoint - 13_指標、資料傳遞2.pptx 1 2 指標 Lecture 13 指標函式呼叫的資料傳遞 (III) 傳址指標與陣列 Pointer 3 4 指標 / 指位器 (Pointer) 變數 int a; 整數型別, 名稱為 a 變數是為了使用記憶體資源來儲存資料與進行運算 所有的變數都佔有記憶體空間 記憶體 可視為一個很大的一維陣列, 單位是 byte 問題 一個 4KB 的電腦, 其記憶體位置 ( 編號 ) 從 0 至? 4 x

More information

資料結構之C語言重點複習

資料結構之C語言重點複習 鏈結串列自編教材 ( 一 ) 本教材 ( 一 ) 目標問題 : 每次以亂數產生一 [0,1000] 之整數值, 若該值 >100, 則以同方式繼續產生下一亂數值, 若該值

More information

Microsoft PowerPoint - 04-array_pointer.ppt

Microsoft PowerPoint - 04-array_pointer.ppt Array 與 Pointer Array Dynamical Memory Allocation Array( 陣列 ) 陣列是用來存放同樣型態的資料陣列的大小必須在程式中預先設定在程式執行中, 陣列的大小無法改變陣列中的資料是透過索引 (index) 來存取 一維陣列的宣告 type array_name[array_size]; int iarray[100]; /* an integer array

More information

Microsoft Word - ACL chapter02-5ed.docx

Microsoft Word - ACL chapter02-5ed.docx 第 2 章神奇的質數 2.1.1 什麼是質數 1 1 1 打下好基礎 - 程式設計必修的數學思維與邏輯訓練 1 1 0 10 2 3 5 7 4 6 8 9 10 4 10000 1229 1000 168 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131

More information

Microsoft PowerPoint - CH07 Arrays and Vectors [相容模式]

Microsoft PowerPoint - CH07 Arrays and Vectors [相容模式] CH7 陣列與向量 Array and Vectors 課程名稱 : 資管一程式設計任課教師 : 謝明哲單位職稱 : 台東大學資管系副教授電子郵件 :hmz@nttu.edu.tw hmz@nttu.edu.tw 2016 1 Outline 什麼是陣列? 陣列的運用 排序方式 多維陣列 hmz@nttu.edu.tw 2016 2 什麼是陣列? hmz@nttu.edu.tw 2016 3 陣列

More information

!194 課程 大綱 陣列介紹 [P.195] 陣列的使 用 [1] - 多個同型變數 [P.196] 陣列的初始化 [P.198] 陣列的使 用 [2] - 循序存取 [P.199] 陣列的使 用 [3] - 隨機存取 [P.200] 陣列的複製 [P.203] 在函式間傳送陣列 [P.204]

!194 課程 大綱 陣列介紹 [P.195] 陣列的使 用 [1] - 多個同型變數 [P.196] 陣列的初始化 [P.198] 陣列的使 用 [2] - 循序存取 [P.199] 陣列的使 用 [3] - 隨機存取 [P.200] 陣列的複製 [P.203] 在函式間傳送陣列 [P.204] !193 第六講 陣列與字串 講師 : 李根逸 (Ken-Yi Lee), E-mail: feis.tw@gmail.com !194 課程 大綱 陣列介紹 [P.195] 陣列的使 用 [1] - 多個同型變數 [P.196] 陣列的初始化 [P.198] 陣列的使 用 [2] - 循序存取 [P.199] 陣列的使 用 [3] - 隨機存取 [P.200] 陣列的複製 [P.203] 在函式間傳送陣列

More information

Excel VBA Excel Visual Basic for Application

Excel VBA  Excel Visual Basic for Application Excel VBA Jun5,00 Sub 分頁 () Dim i As Integer Dim Cname As String Dim Code As Variant Set score=thisworkbook.sheets("sheet") Code=Array(" 專北一 "," 專北二 "," 專北三 "," 專桃園 "," 專桃竹 "," 專中苗 ", " 專台中 "," 專台南 ","

More information

C 語言—陣列及字串

C 語言—陣列及字串 10/16 系程主講人 : 荊輔翔 概論 陣列 陣列是一個具有索引 (index) 性質的連續資料儲存空間集合 陣列中每一個資料儲存空間稱之為陣列元素 (array element); 它們都具有相同的資料名稱 資料型態 及空間大小 ; 但存取它們時則須藉由索引 ( 或稱註標 ) 來區別辨識 索引代表資料在陣列中的相對位址 ( 其計數由 0 開始, 其餘累加類推 ), 且須由中括號 [ ] 涵蓋之

More information

Microsoft PowerPoint - chap10.ppt

Microsoft PowerPoint - chap10.ppt 陣列 資訊科技系 林偉川 本章簡介 由於一個變數只能存放一個數值, 如果程式需處理大批資料 ( 如學生 員工資料等 ), 就必須宣告許多的變數來存放這些資料, 寫起來非常不便 2 1 本章簡介 程式中要用到 10 個學號, 就要宣告 10 個變數來儲存 : 3 本章簡介 C 語言提供了一種特殊的資料結構 : 陣列 (Array) 宣告一個陣列, 可以取代宣告多個變數, 讓程式更容易撰寫和閱讀 像上述

More information

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00 Excel - - Excel - -4-5 840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00 ( 0 ) 智慧標籤 相關說明提示 -5 -- Excel 4 5 6 7 8 + - * / % ^ = < >= & 9 0 (:) (,) ( ) Chapter - :,

More information

C/C++基礎程式設計班

C/C++基礎程式設計班 C/C++ 基礎程式設計 指標 (Pointer) 講師 : 張傑帆 CSIE, NTU 瘋到自以為能改變世界的人, 就能改變世界 The people who are crazy enough to think they can change the world are the ones who do.-steve Jobs 課程大綱 指標簡介 陣列與指標 動態記憶體配置 指標宣告進階 指標 用途

More information

Microsoft PowerPoint - Class5.pptx

Microsoft PowerPoint - Class5.pptx C++ 程式初探 V 2015 暑期 ver. 1.0.1 C++ 程式語言 大綱 1. 大量檔案讀取 & 計算 2. 指標 3. 動態記憶體 & 動態陣列 4. 標準函式庫 (STL) vector, algorithm 5. 結構與類別 2 大量檔案讀取 & 計算 若目前有一個程式將讀取純文字文件 (.txt) 中的整數, 並將該文件中的整數有小到大排序後, 儲存到另外一個新的純文字件中 假設有

More information

jQuery實戰手冊

jQuery實戰手冊 本章學習目標 1. 讓讀者了解一維 二維及多維陣列的結構及表示方法 2. 讓讀者了解矩陣中常見的各種運算 < 轉置 相加 相乘及稀疏矩陣 > 本章內容 3-1 陣列的觀念 3-2 陣列的宣告與儲存方式 3-3 二維陣列的觀念 3-4 多維陣列的觀念 3-5 陣列在記憶體中的表示法 3-6 多項式 (polynomial) 3-7 矩陣 (Matrices) 3-8 特殊矩陣本章重點整理課後評量 3-1

More information

Microsoft PowerPoint - Class2.pptx

Microsoft PowerPoint - Class2.pptx C++ 程式初探 II 2015 暑期 C++ 程式 II 大綱 1. 變數 2. 運算式 3. 輸出 4. 條件判斷 5. 迴圈 6. 陣列 2 基本變數型態 整數 位元組 浮點數 位元組 字元 位元組 short 2 float 4 char ( 整數 ) 1 int 2 (4) double 8 long 4 (8) long double 8(10) 位元組 整數値域 浮點數値域 準確度 1-128

More information

ACI pdf

ACI pdf 09 9.1 -...9-2 9.1.1...9-2 9.1.2...9-3 9.2 -...9-4 9.2.1 PMT - ()...9-4 9.2.2...9-6 9.3 -...9-8 9.3.1 PMT - ()...9-8 9.4...9-10 9.4.1... 9-11 9.4.2...9-12 9.4.3...9-14 9.5 -...9-17 9.5.1...9-18 1 Excel...9-21

More information

Java 程式設計初階 第 5 章:基本輸出入 & 流程控制

Java 程式設計初階 第 5 章:基本輸出入 & 流程控制 Java 程式設計 標準輸出入與流程控制 本章大綱 標準輸出入 (Standard I/O) 分支 (Branch) if ~ else switch ~ case 迴圈 (Loop) for while do ~ while 中斷指令 break continue 總整理 標準輸出 定義 : 將資料印到螢幕上 Java 標準輸出指令 System.out.println( 資料 ) 將資料印出後換行

More information

Chapter 3 Camera Raw Step negative clarity +25 ] P / Step 4 0 ( 下一頁 ) Camera Raw Chapter 3 089

Chapter 3 Camera Raw Step negative clarity +25 ] P / Step 4 0 ( 下一頁 ) Camera Raw Chapter 3 089 Photoshop CC Camera Raw Photoshop Camera Raw Step 1 3 1 2 3 SCOTT KELBY Step 2 B Camera Raw 088 Chapter 3 Camera Raw Chapter 3 Camera Raw Step 3-4 -100 negative clarity +25 ] P / -75-50 Step 4 0 ( 下一頁

More information

C/C++基礎程式設計班

C/C++基礎程式設計班 C/C++ 基礎程式設計 字元與字串 講師 : 張傑帆 CSIE, NTU 人的出身並不重要, 你拿時間來做什麼才重要 It s not who you were at birth that matters, but what you do with the time you are given.-steve Jobs 課程大綱 字元 字串 作業 字元 在電腦的世界裡, 所有的一切都是以 0 與 1

More information

投影片 1

投影片 1 資料庫管理程式 ( 補充教材 -Part2) 使用 ADO.NET 連結資料庫 ( 自行撰寫程式碼 以實現新增 刪除 修改等功能 ) Private Sub InsertButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InsertButton.Click ' 宣告相關的 Connection

More information

Microsoft PowerPoint - 07b1 Max and Sum.ppt [相容模式]

Microsoft PowerPoint - 07b1 Max and Sum.ppt [相容模式] 找出 n 個數字的最大值 與計算 n 個數字的總和 練習目標 : 1. 簡化題目的要求 2. 漸進式地完成所有的要求 3. 掌握 for 迴圈的應用時機 4. 練習 for 迴圈的語法, 瞭解各部份執行的順序 5. 體會迴圈如何有效運用電腦的運算能力 丁培毅 1 找出 n 個數字裡的最大值 請撰寫一個程式 讀取下列的整數輸入 (n>0) n a 1 a 2 a n 計算並且印出 {a 1, a 2,,

More information

Microsoft PowerPoint - chap3

Microsoft PowerPoint - chap3 第三章基本輸出與輸入的方法 資訊科技系 林偉川 本章簡介 如何從鍵盤輸入資料以及從螢幕輸出結果, 是寫程式一個很基本的技巧, 因為這也是使用者與電腦交談的重要橋樑 在 C 語言函式庫中有不少輸出 / 入相關函式, 不過較常用到的也只有其中幾個 從螢幕輸出類 : 由鍵盤輸入類 : 2 1 從螢幕輸出類 printf(): 函數名稱取 print 以及 format 兩個字組成 此函式會將我們指定的字串以指定的格式輸出在螢幕上

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 9 [P.11] : Dev C++ [P.12] : http://c.feis.tw [P.13] [P.14] [P.15] [P.17] [P.23] Dev C++ [P.24] [P.27] [P.34] C / C++ [P.35] 10 C / C++ C C++ C C++ C++ C ( ) C++

More information

第六章 然而, 當我們建立了一種多重效應的變數陣列時, 你可在單一變數中儲存超過一個以上的值, 陣列的定義方式是在變數名稱後輸入陣列的大小, 因此若我們要定義長度為 10 的字串陣列, 我們可定義如下所示 : Dim s(9) As String 為何我們使用 (9) 而非 (10) 來代表陣列長度

第六章 然而, 當我們建立了一種多重效應的變數陣列時, 你可在單一變數中儲存超過一個以上的值, 陣列的定義方式是在變數名稱後輸入陣列的大小, 因此若我們要定義長度為 10 的字串陣列, 我們可定義如下所示 : Dim s(9) As String 為何我們使用 (9) 而非 (10) 來代表陣列長度 在本章中我們將介紹複雜的資料集使用方法, 我們先從陣列的介紹開始, 陣列是用來收集相似資料, 例如你可以建立朋友姓名的陣列 ( 在本章稍後將會實際建立 ), 然後將會討論如何使用列舉方法, 讓先前定義的資料集可以被使用 ( 避免你輸入錯誤的值 ), 常數將是下一個要介紹的主題, 我們將會介紹它們用常數來改善程式碼的維護性, 然後介紹結構 (structure) 的使用方法 ( 它與類別相類似 ),

More information

Chapter 6 基本的使用者定義函式

Chapter 6  基本的使用者定義函式 基本的使用者定義函式 范洪源 范洪源 函式介紹 的變數傳遞方式 按值傳遞選擇性引數使用共用記憶體分享資料函式呼叫間的資料保存 內建函式 排序與亂數涵式 范洪源 函式介紹 范洪源 檔案的類型 儲存 程式碼的檔案稱為 檔案 副檔名是, 包含 程序檔案或稱底稿檔案 ( ) 它是由一系列宣告式所組成的檔案 執行結果如同把所有的指令直接鍵入指令視窗一樣 任何由程序檔所產生的變數, 都會繼續存留在工作區內而互相影響

More information

AutoCAD 用戶如何使用 ArchiCAD

AutoCAD 用戶如何使用 ArchiCAD AutoCAD 用戶如何使用 ArchiCAD AutoCAD用戶如何使用ArchiCAD ( 中文版 ) 由 Scott MacKenzie, Simon Gilbert, Geoffrey Moore Langdon, David Byrnes, Ralph Grabowski 編寫 龍庭資訊有限公司 1/73 - 2. 3. 4. -

More information

PowerPoint Presentation

PowerPoint Presentation 語法復習 NTU CSIE 張傑帆 整合開發環境 NTU CSIE 張傑帆 C++ 開發工具 整合式開發環境 (Integrated Development Environment) 簡稱 IDE 是整合編輯 編譯 測試 除錯 與執行等功能的程式開發軟體 例如 Borland 公司的 C++ Builder IBM 公司的 VisualAge C++ Microsoft 公司的 Visual C++

More information

Microsoft PowerPoint - 07-overloaded.ppt

Microsoft PowerPoint - 07-overloaded.ppt Overloaded Functions 前言 處理多載函式宣告的規則 處理多載函式呼叫的規則 多載函式與 scope 函式呼叫的議決 前言 C 語言規定 : 函式的名稱不可相同 這樣的規定使得我們必須為功能相近但參數型態相異的函式取不同的名稱, 譬如 : int imax (int, int); double dmax (double, double ); // max function for

More information

jQuery實戰手冊

jQuery實戰手冊 3-4 多維陣列的觀念 當陣列的維度是二維以上時, 就稱為多維陣列 而其中最常見是三維陣列, 其圖形為三度空間的立體圖形, 並且我們可以將三維陣列視為多個二維陣列的組合 Dim 陣列名稱 (L,M,N) As 資料型態 L 代表二維陣列個數 M 代表列數 N 代表行數 Dim Score (2,3,4) As Integer ' 二維陣列的個數 : 0~2 共有 3 個二維陣列 ' 列註標表示範圍

More information

本章內容 2-1 陣列及陣列位址的計算一維陣列位址計算多維陣列位址計算 2-2 一維陣列的基本運算讀取 寫入 複製 輸出 插入資料 刪除 2-3 二維陣列及矩陣的儲存與運算矩陣輸出 矩陣轉置 矩陣相加 矩陣相乘 2-4 字串 ( 字元陣列 ) 計算字串長度 字串複製 字串比較 子字串擷取 2

本章內容 2-1 陣列及陣列位址的計算一維陣列位址計算多維陣列位址計算 2-2 一維陣列的基本運算讀取 寫入 複製 輸出 插入資料 刪除 2-3 二維陣列及矩陣的儲存與運算矩陣輸出 矩陣轉置 矩陣相加 矩陣相乘 2-4 字串 ( 字元陣列 ) 計算字串長度 字串複製 字串比較 子字串擷取 2 第二章 Array 版權屬作者所有, 非經作者同意不得用於教學以外用途 1 本章內容 2-1 陣列及陣列位址的計算一維陣列位址計算多維陣列位址計算 2-2 一維陣列的基本運算讀取 寫入 複製 輸出 插入資料 刪除 2-3 二維陣列及矩陣的儲存與運算矩陣輸出 矩陣轉置 矩陣相加 矩陣相乘 2-4 字串 ( 字元陣列 ) 計算字串長度 字串複製 字串比較 子字串擷取 2 2-1 陣列及陣列位址的計算 陣列

More information

C/C++ - 文件IO

C/C++ - 文件IO C/C++ IO Table of contents 1. 2. 3. 4. 1 C ASCII ASCII ASCII 2 10000 00100111 00010000 31H, 30H, 30H, 30H, 30H 1, 0, 0, 0, 0 ASCII 3 4 5 UNIX ANSI C 5 FILE FILE 6 stdio.h typedef struct { int level ;

More information

Introduction to C Programming

Introduction to C Programming C 語言使得程式設計者能以結構化且有條理的方法來設計程式 本書將簡單介紹 C 程式的設計, 並舉出數個例子來說明 C 語言的一些重要特性 第三和第四章將會介紹 C 的結構化程式設計 (structured programming) 我們從一個簡單的 C 程式開始 第一個例子是列印一行文字 第 1 行和第 2 行 /* Fig. 2.1: fig02_01.c A first program in

More information

Java 程式設計入門

Java 程式設計入門 Java 程式設計入門 講師 : 陳昭源 CISE, NTU August 28, 2005 Outline 變數 Variables 運算子 Operators 運算式 (Expressions) 敘述(Statements) & 程式區塊 (Blocks) 流程控制 Control Flow Statements if-else statements switch statements August

More information

<4D F736F F F696E74202D FB5F8B3A5A142B8EAAEC6B6C7BBBCA142BB50C0C9AED7BEDEA7402E >

<4D F736F F F696E74202D FB5F8B3A5A142B8EAAEC6B6C7BBBCA142BB50C0C9AED7BEDEA7402E > 1 2 回顧 指標與其算術運算 指標可類比於變數住的房間號碼 指標可以當陣列使用, 也可說指標可用來當陣列的別名 陣列的名稱本身可視為指標 int a[] = {1,2,,4,5; int *b = a; // 此時 b 記得 1 所住的房間號碼 cout

More information

C Functions

C Functions 大部分用來解決真實世界問題的電腦程式, 都要比我們在前幾章中所介紹的程式大很多 經驗告訴我們, 發展和維護大型程式的最好方法, 便是以一些較小的單元或模組 (module) 來建構整個程式, 這些小單元要比整個大程式好管理多了 這種技巧稱為各個擊破 (divide and conquer) 本章將介紹關於 C 在設計 實作 操作 和維護大型程式方面的功能 C 裡面的模組稱為函式 (function)

More information

C/C++基礎程式設計班

C/C++基礎程式設計班 C/C++ 基礎程式設計 字元與字串 講師 : 張傑帆 CSIE, NTU 人的出身並不重要, 你拿時間來做什麼才重要 It s not who you were at birth that matters, but what you do with the time you are given.-steve Jobs 課程大綱 字元 字串 作業 字元 在電腦的世界裡, 所有的一切都是以 0 與 1

More information

Microsoft Word - ok翁志文、張佳音...doc

Microsoft Word - ok翁志文、張佳音...doc 1 壹 研究動機 一般而言 傳統大三弦琴碼的擺放位置 圖 1 大約在琴鼓下方 由下往 上三分之一的地方 約 8.5 公分 但是這種擺法 學生在初學大三弦時 左手 常伴隨著指距較大 音準較難以掌握的困擾 為解決這個技巧上的問題 必須不 斷練習將手指指距撐開 並在琴桿上做記號來加以輔助 圖 1 傳統琴碼三分之一的擺放位置 8.5 公分 目前 北京中央音樂學院談龍建教授 採取將琴碼位置 往上移至 五度音

More information

運算子多載 Operator Overloading

運算子多載 Operator Overloading 多型 Polymorphism 講師 : 洪安 1 多型 編譯時期多型 ( 靜態多型 ) function overloading 如何正確呼叫同名的函數? 利用參數個數與型態 operator overloading 其實同 function overloading 執行時期多型 ( 或動態多型 ) 如何正確呼叫不同物件的相同名稱的成員函數 利用繼承與多型 2 子類別與父類別物件間的指定 (assignment)

More information

3. 給 定 一 整 數 陣 列 a[0] a[1] a[99] 且 a[k]=3k+1, 以 value=100 呼 叫 以 下 兩 函 式, 假 設 函 式 f1 及 f2 之 while 迴 圈 主 體 分 別 執 行 n1 與 n2 次 (i.e, 計 算 if 敘 述 執 行 次 數, 不

3. 給 定 一 整 數 陣 列 a[0] a[1] a[99] 且 a[k]=3k+1, 以 value=100 呼 叫 以 下 兩 函 式, 假 設 函 式 f1 及 f2 之 while 迴 圈 主 體 分 別 執 行 n1 與 n2 次 (i.e, 計 算 if 敘 述 執 行 次 數, 不 1. 右 側 程 式 正 確 的 輸 出 應 該 如 下 : * *** ***** ******* ********* 在 不 修 改 右 側 程 式 之 第 4 行 及 第 7 行 程 式 碼 的 前 提 下, 最 少 需 修 改 幾 行 程 式 碼 以 得 到 正 確 輸 出? (A) 1 (B) 2 (C) 3 (D) 4 1 int k = 4; 2 int m = 1; 3 for (int

More information

Microsoft PowerPoint - 04_Array

Microsoft PowerPoint - 04_Array 第四章 陣列 4.1 為何需要陣列 4.4 多維陣列 4.2 陣列常用的屬性與方法 4.5 不規則陣列 4.3 Array 類別常用靜態方法 備註 : 可依進度點選小節 4.1 為何需要陣列 4.1.1 何謂陣列 (Array) 前面章節, 每使用到一個資料就需宣告一個變數來存放, 資料一多時, 變數亦跟著增加, 增加變數命名困擾且程式長度亦增長不易維護 C# 對相同性質的資料提供陣列來存放 在宣告陣列時

More information

Chapter 2 MATLAB基本功能介紹

Chapter 2  MATLAB基本功能介紹 基本功能介紹 范洪源 范洪源 變數與陣列 變數的初始化多維陣列子陣列特殊的數值顯示輸出資料資料檔案純量與陣列運算運算的順序內建的 函式繪圖功能簡介 程式除錯 范洪源 變數與陣列 范洪源 陣列 在 程式裡, 資料的基本單位是陣列 () 陣列是由一群排成行列結構的資料值所組成, 並在程式中擁有獨一無二的名稱 陣列可以被歸類為是一種向量 () 或是矩陣 () 陣列大小 ( ) 是由陣列的行數及列數來決定的

More information

Microsoft Word - 投影片ch03

Microsoft Word - 投影片ch03 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第三章變數與資料型態 本章學習目標認識變數與常數認識 Java 的基本資料型態學習如何進行資料型態轉換學習如何由鍵盤輸入資料 變數與資料型態 3-2 Java 的資料型態分為 : 與 原始資料型態 (primitive type) 非原始資料型態 (non-primitive type) 原始資料型態包括了整數與浮點數等型態

More information

C/C++程序设计 - 字符串与格式化输入/输出

C/C++程序设计 - 字符串与格式化输入/输出 C/C++ / Table of contents 1. 2. 3. 4. 1 i # include # include // density of human body : 1. 04 e3 kg / m ^3 # define DENSITY 1. 04 e3 int main ( void ) { float weight, volume ; int

More information

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc 2 5 8 11 0 13 1. 13 2. 15 3. 18 1 23 1. 23 2. 26 3. 28 2 36 1. 36 2. 39 3. 42 4. 44 5. 49 6. 51 3 57 1. 57 2. 60 3. 64 4. 66 5. 70 6. 75 7. 83 8. 85 9. 88 10. 98 11. 103 12. 108 13. 112 4 115 1. 115 2.

More information

第1章

第1章 第 8 章 函式 1 本章提要 8.1 前言 8.2 如何定義函式 8.3 函式的呼叫和返回 8.4 傳遞陣列 8.5 方法多載 8.6 遞迴 8.7 綜合練習 8.8 後記 2 8.1 前言 每一種高階程式語言都有提供函式 (Function)( 或稱函數 ) 的功能, 以便將經常使用到的程式功能包裝成函式的形式, 如此一來便能反覆地呼叫該函式來完成某件特定工作在高階程式語言中, 副程式 (Subroutine)

More information

第一篇文概說第七章公文的用語及標點符號公本篇內容 第一章 緒論 第二章 公文的意義 第三章 公文與高 普 特各類考試 第四章 公文程式之意義及演變 第五章 公文之分類及其行文系統 第六章 公文之結構與行款 第一篇 第一章緒論 003 第一章緒論 等 等 004 最新應用公文 第一篇 第二章公文的意義 005 第二章公文的意義 第一節 一 須為公務員製作之文書 二 須為公務員 職務上 製作之文書 006

More information

Microsoft Word - chap05.doc

Microsoft Word - chap05.doc 31 5. Structures/Simple Classes in C++ 結構體是程式設計者自訂的資料型態 (data type), 一結構體是由多個彼此相關之基本資料型態之資料所構成的複合式資料型態 程式設計者可將程式中彼此相關 且類型不同的資料整合在一起, 定義為結構體, 此新的資料型態宣告建立後, 便可產生屬於此結構體類型 ( 定義 ) 的變數 ( 實體 ), 此有助於資料的管理 結構體與陣列都屬於複合式的資料型態,

More information

(Microsoft PowerPoint - \262\304\244\273\263\271)

(Microsoft PowerPoint - \262\304\244\273\263\271) 第六章 VHDL 電路設計語言中表示式 表示式 VHDL 電路設計語言中的表示式, 係用來計算出一個式子中的算術或邏輯數值 在一個表示式中, 通常包含有 2 種的組成元素, 一為運算元 (Operand), 另一為運算子 (Operator) 在 VHDL 電路設計語言中, 表示式的語法構成了一個程式執行或計算的基本單元, 使程式具有實質計算上的意義 2 運算子 (Operator) VHDL 電路設計語言中,

More information

C/C++ 语言 - 循环

C/C++ 语言 - 循环 C/C++ Table of contents 7. 1. 2. while 3. 4. 5. for 6. 8. (do while) 9. 10. (nested loop) 11. 12. 13. 1 // summing.c: # include int main ( void ) { long num ; long sum = 0L; int status ; printf

More information

Microsoft Word - ACI chapter00-1ed.docx

Microsoft Word - ACI chapter00-1ed.docx 前言 Excel Excel - v - 財務管理與投資分析 -Excel 建模活用範例集 5 相關 平衡 敏感 - vi - 前言 模擬 If-Then 規劃 ERP BI - vii - 財務管理與投資分析 -Excel 建模活用範例集 ERP + BI + ERP BI Excel 88 Excel 1. Excel Excel 2. Excel 3. Excel - viii - 前言 1.

More information

10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD

10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD 10 SCJD 簡介 Java 10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD 10 SCJD 10-3 Java Java SCJD 7 Swing RMI 10.1.1 The Assignment The Essay 9 10 10-4 SCJP SCJD 90 10.1.2 SCJP Java 90 120 Swing 10

More information

46 2011 11 467 數位遊戲式學習系統 7 2011 11 467 47 3 DBGameSys 48 2011 11 467 正規化資料模組 如何配置並儲存電子化資料 以 便減少資料被重覆儲存的程序 DBGameSys的主要功能模組包 學習者 審核評分模組 含 正規化資料模組 審核評分 模組 高分列表模組3大區塊 系統資料庫 在正規化資料模組的執行 高分列表模組 過程中 先要求學習者瀏覽遊戲

More information

第* 章 指標與結構

第* 章 指標與結構 ii 序言 序 C 語言的最大特色就是 指標 (Pointer), 這是個讓人又愛又怕受傷害的主題 有一句話是, 學過 C, 而不會指標, 那只能說您看過 C 熟悉指標的人, 會將它比喻是天上那一顆最美的星星, 而讓不懂的人, 頭上會冒星星, 同樣是星星, 但卻有不同的情境 指標好難喔, 像無字天書, 不知道該如何學, 從哪一地方開始下手, 有沒有秘訣, 常常有人會對我講這些話, 並問我有沒有好方法可以

More information

Microsoft Word - ACG chapter00c-3ed.docx

Microsoft Word - ACG chapter00c-3ed.docx Python 好好玩, 趣學電玩遊戲程式設計 Python Python BASIC Java JavaScript PHP C++ BASIC Python Python Python Xbox PlayStation Nintendo - 2 - 簡介 : 互動式 Python Shell : 編寫程式 Python File editor : 猜數字 : 腦筋急轉彎 : 龍域 ( ) : 使用

More information

Microsoft Word - _m30.doc

Microsoft Word - _m30.doc 1 2 3 4 5 6 7 8 公式 2 4 2 1 能 整除 因此後玩 者贏 且關鍵數 字為3 的倍數 3 0 3 1 不能整除 所 以先拿餘數 2 關鍵數字是 4的倍 數 2 先玩者贏 4 0 4 1 能整除 因此 後玩者贏 且 關鍵數字為 5 的倍數 5 0 5 1 不能整除 所 以先拿餘數 2 關鍵 數字是 6的倍 數 2 先玩者贏 7 0 6 1 能整除 因此 後玩者贏 且 關鍵數字為7

More information

運算子多載 Operator Overloading

運算子多載 Operator Overloading 函數樣板 (Function Template) 與 類別樣板 (Class Template) 講師 : 洪安 1 資料結構與 C++ 程式設計進階班 為何需要通用函數? (1/2) int abs(int x) { return (x>0)?x:-x; 取名困難不好記 float fabs(float x) { return (x>0)?x:-x; complex cabs(complex x)

More information

Microsoft PowerPoint - 06_迴圈2.pptx

Microsoft PowerPoint - 06_迴圈2.pptx 資料型別的選擇 如果資料或是運算過程可能會出現小數點 (e.g. BMI), 宜使用浮點數 (double, float) char 僅能儲存一個英文字 數字 或是英文中出現的標點符號等等鍵盤上可直接看得到 按得出的符號 若要儲存中文字, 目前建議使用 string 型別 A 和 A 的差別, 我們目前還沒辦法說得很詳細 只能說一個是字元 一個是字串 布林運算式的寫法 如果 x 等於, 就印出 Hello

More information

C/C++ - 数组与指针

C/C++ - 数组与指针 C/C++ Table of contents 1. 2. 3. 4. 5. 6. 7. 8. 1 float candy [ 365]; char code [12]; int states [50]; 2 int array [6] = {1, 2, 4, 6, 8, 10}; 3 // day_mon1.c: # include # define MONTHS 12 int

More information

Microsoft Word - 投影片ch11

Microsoft Word - 投影片ch11 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第十一章抽象類別與介面 本章學習目標認識抽象類別學習介面的使用認識多重繼承與介面的延伸 抽象類別與介面 11-2 11.1 抽象類別 抽象類別的目的是要依據它的格式來修改並建立新的類別 11.1.1 定義抽象類別 定義抽象類別的語法如下 : abstract class 類別名稱 { 宣告資料成員 ; // 定義抽象類別

More information

PowerPoint Presentation

PowerPoint Presentation 資料結構概論 NTU CSIE Outline 資料結構概論 C 語言的結構 (struct) 結構化的資料常見的資料結構簡介 從一個例子開始 算出班上十位同學成績之總分與平均 #include int main() // 宣告變數與資料內容 int a0=80, a=90, a2=70, a3=66, a4=56; int a5=99, a6=88, a7=50, a8=60,

More information

投影片 1

投影片 1 計算機程式及實習 期末報告 題目 : 六宿炒翻天 班級 : 奈米一乙姓名 : 陳洋翼學號 :4A514050 老師 : 謝慶存 程式說明 設計結帳系統, 選擇數量後, 在按下計算, 將會顯示總金額 若是老人或小孩, 將可享 8 折或 9 折的優惠 程式畫面 填選數量 在火腿蛋炒飯的數量選擇 1, 並按下計算, 可得總金額 50 元 程式畫面 打折 填選完後, 若客人是小孩或老人, 選擇欲打折項目,

More information

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new ListView 自訂排版 主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new int[]{r.drawable.dog1, R.drawable.dog2,

More information

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e Android Studio Debugging 本篇教學除了最基本的中斷點教學之外, 還有條件式中斷的教學 條件式中斷是進階的除錯技巧, 在某些特定情況中, 我們有一個函數可能會被呼叫數次, 但是我們只希望在某種條件成立時才進行中斷, 進而觀察變數的狀態 而條件式中斷這項技巧正是符合這項需求 本教學分兩部分 單步除錯 (Page2~11, 共 10) 條件式中斷點 (Page12~17, 共 6)

More information

CU0594.pdf

CU0594.pdf 8 SOHO 1 3 003 SOHO SOHO Coder Programmer HTML CSS PHP JavaScrip 009 LECTURE 1-1 1 048 PART 2 LECTURE 1-1 1 049 SOHO Landing Page Landing 050 PART 2 LECTURE 1-1 1 SEO SEO P.093 SEO SEO SEO SEO SEO 051

More information

PowerPoint Presentation

PowerPoint Presentation Chapter 7 Pointers ( 指標 ) 1 Outline 7.1 Introduction 7.2 Pointer Variable Definitions and Initialization 7.3 Pointer Operators 7.4 Calling Functions by Reference 7.5 Using the const Qualifier with Pointers

More information

6 2012 8476你猜得到它是什麼嗎 它就是 高分子! 生活中的高分子 有種物質的重要性不亞於我們所呼吸的空氣, 不管身在何處, 都有它的存在, 它甚至就隱藏在人體裡面! 人類若失去了它, 就得回到遠古時代, 甚至可能終止生命 高分子是什麼 高分子是由千個 甚至萬個以上的原子所組成, 呈現柔軟的特性 日常生活中使用的塑膠袋就是由高分子製造的, 人體組成中的 DNA 也是一種高分子 2012 8476

More information

二次曲線 人們對於曲線的使用及欣賞 比曲線被視為一種數學題材來探討要早 得多 各種曲線中 在日常生活常接觸的 當然比較容易引起人們的興趣 比如 投擲籃球的路徑是拋物線 盤子的形狀有圓形或橢圓形 雙曲線 是較不常見的 然而根據科學家的研究 彗星的運行軌道是雙曲線的一部 分 我們將拋物線 圓與橢圓 雙曲

二次曲線 人們對於曲線的使用及欣賞 比曲線被視為一種數學題材來探討要早 得多 各種曲線中 在日常生活常接觸的 當然比較容易引起人們的興趣 比如 投擲籃球的路徑是拋物線 盤子的形狀有圓形或橢圓形 雙曲線 是較不常見的 然而根據科學家的研究 彗星的運行軌道是雙曲線的一部 分 我們將拋物線 圓與橢圓 雙曲 -1 圓方程式 第 章 二次曲線 38 二次曲線 人們對於曲線的使用及欣賞 比曲線被視為一種數學題材來探討要早 得多 各種曲線中 在日常生活常接觸的 當然比較容易引起人們的興趣 比如 投擲籃球的路徑是拋物線 盤子的形狀有圓形或橢圓形 雙曲線 是較不常見的 然而根據科學家的研究 彗星的運行軌道是雙曲線的一部 分 我們將拋物線 圓與橢圓 雙曲線合稱為圓錐曲線 因為在平面坐標 系中 其對應的方程式均為二元二次式

More information

Microsoft PowerPoint - Class4.pptx

Microsoft PowerPoint - Class4.pptx C++ 程式初探 IV 2015 暑期 ver. 1.0.2 C++ 程式 IV 大綱 1. 時間函式 2. 格式化輸出 3. 遞迴函式 (recursion) 4. 字串 5. 字串轉型 2 補充語法 時間計算 引入標頭檔 #include #include #include #include using namespace

More information

選擇學校午膳供應商手冊適用於中、小學 (2014年9月版)

選擇學校午膳供應商手冊適用於中、小學 (2014年9月版) 2014 年 9 月版 選擇 學校午膳供應商手冊 適用於中 小學 i 1 1 2 3 4 5 6 7 8 9 1 2 2 i. ii. iii. iv. v. i. ii. iii. iv. v. vi. vii. 3 i. ii. iii. iv. v. 4 i. ii. 1. 2. 3. 4. 5. iii. iv. 5 6 3 4 5 6 i. ii. i. ii. iii. iv. v.

More information

HTML網頁基礎語言

HTML網頁基礎語言 第 3 章 Visual Basic 2012 程式語言 http://www1.chihlee.edu.tw/teachers/chienhua/ 第 3 章 Visual Basic 2012 程式語言 3-0 ASP.NET 網頁程式碼模式 3-1 Visual Basic 的基本撰寫規格 3-2 變數與資料型別 3-3 運算子 3-4 流程控制 3-5 陣列 3-6 程序與函數 Note:

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

c_cpp

c_cpp C C++ C C++ C++ (object oriented) C C++.cpp C C++ C C++ : for (int i=0;i

More information

投影片 1

投影片 1 NCKU Progrmming Contest Trining Course 08/05/09 Jheng-Hung Hong Deprtment of Computer Siene nd Informtion Engineering Ntionl Cheng Kung University Tinn, Tiwn NCKU CSIE Progrmming Contest Trining Course

More information

第四講 資料型態及變數、常數

第四講 資料型態及變數、常數 VBA 講義 4-1 第四講資料型態及變數 常數 VBA 的資料型態 (Data Types) 資料型態使用的記憶體空間數值範圍 Byte( 短整數 ) 1 Byte 0~255 Integer ( 整數 ) 2 Bytes -32768~32767 Long ( 長整數 ) 4 Bytes -2147483648~2147483647 Single ( 單倍精準浮點 數 ) Double ( 雙倍精準浮

More information

LAch7

LAch7 Maxima 在線性代數上之應用 正準形式 國立屏東教育大學應用數學系研究助理徐偉玲 weilinghsu@mail.npue.edu.tw 日期 :2009/9/8 除另有說明外, 本文件採用創用 CC 姓名標示 非商業性 2.5 台灣條款 第七章正準形式 7.1 Jordan 正準形式 Ⅰ 2. 對每一個矩陣 A, 對 L A 的每一個廣義特徵空間找一組由不相交的廣義特徵向 量循環集之聯集所組成之基底,

More information

Microsoft Word - ch doc

Microsoft Word - ch doc C 與 C++ 的差異 18 18.1 C 與 C++ 的差異簡介 前一章己經知道 C 和 C++ 是使用不同的方式來處理格式化輸出入 C++ 是 C 語言的超集合, 因此 C 語言的相關語法及函式也可以在 C++ 中使用, 下表我們列出 C 語言與 C++ 的差異處 : 註解 功能 C 語言 C++ 語言 變數宣告 資料型別 多載函式或多載運算子 inline 函式 常數定義 /* */ 為單行註解

More information

C/C++基礎程式設計班

C/C++基礎程式設計班 C/C++ 基礎程式設計 我們必須讓小事也令人難忘 We ve got to make the small things unforgettable. -Steve Jobs 函式 (Function) 講師 : 張傑帆 CSIE NTU 課程大綱 函式概論 變數類型 - 全 / 區域變數 函式中以指標當參數 傳遞陣列參數 把程式拆成多個檔案 函式 (Function) 包函許多程式碼的一行程式 (

More information

程式基礎之字串函數與處理篇 前言 無論是在現實世界或是網路世界, 文字都是我們溝通的方式之一 在資訊的世界裡面, 怎麼利用程式把文字照自己想要的方式呈現就是個很基本也很重要的技術 但我們可能會發現, 許多文字處理要做的事情都很類似 ( 例如把兩個字串接在一起, 或是照特定格式輸出 ), 因此在 C

程式基礎之字串函數與處理篇 前言 無論是在現實世界或是網路世界, 文字都是我們溝通的方式之一 在資訊的世界裡面, 怎麼利用程式把文字照自己想要的方式呈現就是個很基本也很重要的技術 但我們可能會發現, 許多文字處理要做的事情都很類似 ( 例如把兩個字串接在一起, 或是照特定格式輸出 ), 因此在 C 程式基礎之字串函數與處理篇 前言 無論是在現實世界或是網路世界, 文字都是我們溝通的方式之一 在資訊的世界裡面, 怎麼利用程式把文字照自己想要的方式呈現就是個很基本也很重要的技術 但我們可能會發現, 許多文字處理要做的事情都很類似 ( 例如把兩個字串接在一起, 或是照特定格式輸出 ), 因此在 C 語言中提供了許多字串處理函數, 讓程式設計師能夠省去做相同處理的時間 而今天我們就是要來介紹這些函數,

More information

1

1 守大學電機系 電腦視覺 報告 單元一 數位影像 : 格式和操作 參考解答 MIAT( 機器智慧與自動化技術 ) 實驗室 中華民國 93 年 9 月 29 日 1. (a) 如果指紋影像 finger300x300 的取像面積是 14(mm)x14(mm), 請計算取像系統的 dpi (b) 如果 kaoshiung512x512 遙測影像的覆蓋面積是 5(Km)x5(Km), 請計算該影像的解析度

More information

陣列

陣列 前置處理器 -#define 和 #include 一般的 C 語言中, 程式指令是要給機器看然後來執行的, 所以會需要經過 編譯 這個動作 而由 # 開頭的程式碼並不會編譯給機器執行, 而是在編譯的 過程中給編譯器看的, 我們稱他們為 前置處理器 先說我們平常用的 #include, 為什麼每次我們都要先加那兩行呢? 其實 stdio.h 和 stdlib.h 是兩個 函數庫, 也就是已經放了很多函數進去裡面所以可以

More information

Slide 1

Slide 1 Java 程式設計入門 講師 : 陳昭源 CSIE, NTU August 3, 2005 Outline Character & String Exercise August 3, 2005 Page 2 Character & String 處理字元資料時,Java 有三個類別可供使用 Character: 處理單一字元 String: 處理內容不改變 (immutable) 的字串 StringBuffer:

More information

105A 資管一程式設計實驗 06 函式定義謝明哲老師 2 程式設計實驗 6.3: 自行定義一個可以接受兩個整數並傳回其最大公因數的函式, 接著利用該函式自 行定義一個可以接受兩個整數並傳回其最小公倍數函式 // gcd_fcn.cpp int gcd(int m,

105A 資管一程式設計實驗 06 函式定義謝明哲老師 2 程式設計實驗 6.3: 自行定義一個可以接受兩個整數並傳回其最大公因數的函式, 接著利用該函式自 行定義一個可以接受兩個整數並傳回其最小公倍數函式 // gcd_fcn.cpp int gcd(int m, 105A 資管一程式設計實驗 06 函式定義謝明哲老師 hmz@nttu.edu.tw 1 程式設計實驗 06 函式定義 模擬問題 03 在模擬問題 02, 小組已完成擬定一個與學習或日常生活有關的問題, 並依據在 Ch5 所 學到的流程控制與檔案存取技術發展小組的第二版個別化資訊服務程式 現在請小組對第二版程式的 結構進行分析, 檢查是否有哪些功能可以使用在 Ch6 所學到的函式定義來加以模組化,

More information

泛型演算法萃取實例

泛型演算法萃取實例 指標與陣列 柯向上 Josh Ko 2005.12.28 核心概念 指標與陣列之間的關係, 可算是 C 語言最有趣的設計之一 但 C/C++ 的學習者往往沒辦法掌握關鍵所 在, 而弄不清楚指標 陣列的互換關係 說穿了, 陣列實用上只有以下一個規則 : 出現在算式之中的陣列名稱可被隱喻轉換為 指向陣列第一個元素 的指標 就是這個規則而已 ( 事實上本文至此就可以結束了 ) 我在文中暫且把它稱為 (the)

More information

2 3 13 17 22 26 1 2 8 100738 +86 (10) 8508 5000 +86 (10) 8518 5111 www.kpmg.com.cn 2006 4 2002 2006 1 28% 2006 17 8 500 2006 2006 2006 7 2.5 2 1 500 500 40% 500 10 16 14 12 10 8 6 4 2 2002-2006 5.1 5.9

More information

e01 1....5 1.1....5 1.1.1....5 1.1.2....6 1.1.3....8 1.1.4....9 1.1.5....11 1.1.6. /...16 1.1.7. /...19 1.1.8. /...21 1.1.9....24 1.1.10....24 1.1.11....28 1.1.12....36 1.1.13....45 1.1.14....48 1.1.15....50

More information

(Microsoft PowerPoint - PHP_Ch07 [\254\333\256e\274\322\246\241])

(Microsoft PowerPoint - PHP_Ch07 [\254\333\256e\274\322\246\241]) 第 7 章陣列與字串 7-1 一維索引陣列 7-2 二維與結合陣列 7-3 陣列的搜尋與排序 7-4 字串處理函數 7-1 一維索引陣列 7-1-1 PHP 陣列的基礎 7-1-2 一維索引陣列 7-1-3 foreach 迴圈走訪陣列 7-1-4 陣列運算子與陣列參數 7-1-5 索引陣列的相關函數 7-1-6 常數陣列 7-1-1 PHP 陣列的基礎 說明 在 PHP 陣列儲存的元素是一種對應關係的兩個值

More information

封面-12

封面-12 第十二章 701Client TECHNOLOGY CO.,LTD. 701Client 701Server 701Client "701Client", 12-1 :supervisor :supervisor : 1. : 00~99 100 2. : 00~63 ( 63 / / ) 3. : 18 9 4. : 18 9 5. 12-2 TECHNOLOGY CO.,LTD. 701Client

More information

05855BB07.indd

05855BB07.indd 7 陣列 去游泳時, 通常都會將換下的衣物放到池畔邊的儲物櫃中 每個儲物櫃都有一個用來識別的編號, 我們必須記住自己的儲物櫃編號, 才能在更衣時正確地取回自己的衣物 在程式語言中, 也提供了一種類似儲物櫃的資料結構, 可用來組織及管理相同類型的資料, 這種結構稱為陣列 陣列不僅可以將程式所使用到資料項目做組織 歸納, 還可以減少在程式中使用過多的變數, 使程式較為簡潔 在程式設計實務中, 當需要將龐大筆數的資料排序,

More information

PowerPoint 簡報

PowerPoint 簡報 本周未安排實作輔導 預定 : 下周六 迴圈 LOOP 應用 判斷質數 (Prime number) 求兩個整數的最大公因數 (greatest common divisor, GCD) 判斷迴文 (palindrome) 搶答!! Q1 : 印出結果? int s,x; s=0; for(x=1;x

More information

Microsoft PowerPoint - 3C¬ì§Þ»P¥Í¬¡-chapter2

Microsoft PowerPoint - 3C¬ì§Þ»P¥Í¬¡-chapter2 Chapter II 軟硬之間 電腦的程式與硬體 1 資料的二進位表示法 資訊在電腦外部及內部表示法上的不同 2 資料的二進位表示法 二進位與十進位轉換表 3 資料的二進位表示法 1035 0000010000001011-1035 直接符號 1000010000001011 1 s 補數 1111101111110100 2 s 補數 1111101111110101 負整數表示法 4 資料的二進位表示法

More information

理性真的普遍嗎 注意力的爭奪戰 科學發展 2012 年 12 月,480 期 13

理性真的普遍嗎 注意力的爭奪戰 科學發展 2012 年 12 月,480 期 13 12 科學發展 2012 年 12 月,480 期 你可能不知道的媒體影響 劉正山若用 選戰 的角度來看選舉和參與選舉, 你大腦裡情感的作用一定大過理性的作用, 便會很習慣地拿各種媒體或別人的觀點來使自己的選擇合理化 2012 理性真的普遍嗎 注意力的爭奪戰 科學發展 2012 年 12 月,480 期 13 14 科學發展 2012 年 12 月,480 期 agendasetting 報紙和網路新聞的頭版空間有限,

More information

Microsoft PowerPoint - ICP_02_Basic_Data_Type.ppt [相容模式]

Microsoft PowerPoint - ICP_02_Basic_Data_Type.ppt [相容模式] Introduction to Computer and Program Design Lesson 2 Basic Data Types James C.C. Cheng Department of Computer Science National Chiao Tung University The basic data types 變數 (variable) 是甚麼? 變數代表了一塊可以記錄資料的記憶體空間,

More information

C++ 程式設計

C++ 程式設計 C C 料, 數, - 列 串 理 列 main 數串列 什 pointer) 數, 數, 數 數 省 不 不, 數 (1) 數, 不 數 * 料 * 數 int *int_ptr; char *ch_ptr; float *float_ptr; double *double_ptr; 數 (2) int i=3; int *ptr; ptr=&i; 1000 1012 ptr 數, 數 1004

More information

C/C++基礎程式設計班

C/C++基礎程式設計班 C/C++ 基礎程式設計 C++: 物件的使用 參考 重載函式 成就別人認為不可能的事 Do what nobody else considered possible. -Steve Jobs 講師 : 張傑帆 CSIE NTU C++ 相較於 C 的特色 向下相容 在 C 語言中, 我們學了許多程式語法, 所有學過的東西, 在 C++ 中都可以使用 高階的程式描述方式 更利於用來開發大型專案, 讓程式設計師在分工時更能快速的開發程式,

More information