選擇程式設計
實驗內容
前面講述了順序結構設計,同時在裡面穿插了 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
這次我們列舉一個打折的例子。
假定產品的單價是 3。5,提供 3 個級別的折扣:數量超過 50,折扣為 15%;數量超過 20,折扣為 10%;數量超過 10,折扣為 5%。下面是程式碼。
編寫源程式 6-4。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 語言選擇結構程式設計的大部分內容,但是並沒給大家更多的案例和習題,接下來我們寫一個小的專案課來鞏固本節課的學習。