C Primer Plus (第五版)中文版——第 7 章 C 控制語句:分支和跳轉
7.1 if 語句
if 語句被稱為分支語句(branching statement)或選擇語句(selection statement),它提供了一個交匯點,在此處程式需要選擇兩條分支的一條前進。其一般形式為:
if(expression)
statement
若 expression 為真,執行 statement;否則,跳過該語句。statement 可以是單個語句也可以是複合語句。
7.2 在if 語句中新增 else 關鍵字
C 可以通過使用 if else 形式來在兩個語句間作出選擇。其一般形式為:
if(expression) statement1 else statement2
若 expression 為真,執行 statement1;否則,執行 statement2。語句可以是單個語句也可以是複合語句。
7.2.1 另一個例子:介紹 getchar() 和 putchar()
getchar() 和 putchar() 是專門面向字元 I/O 而設計的一對 C 函式。getchar() 函式沒有引數,它返回來自輸入裝置的下一個字元。putchar()函式列印它的引數。
ch = getchar(); /*讀取下一個輸入字元並賦給變數 ch */
putchar(ch); /*將先前賦給 ch 的值作為字元打印出來*/
7.2.2 ctype.h 系列字元函式
ctype.h 標頭檔案包含一系列標準的函式,可以用來分析字元。這些函式接受一個字元作為引數,如果該字元屬於某特定的種類則返回非零值(真),否則返回零(假)。
7.2.3 多重選擇 else if
else if 可以擴充套件 if else 結構來適應兩個以上的選擇情況,其一般形式為:
if(expression1)
statement1
else if(expression2)
statement2
else
statement3
若 expression1 為真,執行 statement1;若 expression1 為假而 expression2 為真,則執行 statement2;若 expression1 為假且 expression2 為加,則執行 statement3。語句可以是單個語句也可以是複合語句。可以把多個所需的 else if 語句連成一串使用。
7.2.4 else 與 if 配對
else 與 if 配對規則:若沒有花括號指明,else 和與它最接近的一個 if 相匹配。
7.2.5 多層巢狀的 if
7.2.3所示的是巢狀 if 的一種形式,這是從一系列的二選一中進行選擇的。當進行了特定的選擇後又導致額外的選擇時將使用另一種巢狀 if。例:一個程式可能用 if else 在男和女之間選擇,在 if else 的每個分支中可能包含另一個 if else 來區別不同收入群體。
7.3 獲得邏輯性
7.3.1 邏輯運算子及改變拼寫法
邏輯運算子 | ||
運算子(傳統寫法) | 含義 | iso646.h |
&& | 與 | and |
|| | 或 | or |
! | 非 | not |
7.3.2 優先順序
! 運算子的優先順序高於乘法運算,和增量運算子的優先順序相同,僅次於圓括號。&& 運算子的優先順序高於 ||,二者的優先順序都低於關係運算符而高於賦值運算子。
7.3.3 求值的順序
邏輯表示式是從左到右求值的。一旦發現有使表示式為假的因素,立即停止求值。&& 和 || 運算子是序列的分界點 ,在程式從一個運算元前進到另一個運算元之前,所有的副作用都會生效。例如:
while(x++ <10 && x + y <20)
&& 運算子是序列分界點,它保證在對右邊表示式求值之前,先把 x 的值加 1。
7.5 條件運算子 ?:
條件預算符 ?: 是 C 中唯一的一個三元運算子,條件表示式的一般形式為:
expression1 ? expression2: expression3 /*條件表示式*/
若 expression1 為真,條件表示式的值等於 expression2 的值;若 expression1 為假,條件表示式的值等於 expression3 的值。
7.6 迴圈輔助手段:continue 和 break
7.6.1 continue 語句
continue 語句可以與三種迴圈形式中的任一種一起使用。它導致程式控制跳過本次迴圈中的剩餘語句,開始下一次迴圈。
- 對於 for 迴圈,當 continue 語句被執行時,下一個動作是求 “更新表示式” 的值,然後再求 “判斷表示式” 的值
- 對於 while 迴圈,當 continue 語句被執行時,下一個動作是求 “判斷表示式” 的值
- 對於 do while 迴圈,當 continue 語句被執行時,下一個動作是求 “判斷表示式” 的值
7.6.2 break 語句
break 語句可以與三種迴圈形式中的任一種以及 switch 語句一起使用。它導致程式控制跳過包含它的迴圈或 switch 語句的剩餘部分,繼續執行緊跟在迴圈或 switch 後的下一條命令。在 for 迴圈中,break 語句被執行時,控制段的更新部分也將被跳過。
7.7 多重選擇:switch 和 break
switch (expression)
{
case lablel1:
statement1 /*可選*/
break; /*可選*/
case lablel2:
statement2 /*可選*/
break; /*可選*/
default: /*可選*/
statement3 /*可選*/
}
圓括號中的 switch 判斷表示式應具有整數值(包括 char 型別)。case 標籤必須是整型(包括 char)常量或整數常量表達式。程式按照 expression 值跳轉到相匹配的 case 標籤處,然後程式流程繼續通過所有剩餘的語句,直到再次由 break 語句重定向。如果沒有與 expression 值相匹配的 case 標籤,那麼控制定位到標籤為 default 的語句。否則,控制傳遞 switch 的下一條語句。
7.12 程式設計練習
程式設計練習參考程式