流程控制一If-Else與If-Else If結構
疑問:已經有了if結構為什么還會有如if-else,if-else if與switch這樣的選擇結構。
if-else結構
if-else結構也是選擇結構中的一種,可以讓代碼選擇執行,即“某些代碼可能執行,也可能不執行,有選擇地執行某些代碼”;比if結構相當于隱形的多了一個條件。
if-else結構的格式:
if(條件)
{
//執行條件為真的語句
}else
{
//執行條件為假的語句
}
執行原理:如果條件為真則執行if語句塊中的代碼,如果條件為假則執行else語句塊中的代碼;如果是if-else結構則必須成對出現,有if語句必有else語句,else關鍵字不能單獨出現。
示例1:去網吧上網需要身份證驗證是否為成年人。
使用if-else結構
示例2:某學校準備與國際接軌,考試分數不再以數字出現在試卷上改為成績:1 大于等于90-分 優秀;2 大于等于80分 良好;3 大于等于70分 中等;4 大于等于60分 合格 5 低于60分 不合格的評分機制(假定),使用分支if結構與if-else結構編程實現。
使用if結構實現。
int score;//輸入的成績
string result = "";//要輸出的評級
Console.WriteLine("請輸入考試成績");
score = Convert.ToInt32(Console.ReadLine());
if (score >= 90)
{
result = "優秀";
}
if (score >= 80 && score < 90)
{
result = "良好";
}
if (score >= 70 && score < 80)
{
result = "中等";
}
if (score >= 60 && score < 70)
{
result = "及格";
}
if (score < 60)
{
result = "良好";
}
Console.WriteLine("您的成績是: {0},根據成績您的評級為: {1}", score, result);
Console.ReadKey();
(1) result需要賦值,score不需要賦值的原因:score不報錯的原因是在if中使用之前已經由輸入語句進行賦值而result還沒有進行賦值所以會報出使用未賦值的變量的錯誤。
(2)使用變量result而不是直接在if語句塊中直接輸出評級的益處:1)便于擴展由具體if語句塊負責result的賦值 2)可以減少代碼量,最后統一輸出。
(3)類似的條件推薦依"順序"依次進行判斷,使程序顯得有條理性。
使用if結構實現
使用if-else結構時需要用到此結構的嵌套模式;嵌套模式中無論嵌套多少層else只會與離它上面最近的if進行配對,如下代碼所示:
int a = 5;
if (a > 6) //條件1
if (a < 8) //條件2
Console.WriteLine("條件2");
else
Console.WriteLine("配對條件?");
Console.WriteLine("=================");
Console.ReadKey();
else與if就近配對
沒有輸出"配對條件?"文本的原因是條件1的if下面又是一個if而此if下面有一個else,按就近配對原則if-else又是C#中的一種選擇結構,因此整個if-else結構中的代碼相當于一句C#語句 強大的VS工具通過格式化代碼會自動將其配對顯示,如下所示:
格式化代碼
if-else結構的嵌套模式
if(條件1)
{
//執行條件為真的語句
}else //與條件1的if判斷
{
if(條件2)//排除的條件2
{
//執行條件為真的語句
}else //與條件2的if判斷
{
.....//理論上可以一直嵌套,實際最合適的嵌套層級3級及以下
}
}
int score;
string result = "";
Console.WriteLine("請輸入考試成績");
score = int.Parse(Console.ReadLine());
if (score >= 90)
{
result = "優秀";
}
else
{
if (score >= 80)
{
result = "良好";
}
else
{
if (score >= 70)
{
result = "中等";
}
else
{
if (score >= 60)
{
result = "及格";
}
else
{
result = "不及格";
}
}
}
}
Console.WriteLine("您的成績是: {0},根據成績您的評級為: {1}", score, result);
條件中score>=80這個地方沒有再寫score<90,是因為在else中的判斷條件是在上次的score>=90條件不成立時才進入else語句塊中的,else語句塊中的if條件判斷中,隱含了把score>=90的剔除了,所以只寫條件score>=80相當于score>=80&&score<90,以下的score>=70是把大于80以上的剔除了,以此類推。
在實現評級的代碼中if結構中的條件使用了邏輯&&而if-else中則必須使用嵌套才能實現。
if-elseif的結構
為了屏蔽兩個結構各自的缺點,使用其優點,C#提供了一個優化的if-elseif的結構。
if-elseif的結構格式:
if(條件1)
{
//條件1為真時執行
}else if(條件2)
{
//條件2為真時執行
}
....//都是else if(條件n)
//最后有個else語句塊進行結尾
else //可以省略,推薦必有
{
//上面的條件都不滿足時執行
}
#region if-else if
int score;
string result = "";
Console.WriteLine("請輸入考試成績");
int.TryParse(Console.ReadLine(),out score);
if (score >= 90)
{
result = "優秀";
}
else if (score >= 80)//第一個條件不滿足時判斷這個條件
{
result = "良好";
}
else if (score >= 70)
{
result = "中等";
}
else if (score >= 60)
{
result = "及格";
}
else //以上條件都不滿足時執行
{
result = "不及格";
}
Console.WriteLine("您的成績是: {0},根據成績您的評級為: {1}", score, result);
#endregion
由此可以看出使用if-else if結構可以結合其他兩種結構的優點:1) 不用使用邏輯運算符 2) 不用使用嵌套。
當判斷有關聯的多條件時推薦使用這兩個選擇結構。
解釋疑問:通過以上示例可以看出使用if結構就可以代替以上兩種選擇結構,為什么還要有if-else與if-else if結構。
使用if-else if結構