- C#實踐教程(第2版)
- 李乃文
- 2420字
- 2021-03-19 18:15:38
3.2 選擇語句
選擇語句并不是順序執行的,前面已經提到。如同人們生活中的不同選擇,程序中也存在著選擇。
如登錄系統時的驗證,當用戶名、密碼正確時便可進入系統,但只要密碼有誤,就不能進入系統。這是一種選擇,在不同的狀態下系統接下來執行不同的操作。
C#提供了多種選擇語句類型,以滿足不同的程序需求,如下所示。
□ if語句 當滿足條件時執行。
□ if else語句 當滿足條件時執行if后的語句,否則執行else后的語句。
□ if else if else if語句 當滿足條件時執行if后的語句,否則滿足第2個條件執行else if后的語句,否則滿足第3個條件執行else if后的語句。
□ switch case語句 不同條件下執行不同語句。
3.2.1 if語句
if語句是選擇語句中最簡單的一種,表示當指定條件滿足時,執行if后的語句。執行流程如圖3-1所示。

圖3-1 if語句流程圖
if語句執行時,首先判斷條件表達式是否為真:條件為真執行if語句下的語句塊,結束條件語句;條件為假直接結束條件語句塊,執行if語句塊后面的語句。語法如下:
if(條件表達式) {條件成立時執行的語句}
當條件表達式成立時,執行{}內的語句,否則不執行。if括號內和括號后不用使用分號;{}符號內的語句是基本語句,必須以分號結尾;{}符號后不需要使用分號,其用法如練習3-1所示。
【練習3-1】
程序中定義變量rpas表示用戶輸入的密碼,密碼的正確數據為“123456”,若密碼正確則輸出“登錄成功!”字樣,使用語句如下:
static void Main(string[] args) { Console.WriteLine("請輸入密碼:"); string rpas = Console.ReadLine(); if(rpas=="123456") { Console.WriteLine("登錄成功!"); } Console.WriteLine("登錄結束"); }
運行上述代碼,輸入正確的密碼“123456”和錯誤的密碼“123123”,當密碼正確,輸出“登錄成功!”字樣,如圖3-2所示;而當密碼有誤,如圖3-3所示,程序跳過了if語句塊的執行,直接執行后面的語句,輸出“登錄結束”字樣。

圖3-2 密碼驗證成功

圖3-3 密碼無效
3.2.2 if else語句
if else語句在if語句的基礎上,添加了當條件不滿足時進行的操作。執行流程如圖3-4所示。

圖3-4 if else語句流程圖
條件的成立只有兩種可能,即成立和不成立。if else語句在條件表達式成立時與if語句一樣執行if后的語句塊1,并結束條件語句;條件表達式不成立時執行else后的語句塊2,執行完成后結束條件語句。語法如下:
if(條件表達式) {條件表達式成立時執行的語句} else {條件表達式不成立時執行的語句}
else后的{}內同樣是基本語句,以分號結尾,{}符號后不需要使用分號,如練習3-2所示。
【練習3-2】
同樣以密碼的驗證為例,在練習3-1的基礎上添加密碼驗證失敗的提示,即密碼有誤時,輸出“密碼有誤!”字樣,代碼如下:
static void Main(string[] args) { Console.WriteLine("請輸入密碼:"); string rpas = Console.ReadLine(); if (rpas == "123456") { Console.WriteLine("登錄成功!"); } else { Console.WriteLine("密碼有誤!"); } Console.WriteLine("登錄結束"); }
同樣是密碼的登錄,這次添加密碼無效時需要執行的語句,則輸入錯誤的密碼時,其效果如圖3-5所示。程序跳過了if語句塊的執行,而執行else語句塊中的語句,輸出“密碼有誤!”字樣。

圖3-5 密碼有誤
3.2.3 if else if語句
if else if語句相對復雜,它提供了多個條件來篩選數據,將數據依次分類排除。程序流程如圖3-6所示。

圖3-6 if else if語句流程圖
如圖3-6所示,if else if語句在程序進入語句時,首先判定第一個if下的條件1。
□ 條件1成立,執行語句塊1并結束條件語句。
□ 條件1不成立,判斷條件2,條件2成立,執行語句塊2并結束條件語句。
□ 條件2不成立,判斷條件3,條件3成立,執行語句塊3并結束條件語句。
□ 條件3不成立,執行語句塊4并結束條件語句。
圖中只有3個條件和一個else語句。在if else if語句中,條件可以是任意多個,但else語句小于等于1個。即else語句可以不要,也可以要,要的話只能有1個,因為條件只有成立和不成立兩種結果。
if else if語句基本語法如下:
if (條件表達式1) {語句塊1} else if (條件表達式2) {語句塊2} else if (條件表達式3) {語句塊3} … [else] {}
表達式和語句塊的語法同if語句和if else語句一樣,有如下的實例。
【練習3-3】
程序中定義變量age表示年齡,定義變量title表示稱呼,我國有著根據不同年齡對一個人的稱呼,如童年、少年、青年、中年、老年,根據年齡判斷稱呼,語句如下。
Console.WriteLine("請輸入年齡:"); int age =Convert.ToInt32(Console.ReadLine()) ; string title=""; if (age < 6) { title = "童年"; } else if (age < 17) { title = "少年"; } else if (age < 40) { title = "青年"; } else if (age < 65) { title = "中年"; } else { title = "老年"; } Console.WriteLine("{0}歲的人們稱為:{1}",age,title);
運行上述代碼,分別使用年齡15、23和45來測試程序的運行結果,其效果分別如圖3-7、圖3-8和圖3-9所示,輸出了對應的稱謂。

圖3-7 15歲時的稱呼

圖3-8 23歲時的稱呼

圖3-9 45歲時的稱呼
示例中第二個條件為age<17,雖然年齡小于17的還有童年,但童年在第一個條件中已經排除。因此這里使用age<17與使用age>=6 && age<17效果是一樣的。
提示
還有一些不需要使用最后的else語句的例子,此時,if和else if將所有的可能性都包括了。
3.2.4 switch語句
switch語句的完整形式為switch case default。switch語句與if else if語句用法相似,但switch語句中使用的條件只能是確定的值,即條件表達式等于某個常量,不能使用范圍。switch case語句流程圖如圖3-10所示。

圖3-10 switch語句流程圖
如圖3-10所示,switch語句在程序進入語句時,首先判定常量1是否與條件相等。常量可以是具體數值,也可以是表達式。
□ 條件與常量1相等,執行語句塊1并結束條件語句。
□ 條件與常量2相等,執行語句塊2并結束條件語句。
□ 條件與常量3相等,執行語句塊3并結束條件語句。
□ 條件與三個常量都不相等,執行語句塊4并結束條件語句。
圖中只有3個條件表達式和一個default語句。default語句表示剩余的情況,與else類似。
與if else if語句一樣,條件常量可以是任意多個,default語句可以不要,也可以要,要的話只能有1個,因為條件只有成立和不成立兩種結果。
switch語句基本語法如下:
switch (條件表達式) { case 常量1: 語句塊1 break; case 常量2: 語句塊2 break; case 常量3: 語句塊3 break; … [default] }
switch語句只使用一個{}包含整個模塊;break語句屬于跳轉語句,用于跳出當前選擇語句塊。
switch語句與if語句不同,當條件符合并執行完當前case語句后,不會默認跳出條件判斷,將會接著執行下一條case語句,使用break語句后,程序將跳出switch語句塊,執行后面的語句。
如當表達式等于常量1,執行了第一個case語句。若不使用break,將執行第二個case語句而無論表達式是否等于常量2;若使用了break,接下來將執行switch{}后的語句。對switch語句的使用,如練習3-4所示。
【練習3-4】
接收一個從1到7的任意數字,輸出對應的一周7天,其中,數字1對應星期一,使用語句如下:
Console.WriteLine("請輸入日期:"); int age = Convert.ToInt32(Console.ReadLine()); string title = ""; switch (age) { case 1: title = "星期一"; break; case 2: title = "星期二"; break; case 3: //部分代碼省略 break; case 7: title = "星期天"; break; } Console.WriteLine("您選擇了:{0}",title);
運行上述代碼,分別使用數字2和數字7來驗證程序的運行結果,如圖3-11和圖3-12所示。

圖3-11 選擇2的執行結果

圖3-12 選擇7的執行結果
注意
case語句的值是唯一的,即任何兩個case語句不能具有相同的值。
- Designing Machine Learning Systems with Python
- 玩轉Scratch少兒趣味編程
- Java 開發從入門到精通(第2版)
- Building a Game with Unity and Blender
- Rust實戰
- BeagleBone Media Center
- Wireshark Network Security
- Nexus規模化Scrum框架
- Couchbase Essentials
- Learning Material Design
- Python Web自動化測試設計與實現
- Web開發的平民英雄:PHP+MySQL
- 你真的會寫代碼嗎
- PHP動態網站開發實踐教程
- Moodle 3.x Developer's Guide