540 likes | 723 Views
明解 C++ 教學手冊 柴田望洋 博士 著 書號: PG20269. 第四章 資料型態和陣列. 本章要學習的是整數型態和浮動小數點型態等內建資料型態、有效率地表示同型態之資料的陣列,以及表示整數值之集合體的列舉。. 4-1 整數型態. 整數型態 整數型態 (integer type) 是可表示有限範圍內的連續整數之型態。 在宣告型態時加上 unsigned 或 signed 等 型態修飾詞 (type specifier) ,可以指定要使用 無符號的整數型態 還是 有符號的整數型態 。.
E N D
第四章 資料型態和陣列 本章要學習的是整數型態和浮動小數點型態等內建資料型態、有效率地表示同型態之資料的陣列,以及表示整數值之集合體的列舉。
4-1 整數型態 整數型態 整數型態(integer type)是可表示有限範圍內的連續整數之型態。 在宣告型態時加上unsigned或signed等型態修飾詞(type specifier),可以指定要使用無符號的整數型態還是有符號的整數型態。
整數型態還可依據其能夠表示之個數,分為char、short int、int、long int這四種,除了char型態以外,其他三個形態都各有無符號版和有符號版。 這些型態與bool型態及wchar_t型態合稱為泛整數型態(integral type)或整數型態(integer type)。
C++的處理器是以<climits>標頭來提供整數型態的各型態所能表現之數值範圍。C++的處理器是以<climits>標頭來提供整數型態的各型態所能表現之數值範圍。
#define指令是進行「取代」之指示,像這樣的取代指令就是類似對象巨集(object-like macro),而INT_MAX這樣的名稱則是巨集名稱(macro name)。
使用類似對象巨集的優點為: 可以將值的管理集中在巨集定義的部份。 由於可以賦予常數值名稱,所以程式會比較容易解讀。
字元型態有以下三種: 單純字元型態 無符號的字元型態 有符號的字元型態
字元型態所能表現的範圍會因處理器而不同,這是因為各種處理器之字元型態在記憶體上所佔有的位元數不同。字元型態所能表現的範圍會因處理器而不同,這是因為各種處理器之字元型態在記憶體上所佔有的位元數不同。
整數常值是以十進位數、八進位數以及十六進位數這三種基數來表示。整數常值是以十進位數、八進位數以及十六進位數這三種基數來表示。
物件和sizeof運算子 變數的正式名稱為物件(object)。
sizeof運算子有以下這兩種形式: sizeof 運算式 izeof(型態)
size_t型態和typedef sizeof運算子所產生的size_t型態,並不是C++本身的內建型態(built-in type),必須引入<cstddef>標頭才能使用。 typedef宣告可以給予即存型態另一個名稱。
typeid運算子 typeid運算子可以取得型態的各種相關資訊。
bool型態 不是0的數值會被視為true,而0則會被視為false。
4-2 浮動小數點型態 浮動小數點型態 浮動小數點型態()可以表示具有小數點以下部份之實數,它可分為以下這三種: float double long double
浮動小數點常值可以使用附指數之數學表示法。浮動小數點常值可以使用附指數之數學表示法。 若是加上浮動小數點尾碼(floating suffix),就可以指定型態。
4-3 運算和型態 運算和型態
在兩邊運算元的型態不同的運算中,會進行隱式形態轉換(implicit type conversion)。
作為運算對象的運算元之型態不同時,型態較小的運算元會先轉換成較大的型態再進行計算。作為運算對象的運算元之型態不同時,型態較小的運算元會先轉換成較大的型態再進行計算。
顯式型態轉換 要用實數求取整數除以整數的商時,至少要有一邊的運算元是double型態,並且使用「/」運算子。
顯式型態轉換的轉型寫法: (型態) 運算式 這種顯式型態轉換(explicit type conversion)就叫做轉型(cast),其中的( )則是轉型運算子。 顯式型態轉換的函數寫法: 型態 (運算式)
static運算子可以執行靜態轉型(static cast),它是適用於隱式型態轉換的「自然型態轉換」所使用的運算子。
可以使用轉型寫法、函數寫法和static cast的其中之一,來進行整數和浮動小數點數之間的型態轉換。
迴圈控制 下列程式的執行結果會視處理器而有所不同。
作為判斷迴圈之基準的變數,應該使用整數而非浮動小數點數。作為判斷迴圈之基準的變數,應該使用整數而非浮動小數點數。
4-4 陣列 陣列 陣列是由同型態之變數(元素)集合而成的。 陣列是透過賦予元素型態、變數名稱和元素數來宣告,而元素數必須是常數。
各元素的存取是藉由在[ ]中賦予整數型態之索引(subscript)來進行。 由於開頭元素的索引會是0,所以各元素從頭開始會依序是a[0]、a[1]、a[2]、a[3]、a[4]、a[5]。
陣列和for敘述 下面是使用陣列的程式。
使用陣列處理成績 使用陣列改寫List 4-17的程式如下:
加上const來宣告的物件,就可以作為無法變更值的常數運算式(const expression)來使用。
陣列的初始化 給予陣列的初始化子是用逗號(,)來區隔,並依序排在{ }之中。 若是不給予元素數來宣告陣列,就會依初始化子的數量來決定陣列的元素數。
陣列的元素數 陣列a的元素數是使用sizeof(a) / sizeof(a[0])來求取。
陣列型態的資訊 typeid運算子也可以調查陣列的型態。
陣列的複製 由於無法透過指定運算子來複製陣列,所以必須像下面的程式這樣子進行複製。
多維陣列 也可以將「陣列」作為陣列的元素,這種陣列又稱為多維陣列(multidimensional array)。
初始化子 沒有給予初始化子的元素,將自動以0初始化。 多維陣列的初始化子沒有必要以{ }來作成巢狀結構。
4-5 列舉 列舉 表示可以表示值的「集合體」。 宣告表示狗、貓、猴的集合體之列舉(enumeration)。Animal是列舉名稱(enum-name),而{ }中的Dog、Cat、Monkey則是列舉元(enumerator)。 無法對列舉的變數使用插入運算子來讀入值,此時會暫且將值讀入int型態的變數type。 宣告animal型態的變數「selected」。