官术网_书友最值得收藏!

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語句不能具有相同的值。

主站蜘蛛池模板: 盐山县| 嘉荫县| 东明县| 闵行区| 扬中市| 淮南市| 郴州市| 龙江县| 清河县| 磐安县| 调兵山市| 济宁市| 淳化县| 青神县| 永修县| 济源市| 罗源县| 怀远县| 平罗县| 原阳县| 长白| 公安县| 藁城市| 阆中市| 新津县| 永康市| 廉江市| 芜湖市| 东莞市| 茂名市| 河北省| 富川| 克山县| 乐都县| 新民市| 武宣县| 乐亭县| 镇雄县| 汽车| 济源市| 开化县|