季節 - 柴田町観光物産協会 | 柴田町の観光・イベント情報サイト...柴田町観光物産協会 「花のまち柴田」インバウンド推進協議会 発行日:平成29年3月
明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269
-
Upload
joseph-atkinson -
Category
Documents
-
view
101 -
download
14
description
Transcript of 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269
![Page 1: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/1.jpg)
明解 C++ 教學手冊
柴田望洋 博士 著書號: PG20269
![Page 2: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/2.jpg)
本章要學習的是整數型態和浮動小數點型態等內建資料型態、有效率地表示同型態之資料的陣列,以及表示整數值之集合體的列舉。
![Page 3: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/3.jpg)
整數型態 整數型態 (integer type) 是可表示有限範圍內的連
續整數之型態。 在宣告型態時加上 unsigned 或 signed 等型態修飾
詞 (type specifier) ,可以指定要使用無符號的整數型態還是有符號的整數型態。
![Page 4: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/4.jpg)
整數型態還可依據其能夠表示之個數,分為 char 、short int 、 int 、 long int 這四種,除了 char 型態以外,其他三個形態都各有無符號版和有符號版。
這些型態與 bool 型態及 wchar_t 型態合稱為泛整數型態 (integral type) 或整數型態 (integer type) 。
![Page 5: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/5.jpg)
![Page 6: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/6.jpg)
C++ 的處理器是以 <climits> 標頭來提供整數型態的各型態所能表現之數值範圍。
![Page 7: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/7.jpg)
#define 指令是進行「取代」之指示,像這樣的取代指令就是類似對象巨集 (object-like macro) ,而INT_MAX 這樣的名稱則是巨集名稱 (macro name) 。
![Page 8: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/8.jpg)
使用類似對象巨集的優點為: 可以將值的管理集中在巨集定義的部份。 由於可以賦予常數值名稱,所以程式會比較容易解讀。
![Page 9: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/9.jpg)
字元型態有以下三種: 單純字元型態 無符號的字元型態 有符號的字元型態
![Page 10: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/10.jpg)
字元型態所能表現的範圍會因處理器而不同,這是因為各種處理器之字元型態在記憶體上所佔有的位元數不同。
![Page 11: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/11.jpg)
電腦是透過字元碼來識別字元。
![Page 12: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/12.jpg)
![Page 13: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/13.jpg)
整數常值是以十進位數、八進位數以及十六進位數這三種基數來表示。
![Page 14: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/14.jpg)
物件和 sizeof 運算子 變數的正式名稱為物件 (object) 。
![Page 15: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/15.jpg)
sizeof 運算子有以下這兩種形式: sizeof 運算式 izeof( 型態 )
![Page 16: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/16.jpg)
size_t 型態和 typedef sizeof 運算子所產生的 size_t 型態,並不是 C++
本身的內建型態 (built-in type) ,必須引入<cstddef> 標頭才能使用。
typedef 宣告可以給予即存型態另一個名稱。
![Page 17: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/17.jpg)
typeid 運算子 typeid 運算子可以取得型態的各種相關資訊。
![Page 18: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/18.jpg)
bool 型態 不是 0 的數值會被視為 true ,而 0 則會被視為
false 。
![Page 19: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/19.jpg)
![Page 20: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/20.jpg)
浮動小數點型態 浮動小數點型態 () 可以表示具有小數點以下部份之
實數,它可分為以下這三種: float double long double
![Page 21: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/21.jpg)
浮動小數點常值可以使用附指數之數學表示法。 若是加上浮動小數點尾碼 (floating suffix) ,就可以
指定型態。
![Page 22: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/22.jpg)
運算和型態
![Page 23: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/23.jpg)
在兩邊運算元的型態不同的運算中,會進行隱式形態轉換 (implicit type conversion) 。
![Page 24: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/24.jpg)
作為運算對象的運算元之型態不同時,型態較小的運算元會先轉換成較大的型態再進行計算。
![Page 25: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/25.jpg)
顯式型態轉換 要用實數求取整數除以整數的商時,至少要有一邊
的運算元是 double 型態,並且使用「 / 」運算子。
![Page 26: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/26.jpg)
顯式型態轉換的轉型寫法:( 型態 ) 運算式
這種顯式型態轉換 (explicit type conversion) 就叫做轉型 (cast) ,其中的 ( ) 則是轉型運算子。
顯式型態轉換的函數寫法:型態 ( 運算式 )
![Page 27: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/27.jpg)
static 運算子可以執行靜態轉型 (static cast) ,它是適用於隱式型態轉換的「自然型態轉換」所使用的運算子。
![Page 28: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/28.jpg)
可以使用轉型寫法、函數寫法和 static cast 的其中之一,來進行整數和浮動小數點數之間的型態轉換。
![Page 29: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/29.jpg)
迴圈控制 下列程式的執行結果會視處理器而有所不同。
![Page 30: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/30.jpg)
作為判斷迴圈之基準的變數,應該使用整數而非浮動小數點數。
![Page 31: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/31.jpg)
![Page 32: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/32.jpg)
陣列 陣列是由同型態之變數 ( 元素 ) 集合而成的。 陣列是透過賦予元素型態、變數名稱和元素數來宣
告,而元素數必須是常數。
![Page 33: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/33.jpg)
各元素的存取是藉由在 [ ] 中賦予整數型態之索引(subscript) 來進行。
由於開頭元素的索引會是 0 ,所以各元素從頭開始會依序是 a[0] 、 a[1] 、 a[2] 、 a[3] 、 a[4] 、 a[5] 。
![Page 34: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/34.jpg)
可藉由陣列來實現相同型態的集合體。
![Page 35: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/35.jpg)
陣列和 for 敘述 下面是使用陣列的程式。
![Page 36: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/36.jpg)
下面是用 for 敘述改寫之後的程式。
![Page 37: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/37.jpg)
使用陣列處理成績 使用陣列改寫 List 4-17 的程式如下:
![Page 38: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/38.jpg)
加上 const 來宣告的物件,就可以作為無法變更值的常數運算式 (const expression) 來使用。
![Page 39: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/39.jpg)
陣列的初始化 給予陣列的初始化子是用逗號 (,) 來區隔,並依序
排在 { } 之中。 若是不給予元素數來宣告陣列,就會依初始化子的
數量來決定陣列的元素數。
![Page 40: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/40.jpg)
陣列的元素數 陣列 a 的元素數是使用 sizeof(a) / sizeof(a[0]) 來求
取。
![Page 41: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/41.jpg)
陣列型態的資訊 typeid 運算子也可以調查陣列的型態。
![Page 42: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/42.jpg)
將陣列逆向排列
![Page 43: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/43.jpg)
![Page 44: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/44.jpg)
陣列的複製 由於無法透過指定運算子來複製陣列,所以必須像
下面的程式這樣子進行複製。
![Page 45: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/45.jpg)
逐一走過陣列的元素就叫做走訪 (traverse) 。
![Page 46: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/46.jpg)
多維陣列 也可以將「陣列」作為陣列的元素,這種陣列又稱
為多維陣列 (multidimensional array) 。
![Page 47: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/47.jpg)
![Page 48: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/48.jpg)
初始化子 沒有給予初始化子的元素,將自動以 0 初始化。 多維陣列的初始化子沒有必要以 { } 來作成巢狀結構。
![Page 49: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/49.jpg)
列舉 表示可以表示值的「集合體」。 宣告表示狗、貓、猴的集合體之列舉
(enumeration) 。 Animal 是列舉名稱 (enum-name) ,而 { } 中的 Dog 、 Cat 、 Monkey 則是列舉元(enumerator) 。
無法對列舉的變數使用插入運算子來讀入值,此時會暫且將值讀入 int 型態的變數 type 。
宣告 animal 型態的變數「 selected 」。
![Page 50: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/50.jpg)
![Page 51: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/51.jpg)
表示有限範圍的整數之整數型態有 char 型態、 int 型態、 bool 型態、 wchar_t 型態。整數型態的特性是在<climits> 標頭中作為類似對象巨集來定義。
表示實數的浮動小數點型態有 float 型態、 double 型態、 long double 型態。浮動小數點型態的特性是定義在<cfloat> 標頭中。
char 型態有單純 char 型態、 unsigned char 型態、 signed char 型態這三種。單純 char 型態是有符號形態還是無符號型態則視處理器而定。
程式中是以字元碼來辨識字元。 透過 isprint 之類的 is… 函數,就可以調查字元的種類。 int 型態有 short 版、單純 int 版、 long 版這三種。而每一種
還可分為有符號版和無符號版。
![Page 52: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/52.jpg)
整數常值可以用十進位、八進位以及十六進位來表示。必要的時候,還必須在最後面加上整數尾碼 U 或 L 來指定型態。
必要的時候,浮動小數點常值必須在最後加上浮動小數點尾碼 U 或 L 來指定型態。
迴圈的控制應該使用整數型態而不是浮動小數點型態。 bool 型態是表示真和偽的型態。布林常值有 true 和 false 這
兩個。 如果插入 boolalpha操作子,就可以將 bool 型態的值以字元
而非整數值來輸出。 物件就是用來表現值的記憶區域。 運算式和型態在記憶體上所佔有的大小,可以使用 sizeof 運
算子來取得。 sizeof 運算子所產生的 size_t 型態是在 <cstddef> 標頭內被
typedef 宣告。 typedef 宣告可以給予原有的型態一個新的名稱。 型態的相關資訊可以透過 typeid 運算子來取得。
![Page 53: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/53.jpg)
整數之間的計算結果會是整數,而浮動小數點數之間的計算結果則會是浮動小數點數。
浮動小數點型態和整數型態等不同型態之間的數值計算,會自動進行型態轉換。
要將運算式的值轉換成以其他型態來表現的值,只要進行轉型 ( 型態轉換 ) 即可。
轉型有轉型寫法、函數寫法、動態轉型、靜態轉型、強制轉型以及常數性轉型這六種。整數和浮動小數點數之間的型態轉換,可以用轉型寫法、函數寫法和靜態轉型的任何一種來進行。
集合同型態的物件,並在記憶體上排成一線就是陣列,陣列是以元素型態、名稱、元素數來作為特徵。
陣列的各個元素可以透過索引運算子 [ ] 來存取。索引是指示元素位置 ( 位於開頭之後的第幾個元素 ) 的值。
![Page 54: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269](https://reader033.fdocuments.net/reader033/viewer/2022061520/5681332e550346895d9a2d25/html5/thumbnails/54.jpg)
宣告陣列時一定要給予元素數 ( 作為常數運算式 ) ,如果需要表示元素數的變數的話,可以將元素數作為常數物件來實現。另外,宣告過的陣列 a 的元素數,可以使用sizeof(a) / sizeof(a[0]) 來求取。
不可以使用指定運算子「 = 」來完全複製陣列的所有元素。 對陣列的元素進行有規律的操作時,很適合使用 for 敘述。 以陣列作為元素的陣列就是多維陣列,透過視維數之不同
來多重地使用索引運算子 [ ] ,就可以存取各個元素。 列舉可以表示某個範圍的整數之集合體,各個列舉元會是
表示值的名稱。 對整數常數給予名稱時,應該使用常數物件或列舉,而不
是類似對象巨集。