1. 程式人生 > >C Primer Plus (第五版)中文版——第 7 章 C 控制語句:分支和跳轉

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  程式設計練習

程式設計練習參考程式