愛伊米

C語言簡明教程(四)選擇程式設計

選擇程式設計

實驗內容

前面講述了順序結構設計,同時在裡面穿插了 C 語言的資料型別和運算子等內容。這節課程我們將開始學習選擇結構的程式設計。

在順序結構設計中,每個語句都是按照自上而下的順序執行的,執行完成一個語句就自動執行下一個語句,是無條件的,不必作任何判斷。

但是生活中很多情況下,需要根據某個條件是否滿足來決定是否執行相應的操作。比如說遇到紅燈需要等待,遇到綠燈直接前行,這就是一個判斷。這節課我們就要學習這些內容。

知識點

條件判斷案例

用  語句實現選擇結構

關係運算符和關係表示式

邏輯運算子和邏輯表示式

條件運算子和條件表示式

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

接下來,我們將透過一些實際的例子,來熟悉 C 語言的選擇結構,以及相關語言的語法特點。

大家應該還記得我們上一節課做過一個題目,這個題目是用來求一元二次方程的根的,原來的程式如下:

這個程式我們並沒有加入一個  是否大於等於 0 的一個判斷,現在我們對這個程式做出一些改動,加入判斷語句,輸入以下程式碼:

編譯並執行:

我們執行兩次,分別輸入 a,b,c 不同的值。

會看到以下結果:

程式分析

這就是一個選擇結構, 對給定的條件  進行判斷後,形成了兩條路徑,如果  成立,執行 ,如果  不成立,執行  中的內容。

知識點:

可以把幾個語句放在一個 {} 中,這樣如果  不成立,就會執行  裡面所有的內容;

假如沒有 {} 同時 ,這個時候執行完 ;

語句以後會從 ;

接著往下執行,大家可以自己思考下加不加 {} 的影響。

用 if 語句實現選擇結構

在 C 語言中選擇結構最常用的就是  語句,為了瞭解  語句的應用,我們舉一個例子進行說明。

編寫源程式 6-2。c:

執行兩次,分別輸入 6 和 2。結果如下:

程式分析

函式體的前三個語句如下:

這段程式碼宣告一個整型變數 ,並初始化為 0,接著提示使用者輸入一個 1~10 的數字。使用  函式讀取這個數值,並存儲在變數  中。

下一條語句就是一條測試輸入值的  語句

比較  變數的值和 5,如果  大於 5,就執行下一條語句,然後進入程式的下一個部分。如果  不大於 5,就跳過 。

接下來這條語句和上一條語句意義相同

透過上面的兩個例子,我們可以初步的瞭解怎樣使用  語句去實現選擇結構了。

例如:

程式分析

我們 6-1。c 的例子便是上面你的第二種形式,6-2。c 的例子便是第一種形式。

整個  語句可以寫在多行上,也可以寫在一行上面。如:

但是為了程式的清晰,我們很少用上面的形式,而是採用鋸齒的形式。

C 語言提供 6 種關係運算符,如下所示:

關係運算符的值只能是 0 或 1。關係運算符的值為真時,結果值都為 1。關係運算符的值為假時,結果值都為 0。

有時要求判斷的條件不是一個簡單的條件,是有幾個條件組合而成的複合條件。比如“如果週六下雨,我在實驗樓做一個專案課”,這就是有兩個條件組合而成的符合條件,需要同時滿足兩個條件:(1)是否週六(2)是否下雨,只有滿足是週六又在下雨,才來實驗樓做專案課。

C 語言中提供了三種邏輯運算子:

之前我們做過使用者輸入一個大寫字母,命令列顯示與之對應小寫字母的程式。但是在當時我們並沒有去判斷輸入的字元是否是一個大寫字母,現在我們從新編寫程式。

編寫源程式 6-3。c:

執行結果如下:

程式分析

在這段程式中  檢查輸入的字元是否大於等於 ‘A’,且小於等於 ‘Z’。兩者同時滿足才會執行後面的語句。

有一種  語句,當被判別的表示式的值為“真”或“假”時,都執行一個賦值語句且向同一個變數賦值。如:

程式分析

當  時將 a 的值賦值給 max,當  時將 b 的值賦給 max,可以看到無論  是否滿足,都是給同一個變數賦值。

C 語言提供的條件運算子和條件表示式來處理這類問題可以把上面的 if 語句改寫為 。是一個“條件表示式”。是條件運算子。

如果  為真,則表示式的值等於 a,否則取值為 b。條件運算子由兩個符號(?和:)組成,必須一起使用。要求三個物件,成為三目運算子,它是 C 語言唯一的一個三目運算子。

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

表示式 1?表示式 3:表示式 2

C語言簡明教程(四)選擇程式設計

這次我們列舉一個打折的例子。

假定產品的單價是 3。5,提供 3 個級別的折扣:數量超過 50,折扣為 15%;數量超過 20,折扣為 10%;數量超過 10,折扣為 5%。下面是程式碼。

編寫源程式 6-4。c:

執行結果如下:

C語言簡明教程(四)選擇程式設計

程式分析

比較有趣的是根據輸入的數量計算產品的總價的語句。該語句包含額三個條件運算子,所以有點難以理解:

把它分解為各個部分,就容易理解它是如何得出正確結果的。

總價是用表示式  計算出來的,它只是將單價乘以訂購數量。其數量必須乘以由數量決定的折扣因子

如果數量超過 50,總價必須乘以 (1。0-discount3),這用下面的表示式

如果  表示式就乘以 (1。0-discount3),完成賦值運算子右邊的運算

否則,表示式乘以 (1。0-something_else),其中 something_else 是另一個條件運算子的結果。

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

語句只有兩個分支可供選擇,而實際中常常用到多分支選擇。例如成績分類(85 分以上為 A,70-85 為 B,60-69 為 C 等),人口的分類(可以分為老、中、青、少、兒童),工資統計分類等等,如果我們使用 if 語句就會巢狀很多層數,影響可讀性。C 語言提供的  語句直接處理多分支選擇。

我們首先用一個例子說明,編寫 6-5。c 程式:

執行結果:

程式分析

等級 grade 定義為字元變數,從鍵盤輸入一個小寫字母,賦給變數 grade,switch 得到 grade 的值並和各 case 中給定的值(‘a’‘b’‘c’‘d’之一)相比較,如果和其中之一相同,則執行該 case 後面的語句(即 printf 語句)。如果輸入的字元與‘a’‘b’‘c’‘d’都不相同,就執行 default 後面的語句,輸出 error!資訊。

注意每個  語句中,後面都有一個  語句,該語句的作用是使得當前流程跳轉到閉括號 ‘}’ 後面的語句。

假如去掉程式中所有  語句,使用者從鍵盤輸入 b 以後,將會執行接下來的所有語句,並且還要執行下去,結果如下:

透過上例我們已經基本瞭解了  語句。其一般形式如下:

switch(表示式) { case 常量 1:語句 1 case 常量 2:語句 2 。 。 。 case 常量 n :語句 n default :語句 n+1 }

說明:

括號內的“表示式”,其值的型別應為整數型別或者字元型別,不可以是其他資料型別。

語句為選擇項,可有可無。另外, 後面可以不加  語句。

我們本節課基本上學習了 C 語言選擇結構程式設計的大部分內容,但是並沒給大家更多的案例和習題,接下來我們寫一個小的專案課來鞏固本節課的學習。