明解 c++ 教學手冊 柴田望洋 博士 著 書號: pg20269

54
明明 C++ 明明明明 明明明明 明明 明 明明PG20269

Upload: joseph-atkinson

Post on 02-Jan-2016

101 views

Category:

Documents


14 download

DESCRIPTION

明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269. 第四章 資料型態和陣列. 本章要學習的是整數型態和浮動小數點型態等內建資料型態、有效率地表示同型態之資料的陣列,以及表示整數值之集合體的列舉。. 4-1 整數型態. 整數型態 整數型態 (integer type) 是可表示有限範圍內的連續整數之型態。 在宣告型態時加上 unsigned 或 signed 等 型態修飾詞 (type specifier) ,可以指定要使用 無符號的整數型態 還是 有符號的整數型態 。. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

明解 C++ 教學手冊

柴田望洋 博士 著書號: PG20269

Page 2: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

本章要學習的是整數型態和浮動小數點型態等內建資料型態、有效率地表示同型態之資料的陣列,以及表示整數值之集合體的列舉。

Page 3: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

整數型態 整數型態 (integer type) 是可表示有限範圍內的連

續整數之型態。 在宣告型態時加上 unsigned 或 signed 等型態修飾

詞 (type specifier) ,可以指定要使用無符號的整數型態還是有符號的整數型態。

Page 4: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

整數型態還可依據其能夠表示之個數,分為 char 、short int 、 int 、 long int 這四種,除了 char 型態以外,其他三個形態都各有無符號版和有符號版。

這些型態與 bool 型態及 wchar_t 型態合稱為泛整數型態 (integral type) 或整數型態 (integer type) 。

Page 5: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269
Page 6: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

C++ 的處理器是以 <climits> 標頭來提供整數型態的各型態所能表現之數值範圍。

Page 7: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

#define 指令是進行「取代」之指示,像這樣的取代指令就是類似對象巨集 (object-like macro) ,而INT_MAX 這樣的名稱則是巨集名稱 (macro name) 。

Page 8: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

使用類似對象巨集的優點為: 可以將值的管理集中在巨集定義的部份。 由於可以賦予常數值名稱,所以程式會比較容易解讀。

Page 9: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

字元型態有以下三種: 單純字元型態 無符號的字元型態 有符號的字元型態

Page 10: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

字元型態所能表現的範圍會因處理器而不同,這是因為各種處理器之字元型態在記憶體上所佔有的位元數不同。

Page 11: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

電腦是透過字元碼來識別字元。

Page 12: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269
Page 13: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

整數常值是以十進位數、八進位數以及十六進位數這三種基數來表示。

Page 14: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

物件和 sizeof 運算子 變數的正式名稱為物件 (object) 。

Page 15: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

sizeof 運算子有以下這兩種形式: sizeof 運算式 izeof( 型態 )

Page 16: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

size_t 型態和 typedef sizeof 運算子所產生的 size_t 型態,並不是 C++

本身的內建型態 (built-in type) ,必須引入<cstddef> 標頭才能使用。

typedef 宣告可以給予即存型態另一個名稱。

Page 17: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

typeid 運算子 typeid 運算子可以取得型態的各種相關資訊。

Page 18: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

bool 型態 不是 0 的數值會被視為 true ,而 0 則會被視為

false 。

Page 19: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269
Page 20: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

浮動小數點型態 浮動小數點型態 () 可以表示具有小數點以下部份之

實數,它可分為以下這三種: float double long double

Page 21: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

浮動小數點常值可以使用附指數之數學表示法。 若是加上浮動小數點尾碼 (floating suffix) ,就可以

指定型態。

Page 22: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

運算和型態

Page 23: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

在兩邊運算元的型態不同的運算中,會進行隱式形態轉換 (implicit type conversion) 。

Page 24: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

作為運算對象的運算元之型態不同時,型態較小的運算元會先轉換成較大的型態再進行計算。

Page 25: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

顯式型態轉換 要用實數求取整數除以整數的商時,至少要有一邊

的運算元是 double 型態,並且使用「 / 」運算子。

Page 26: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

顯式型態轉換的轉型寫法:( 型態 ) 運算式

這種顯式型態轉換 (explicit type conversion) 就叫做轉型 (cast) ,其中的 ( ) 則是轉型運算子。

顯式型態轉換的函數寫法:型態 ( 運算式 )

Page 27: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

static 運算子可以執行靜態轉型 (static cast) ,它是適用於隱式型態轉換的「自然型態轉換」所使用的運算子。

Page 28: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

可以使用轉型寫法、函數寫法和 static cast 的其中之一,來進行整數和浮動小數點數之間的型態轉換。

Page 29: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

迴圈控制 下列程式的執行結果會視處理器而有所不同。

Page 30: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

作為判斷迴圈之基準的變數,應該使用整數而非浮動小數點數。

Page 31: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269
Page 32: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

陣列 陣列是由同型態之變數 ( 元素 ) 集合而成的。 陣列是透過賦予元素型態、變數名稱和元素數來宣

告,而元素數必須是常數。

Page 33: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

各元素的存取是藉由在 [ ] 中賦予整數型態之索引(subscript) 來進行。

由於開頭元素的索引會是 0 ,所以各元素從頭開始會依序是 a[0] 、 a[1] 、 a[2] 、 a[3] 、 a[4] 、 a[5] 。

Page 34: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

可藉由陣列來實現相同型態的集合體。

Page 35: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

陣列和 for 敘述 下面是使用陣列的程式。

Page 36: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

下面是用 for 敘述改寫之後的程式。

Page 37: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

使用陣列處理成績 使用陣列改寫 List 4-17 的程式如下:

Page 38: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

加上 const 來宣告的物件,就可以作為無法變更值的常數運算式 (const expression) 來使用。

Page 39: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

陣列的初始化 給予陣列的初始化子是用逗號 (,) 來區隔,並依序

排在 { } 之中。 若是不給予元素數來宣告陣列,就會依初始化子的

數量來決定陣列的元素數。

Page 40: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

陣列的元素數 陣列 a 的元素數是使用 sizeof(a) / sizeof(a[0]) 來求

取。

Page 41: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

陣列型態的資訊 typeid 運算子也可以調查陣列的型態。

Page 42: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

將陣列逆向排列

Page 43: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269
Page 44: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

陣列的複製 由於無法透過指定運算子來複製陣列,所以必須像

下面的程式這樣子進行複製。

Page 45: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

逐一走過陣列的元素就叫做走訪 (traverse) 。

Page 46: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

多維陣列 也可以將「陣列」作為陣列的元素,這種陣列又稱

為多維陣列 (multidimensional array) 。

Page 47: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269
Page 48: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

初始化子 沒有給予初始化子的元素,將自動以 0 初始化。 多維陣列的初始化子沒有必要以 { } 來作成巢狀結構。

Page 49: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

列舉 表示可以表示值的「集合體」。 宣告表示狗、貓、猴的集合體之列舉

(enumeration) 。 Animal 是列舉名稱 (enum-name) ,而 { } 中的 Dog 、 Cat 、 Monkey 則是列舉元(enumerator) 。

無法對列舉的變數使用插入運算子來讀入值,此時會暫且將值讀入 int 型態的變數 type 。

宣告 animal 型態的變數「 selected 」。

Page 50: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269
Page 51: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

表示有限範圍的整數之整數型態有 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

整數常值可以用十進位、八進位以及十六進位來表示。必要的時候,還必須在最後面加上整數尾碼 U 或 L 來指定型態。

必要的時候,浮動小數點常值必須在最後加上浮動小數點尾碼 U 或 L 來指定型態。

迴圈的控制應該使用整數型態而不是浮動小數點型態。 bool 型態是表示真和偽的型態。布林常值有 true 和 false 這

兩個。 如果插入 boolalpha操作子,就可以將 bool 型態的值以字元

而非整數值來輸出。 物件就是用來表現值的記憶區域。 運算式和型態在記憶體上所佔有的大小,可以使用 sizeof 運

算子來取得。 sizeof 運算子所產生的 size_t 型態是在 <cstddef> 標頭內被

typedef 宣告。 typedef 宣告可以給予原有的型態一個新的名稱。 型態的相關資訊可以透過 typeid 運算子來取得。

Page 53: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

整數之間的計算結果會是整數,而浮動小數點數之間的計算結果則會是浮動小數點數。

浮動小數點型態和整數型態等不同型態之間的數值計算,會自動進行型態轉換。

要將運算式的值轉換成以其他型態來表現的值,只要進行轉型 ( 型態轉換 ) 即可。

轉型有轉型寫法、函數寫法、動態轉型、靜態轉型、強制轉型以及常數性轉型這六種。整數和浮動小數點數之間的型態轉換,可以用轉型寫法、函數寫法和靜態轉型的任何一種來進行。

集合同型態的物件,並在記憶體上排成一線就是陣列,陣列是以元素型態、名稱、元素數來作為特徵。

陣列的各個元素可以透過索引運算子 [ ] 來存取。索引是指示元素位置 ( 位於開頭之後的第幾個元素 ) 的值。

Page 54: 明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269

宣告陣列時一定要給予元素數 ( 作為常數運算式 ) ,如果需要表示元素數的變數的話,可以將元素數作為常數物件來實現。另外,宣告過的陣列 a 的元素數,可以使用sizeof(a) / sizeof(a[0]) 來求取。

不可以使用指定運算子「 = 」來完全複製陣列的所有元素。 對陣列的元素進行有規律的操作時,很適合使用 for 敘述。 以陣列作為元素的陣列就是多維陣列,透過視維數之不同

來多重地使用索引運算子 [ ] ,就可以存取各個元素。 列舉可以表示某個範圍的整數之集合體,各個列舉元會是

表示值的名稱。 對整數常數給予名稱時,應該使用常數物件或列舉,而不

是類似對象巨集。