1. 程式人生 > 其它 >第 4 章 選擇結構程式設計

第 4 章 選擇結構程式設計

第 4 章 選擇結構程式設計

選擇結構要解決的問題:根據某個條件是否滿足來決定是否執行指定的操作任務,或者從給定的兩種或多種操作選擇其一。

4.1 選擇結構和條件判斷

C 語言中有兩種選擇語句:

  1. if 語句:用來實現兩個分支的選擇結構;
  2. switch 語句:用來實現多分支的選擇結構。

4.2 用 if 語句實現選擇結構

4.2.1 用 if 語句處理選擇結構舉例

4.2.2 if 語句的一般形式

if 語句的一般形式如下:

if (表示式) 語句 1
[else 語句 2]
  • if 語句中的“表示式”可以是關係表示式、邏輯表示式、數值表示式。
  • 方括號內的 else 子句是可選的。
  • 語句 1 和 語句 2 可以是一條簡單的語句,也可以是一個複合語句。

if 語句最常用的有以下 3 種形式:

if (表示式)
    語句 1
if (表示式)
    語句 1
else
    語句 2
if (表示式 1)
    語句 1
else if (表示式 2)
    語句 2
...
else
    語句 n

4.3 關係運算符和關係表示式

在 C 語言中,比較符(或稱比較運算子)成為關係運算符。

4.3.1 關係運算符及其優先次序

C 語言提供 6 中關係運算符:

  • <
  • <=
  • >
  • >=
  • ==
  • !=

關於優先次序:

  1. 前 4 種關係運算符(<, <=, >, >=)的優先順序相同,後 2 種也相同。
  2. 關係運算符的優先順序低於算術運算子。
  3. 關係運算符的優先順序高於賦值運算子。

4.3.2 關係表示式

用關係運算符將兩個數值或數值表示式連線起來的式子,稱為關係表示式。

關係表示式的值是一個邏輯值,即“真”或“假”。

在 C 的邏輯運算中,以“1”代表“真”,以“0”代表“假”。

4.4 邏輯運算子和邏輯表示式

用邏輯運算子將關係表示式或其他邏輯量連線起來的式子就是邏輯表示式。

4.4.1 邏輯運算子及其優先次序

有 3 種邏輯運算子,與(&&),或(||),非(!)。

表 4.1 C 邏輯運算子及其含義

運算子 含義 舉例 說明
&& 邏輯與 a&&b 如果 a 和 b 都為真,則結果為真,否則為假
|| 邏輯或 a||b 如果 a 和 b 有一個以上為真,則結果為真,二者都為假時,結果為假
! 邏輯非 !a 如果 a 為假,則 !a 為真,如果 a 為真,則 !a 為假
  • "&&"和"||"是雙目(元)運算子,它要求有兩個運算物件(運算元)。
  • “!”是一目(元)運算子,只要求有一個運算物件。

在一個邏輯表示式中如果包含多個邏輯運算子,按以下的優先次序:

  1. ! > && > ||,“!”為三者中最高的。
  2. 邏輯運算子中的“&&”和“||”低於關係運算符,“!”高於算術運算子。

4.4.2 邏輯表示式

  • 邏輯表示式的值是一個邏輯值“真”或“假”。

  • C 語言在表示邏輯運算結果時,用 1 代表“真”,用 0 代表“假”。

  • C 語言在判斷一個量是否為“真”時,以 0 代表“假”,以非 0 代表“真”。

  • 由系統給出的邏輯運算結果不是 0 就是 1。而在邏輯表示式中作為參加邏輯運算的運算物件可以是 0 或任何其他非 0 的數值。

  • 實際上,邏輯運算子兩側的運算物件不但可以是 0 和 1,或者時 0 和非 0 的整數,也可以時字元型、浮點型、列舉型或指標型的純量資料,最終以 0 和非 0 來判斷它們屬於“真”或“假”。

在邏輯表示式的求解中,並不是所有的邏輯運算子都被執行,只是在必須執行下一個邏輯運算子才能求出表示式的解時,才執行該運算子。

4.5 條件運算子和條件表示式

條件運算子由兩個符號(? 和 :)組成,要求有 3 個操作物件,稱為三目(元)運算子。它是 C 語言中唯一的一個三目運算子。

條件表示式的一般形式為:

表示式 1 ? 表示式 2 : 表示式 3
  • 條件運算子的執行順序:先求解表示式 1,若為非 0(真),則表示式 2 的值作為條件表示式的值;反之則以表示式 3 的值作為條件表示式的值。
  • 條件運算子優先於賦值運算子。
  • 表示式 2 和表示式 3 可以是數值表示式,還可以是賦值表示式或函式表示式。

條件表示式相當於一個不帶關鍵字 if 的 if 語句,可以處理簡單的選擇結構。

4.6 選擇結構的巢狀

在 if 語句中又包含一個或多個 if 語句稱為 if 語句的巢狀。其一般形式如下:

if ()
    if ()
        語句 1
    else
        語句 2
else
    if ()
        語句 3
    else
        語句 4

注意 if 與 else 的配對關係,else 總是與它上面的最近的未配對的 if 配對。

如果 if 與 else 的數目不一樣,可以加花括號來確定配對關係。例如:

if ()
{
    if ()
        語句 1
}
else
    語句 2

4.7 用 switch 語句實現多分支選擇結構

C 語言提供 switch 語句直接處理多分支選擇,也可以用巢狀的 if 語句來處理。

switch 是多分支選擇語句。switch 語句的作用是根據表示式的值,使流程跳轉到不同的語句。switch 語句的一般形式如下:

switch (表示式)
{
    case 常量 1 : 
        語句 1
    case 常量 2 : 
        語句 2
    ...
    case 常量 n : 
        語句 n
    default : 
        語句 n + 1
}
  • switch 語句中括號內的“表示式”的值的型別應為整數型別(包括字元型);
  • switch 語句的花括號內是一個複合語句,它是 switch 語句的語句體。語句體內包含多個以關鍵字 case 開頭的語句行和最多一個以 default 開頭的行。case 後面跟一個常量(或常量表達式)。case 和 default 起到標記的作用,用來標誌一個位置。 執行 switch 語句時,先計算 switch 後面的“表示式”的值,然後與某一個 case 標記中常量相同,就執行此 case 標記後的語句。如果沒有匹配到任何一個 case 標記中的常量,就執行 default 標記後的語句。
  • 在 switch 語句體中可以沒有 default 標記。
  • 各個 case 與 default 標記出現次序不影響執行結果。
  • 每一個 case 標記後的常量必須互不相同。
  • case 標記只標誌的作用。在匹配到一個 case 標記後,就從此標記開始執行下去,不再進行判斷。
  • 一般情況下,在執行完一個 case 子句後,應當用 break 語句跳出 switch 語句。
  • 多個 case 標記可以公用一組執行語句。

4.8 選擇結構綜合舉例

習題