450 likes | 1.75k Views
明解 C++ 教學手冊 柴田望洋 博士 著. 第二章 程式流程的分歧. 本章所要學習的是各種運算子,以及用來讓程式流程分歧的 if 敘述和 switch 敘述。. 2-1 if 敘述. if 敘述 ( 其一 ). 語法: if ( 條件 ) 敘述 只有在 條件 (condition) 成立時才會執行 敘述 。 true 和 false 是被稱為 布林常值 (boolean literal) 的 bool 型態的值。. if 敘述 ( 其二 ) 語法: if( 條件 ) 敘述 else 敘述
E N D
第二章 程式流程的分歧 本章所要學習的是各種運算子,以及用來讓程式流程分歧的if敘述和switch敘述。
2-1 if敘述 if敘述 (其一)
語法: if (條件) 敘述 只有在條件(condition)成立時才會執行敘述。 true和false是被稱為布林常值(boolean literal)的bool型態的值。
if敘述 (其二) 語法: if(條件) 敘述 else 敘述 若條件是true就執行前面的敘述,false則執行後面的敘述。
相等運算子 (equality) 「==」是用來判斷左右運算元是否相等的運算子,而判斷是否不相等的就是「!=」運算子。
邏輯否定運算子 「!」是將真和偽反轉的邏輯否定運算子(logical negative operator)。
變成巢狀敘述的if敘述 在if敘述中放入if敘述,就成了「巢狀結構」的敘述。
運算式和判斷 使用運算子將變數和常值結合起來,就叫做運算式(expression)。 例如: c + 32 a = c + 32 調查運算式的值叫做判斷(evaluation)。
運算式敘述和空敘述 在運算式加上分號的敘述,就叫做運算式敘述(expression statement)。 只有分號的運算式敘述,就叫做空敘述(null statement)。
邏輯運算子 「&&」和「||」都是執行邏輯運算的邏輯運算子(logical operator)。
邏輯積運算子「&&」 「x&&y」可以想成是「x且y」。 邏輯和運算子「||」 「 x||y」可以想成是「x或y」。
條件運算子 下列程式可以不使用if敘述來實現。
條件運算子(conditional operator)是唯一的三元運算子,而使用此運算子的就是條件運算式(conditional expression)。
三值的最大值 「處理的流程」就稱為演算法(algoruthm)。
區塊 用{ }框起來的並排敘述就叫做區塊(block)或複合敘述(compound statement)。 只能是單一敘述,但又不得不以複數敘述來執行的部份,可以將該部份的敘述匯整為區塊。 下面這些都是區塊。
逗號運算子 使用逗號並排的兩個運算式,會被看成是單一運算式,在此運算式之後加上分號,則會使它變成單一敘述。 逗號運算子左側的運算式只會進行判斷,其值將會被捨去,而判斷右側運算式所得到的型態和值,則會成為左右運算式全體的型態和值。
排序兩個數值 排序(sort)是藉由交換變數的值來進行。
排序分為升冪排序和降冪排序這兩種。 爲了交換兩個變數的值,還需要一個作業用的變數。 在區塊內進行交換的步驟如下:
有條件的宣告 只在該if敘述中使用,且用來判斷條件分歧之變數,必須在條件的部份宣告。
求取餘數的「%」運算子,只能在兩個運算元都是整數的情況下使用。求取餘數的「%」運算子,只能在兩個運算元都是整數的情況下使用。
2-2 switch敘述 switch敘述
switch敘述可以根據判斷條件式之後的值,將程式流程分岐成數條。switch敘述可以根據判斷條件式之後的值,將程式流程分岐成數條。 像「case1:」這種表示程式所要移往的目標之標記,就是標籤(label),標籤的值必須是常數。 程式流程移往標籤之後,就會執行其後的敘述。 若遇到break敘述的話,程式的流程就會跳脫switch敘述。
當判斷條件式之後所得的值,和每一個case都不一致時,程式的流程就會移到default:標籤。當判斷條件式之後所得的值,和每一個case都不一致時,程式的流程就會移到default:標籤。
if敘述和switch敘述都夠將程式的流程分岐,但switch敘述比較容易讓人看清程式的整體。if敘述和switch敘述都夠將程式的流程分岐,但switch敘述比較容易讓人看清程式的整體。 if敘述和switch敘述可以統稱為 選擇敘述(selection statement)。
2-3 關鍵字、識別字、運算子 關鍵字 關鍵字(keyword)不可以拿來作為變數等的名稱。
還有能夠模擬關鍵字的替換表示法(alternative representation)。
識別字 識別字(identifier)是賦予變數、函數、類別等的名稱。
分隔符號 用來區隔關鍵字與識別字的符號,就稱為分隔符號(punctuator)。 常值 字元常值、整數常值、字串常值都是構成程式的要素。
運算子 在運算子的一覽表中,越上面的運算子表示其優先順序(precedence)越高。 當優先順序相同的運算子連接在一起時,用來表示先執行左邊還是右邊的就是結合規則(associativity)。 判斷指定運算式時,可以得到指定後的左運算元的型態和值。
總結 使用運算子結合常值、變數之後就會變成運算式。原則上都可以判斷運算式的值。 判斷使用關係運算子、相等運算子、邏輯否定運算子以及邏輯運算子的運算式時,會產生bool型態的值。 條件的成立與否是以bool型態的真和偽來表示,0以外的值會被視為true,而0則會被視為false。 由於使用邏輯運算子的邏輯運算式會進行捷徑判斷,所以右側的運算元有可能不會被判斷。 加上分號的運算式就是運算式敘述。 只有分號的運算式敘述就叫做空敘述。 只在某條件成立時進行的處理,可以透過if敘述來實現。
以某條件的成立與否來進行不同的處理,可以透過if~else敘述來實現。以某條件的成立與否來進行不同的處理,可以透過if~else敘述來實現。 依據某個運算式的值,來將程式的流程分歧的處理,可以透過switch敘述來實現。 switch敘述會在程式的流程跳到標籤之後一直執行敘述,直到遇到break敘述為止。如果與每個case都不一致的話,程式流程就會跳到default標籤。 switch敘述最後的標籤也應該要有break敘述。 可以在if敘述和switch敘述的條件中宣告變數。而宣告好的變數只可以在該if敘述和switch敘述中使用。 if敘述和switch敘述統稱為選擇敘述。 用{ }將0個以上的敘述框起來就是區塊。區塊在語法上會被視為一個敘述。 type型態的x與y的交換,可以藉由{ type t = x; x = y; y = t; }來進行。
type型態的x和y的昇冪排序(排列成x <= y)是只在x大於y時,才進行x與y的交換。 只要使用三元運算子中的條件運算子「?:」,就可以將if敘述的工作濃縮在一個運算式中。 使用逗號運算子「,」來結合的運算式,在語法上會被視為一個運算式。 將複數個運算子並列的時候,會先執行優先順序較高的運算子。 當同樣優先順序的運算子並列的時候,該從哪邊開始執行運算是基於結合規則來決定的。 指定運算子是右結合,判斷指定運算式後所得到的是,指定後的左運算元之型態與值。 if和int等具有特別涵義的語句就是關鍵字。 運算子「&&」和「!」可以使用and和not來代替表示。 變數、函數、類別等的名字就是識別字。其開頭字元必須使用英文字母或底線,第2個字元以後才可以使用數字字元。其中的大寫以及小寫是有區別的。