天天看點

2.4C#的流程控制語句

作者:萬億神帝的夢

C#的流程控制語句

流程控制語句是程式設計語言中非常重要的一部分,它們可以控制程式的執行順序和邏輯,使得程式可以根據不同的情況做出不同的反應。C#中有三種基本的流程控制語句:順序結構、選擇結構和循環結構。本文将介紹這三種結構的文法和用法,并給出一些代碼示例。

順序結構

順序結構是最簡單的一種流程控制語句,它表示程式按照代碼的書寫順序從上到下依次執行每一條語句,不會發生跳轉。例如:

Console.WriteLine("Hello, world!"); // 第一條語句
int a = 10; // 第二條語句
int b = a + 5; // 第三條語句
Console.WriteLine(b); // 第四條語句
           

上面的代碼會依次輸出:

Hello, world!
15
           

選擇結構

選擇結構是根據給定的條件來決定執行哪一段代碼的流程控制語句,它可以實作程式的分支邏輯。C#中有兩種選擇結構:if結構和switch結構。

if結構

if結構是最常用的一種選擇結構,它的基本文法如下:

if (條件表達式)
{
    條件成立時執行的語句;
}
else
{
    條件不成立時執行的語句;
}
           

if結構會先判斷條件表達式的真假,如果為真,則執行大括号中的語句,如果為假,則執行else後面的語句。else部分可以省略,如果省略,則表示條件不成立時不執行任何操作。例如:

int score = 80; // 定義一個分數變量
if (score >= 60) // 判斷分數是否及格
{
    Console.WriteLine("Pass"); // 及格則輸出Pass
}
else
{
    Console.WriteLine("Fail"); // 不及格則輸出Fail
}
           

上面的代碼會輸出:

Pass
           

if結構還可以嵌套使用,即在一個if結構中再包含一個或多個if結構,以實作更複雜的邏輯判斷。例如:

int score = 80; // 定義一個分數變量
if (score >= 90) // 判斷分數是否為優秀
{
    Console.WriteLine("Excellent"); // 優秀則輸出Excellent
}
else // 如果不是優秀,則繼續判斷是否為良好或者及格
{
    if (score >= 80) // 判斷分數是否為良好
    {
        Console.WriteLine("Good"); // 良好則輸出Good
    }
    else // 如果不是良好,則繼續判斷是否為及格
    {
        if (score >= 60) // 判斷分數是否為及格
        {
            Console.WriteLine("Pass"); // 及格則輸出Pass
        }
        else // 如果不是及格,則輸出Fail
        {
            Console.WriteLine("Fail");
        }
    }
}
           

上面的代碼會輸出:

Good
           

為了簡化嵌套的if結構,C#還提供了else if的文法,它可以将多個if結構連接配接起來,形成一個分支鍊,每個分支對應一個條件和一個執行語句。例如:

int score = 80; // 定義一個分數變量
if (score >= 90) // 判斷分數是否為優秀
{
    Console.WriteLine("Excellent"); // 優秀則輸出Excellent
}
else if (score >= 80) // 判斷分數是否為良好
{
    Console.WriteLine("Good"); // 良好則輸出Good
}
else if (score >= 60) // 判斷分數是否為及格
{
    Console.WriteLine("Pass"); // 及格則輸出Pass
}
else // 如果都不滿足,則輸出Fail
{
    Console.WriteLine("Fail");
}
           

上面的代碼與前面的嵌套if結構的效果是一樣的,但是更加簡潔和清晰。

switch結構

switch結構是另一種選擇結構,它的基本文法如下:

switch (要判斷的變量或表達式)
{
    case 值1:
        執行語句1;
        break;
    case 值2:
        執行語句2;
        break;
    ...
    case 值n:
        執行語句n;
        break;
    default:
        預設執行語句;
        break;
}
           

switch結構會根據要判斷的變量或表達式的值與每個case後面的值進行比較,如果相等,則執行對應的語句,并跳出switch結構。如果都不相等,則執行default後面的語句,并跳出switch結構。default部分可以省略,如果省略,則表示沒有比對的值時不執行任何操作。break語句是用來結束每個case分支的,如果不寫break語句,則會發生穿透現象,即繼續執行下一個case分支的語句,直到遇到break語句或者switch結構結束為止。例如:

int month = 3; // 定義一個月份變量
switch (month) // 根據月份判斷季節
{
    case 12:
    case 1:
    case 2:
        Console.WriteLine("Winter"); // 冬季則輸出Winter
        break;
    case 3:
    case 4:
    case 5:
        Console.WriteLine("Spring"); // 春季則輸出Spring
        break;
    case 6:
    case 7:
    case 8:
        Console.WriteLine("Summer"); // 夏季則輸出Summer
        break;
    case 9:
    case 10:
    case 11:
        Console.WriteLine("Autumn"); // 秋季則輸出Autumn
        break;
    default:
        Console.WriteLine("Invalid month"); // 非法月份則輸出Invalid month
        break;
}
           

上面的代碼會輸出:

Spring
           

注意,在C#中,switch結構可以判斷的變量或表達式不僅限于整型或枚舉型,還可以是字元串型。例如:

string fruit = "apple"; // 定義一個水果變量
switch (fruit) // 根據水果判斷顔色
{
    case "apple":
        Console.WriteLine("Red"); // 蘋果則輸出Red
        break;
    case "banana":
        Console.WriteLine("Yellow"); // 香蕉則輸出Yellow
        break;
    case "orange":
        Console.WriteLine("Orange"); // 橘子則輸出Orange
        break;
    default:
        Console.WriteLine("Unknown color"); // 其他則輸出Unknown color
        break;
}
           

上面的代碼會輸出:

Red           

循環結構

循環結構是在給定條件成立的情況下,反複執行某一段代碼的流程控制語句,它可以實作程式的重複邏輯。C#中有四種循環結構:while循環、do-while循環、for循環和foreach循環。

while循環

while循環是最基本的一種循環結構,它的基本文法如下:

while (循環條件)
{
    循環體;
}
           

while循環會先判斷循環條件的真假,如果為真,則執行大括号中的語句,然後再次判斷循環條件,如此反複,直到循環條件為假時,跳出while循環。如果一開始循環條件就為假,則不執行任何操作。例如:

int i = 1; // 定義一個計數變量
while (i <= 10) // 判斷計數變量是否小于等于10
{
    Console.WriteLine(i); // 輸出計數變量的值
    i++; // 計數變量自增1
}
           

上面的代碼會輸出:

1
2
3
4
5
6
7
8
9
10
           

在while循環中,可以使用continue語句來結束目前的循環,進入下一次的循環;也可以使用break語句來終止整個循環,不再執行後續的操作。例如:

int i = 1; // 定義一個計數變量
while (i <= 10) // 判斷計數變量是否小于等于10
{
    if (i % 2 == 0) // 判斷計數變量是否為偶數
    {
        i++; // 計數變量自增1
        continue; // 結束目前的循環,進入下一次的循環
    }
    Console.WriteLine(i); // 輸出計數變量的值
    i++; // 計數變量自增1
    if (i > 5) // 判斷計數變量是否大于5
    {
        break; // 終止整個循環,不再執行後續的操作
    }
}
           

上面的代碼會輸出:

1
3
5
           

do-while循環

do-while循環是一種先執行後判斷的循環結構,它的基本文法如下:

do
{
    循環體;
} while (循環條件);
           

do-while循環會先執行一次大括号中的語句,然後判斷循環條件的真假,如果為真,則繼續執行大括号中的語句,然後再次判斷循環條件,如此反複,直到循環條件為假時,跳出do-while循環。do-while循環至少會執行一次循環體。例如:

int i = 1; // 定義一個計數變量
do 
{
    Console.WriteLine(i); // 輸出計數變量的值
    i++; // 計數變量自增1
} while (i <= 10); // 判斷計數變量是否小于等于10
           

上面的代碼會輸出:

1
2
3
4
5
6
7
8
9
10
           

在do-while循環中,也可以使用continue和break語句來控制循環的流程,用法與while循環相同。

for循環

for循環是一種在有明确的循環次數時使用的循環結構,它的基本

已收到消息. 好的,我會繼續寫下去。以下是我生成的文章的後續内容: ## 循環結構 循環結構是在給定條件成立的情況下,反複執行某一段代碼的流程控制語句,它可以實作程式的重複邏輯。C#中有四種循環結構:while循環、do-while循環、for循環和foreach循環。 ### while循環 while循環是最基本的一種循環結構,它的基本文法如下: ```csharp while (循環條件) { 循環體; } ``` while循環會先判斷循環條件的真假,如果為真,則執行大括号中的語句,然後再次判斷循環條件,如此反複,直到循環條件為假時,跳出while循環。如果一開始循環條件就為假,則不執行任何操作。例如: ```csharp int i = 1; // 定義一個計數變量 while (i <= 10) // 判斷計數變量是否小于等于10 { Console.WriteLine(i); // 輸出計數變量的值 i++; // 計數變量自增1 } ``` 上面的代碼會輸出: ``` 1 2 3 4 5 6 7 8 9 10 ``` 在while循環中,可以使用continue語句來結束目前的循環,進入下一次的循環;也可以使用break語句來終止整個循環,不再執行後續的操作。例如: ```csharp int i = 1; // 定義一個計數變量 while (i <= 10) // 判斷計數變量是否小于等于10 { if (i % 2 == 0) // 判斷計數變量是否為偶數 { i++; // 計數變量自增1 continue; // 結束目前的循環,進入下一次的循環 } Console.WriteLine(i); // 輸出計數變量的值 i++; // 計數變量自增1 if (i > 5) // 判斷計數變量是否大于5 { break; // 終止整個循環,不再執行後續的操作 } } ``` 上面的代碼會輸出: ``` 1 3 5 ``` ### do-while循環 do-while循環是一種先執行後判斷的循環結構,它的基本文法如下: ```csharp do { 循環體; } while (循環條件); ``` do-while循環會先執行一次大括号中的語句,然後判斷循環條件的真假,如果為真,則繼續執行大括号中的語句,然後再次判斷循環條件,如此反複,直到循環條件為假時,跳出do-while循環。do-while循環至少會執行一次循環體。例如: ```csharp int i = 1; // 定義一個計數變量 do { Console.WriteLine(i); // 輸出計數變量的值 i++; // 計數變量自增1 } while (i <= 10); // 判斷計數變量是否小于等于10 ``` 上面的代碼會輸出: ``` 1 2 3 4 5 6 7 8 9 10 ``` 在do-while循環中,也可以使用continue和break語句來控制循環的流程,用法與while循環相同。 ### for循環 for循環是一種在有明确的循環次數時使用的循環結構,它的基本

3共20

繼續寫下去

已發送電子郵件. 繼續寫下去

好的,我會繼續寫下去。以下是我生成的文章的後續内容:

for循環是一種在有明确的循環次數時使用的循環結構,它的基本文法如下:

for (初始條件; 循環條件; 循環變化)
{
    循環體;
}
           

for循環會先執行一次初始條件,然後判斷循環條件的真假,如果為真,則執行大括号中的語句,然後執行循環變化,再次判斷循環條件,如此反複,直到循環條件為假時,跳出for循環。如果一開始循環條件就為假,則不執行任何操作。例如:

for (int i = 1; i <= 10; i++) // 定義一個計數變量i,并給它指派為1,判斷i是否小于等于10,每次循環後i自增1
{
    Console.WriteLine(i); // 輸出計數變量i的值
}
           

上面的代碼會輸出:

1
2
3
4
5
6
7
8
9
10
           

在for循環中,也可以使用continue和break語句來控制循環的流程,用法與while循環相同。

foreach循環

foreach循環是一種用來周遊數組或集合中的每個元素的循環結構,它的基本文法如下:

foreach (var item in list)
{
    循環體;
}
           

foreach循環會依次取出list中的每個元素,并指派給item變量,然後執行大括号中的語句,直到周遊完所有的元素為止。list可以是任何實作了IEnumerable接口的類型,例如數組、清單、字典等。item可以是任何與元素類型相同或相容的類型,例如var、object等。例如:

int[] array = new int[] { 1, 2, 3, 4, 5 }; // 定義一個整型數組
foreach (int num in array) // 周遊數組中的每個元素,并指派給num變量
{
    Console.WriteLine(num); // 輸出num變量的值
}
           

上面的代碼會輸出:

1
2
3
4
5
           

在foreach循環中,也可以使用continue和break語句來控制循環的流程,用法與while循環相同。

異常處理語句

異常處理語句是用來處理程式運作過程中可能出現的錯誤或異常情況的流程控制語句,它可以使程式更加健壯和穩定。C#中有兩種異常處理語句:try-catch語句和try-finally語句。

try-catch語句

try-catch語句是最常用的一種異常處理語句,它的基本文法如下:

try
{
    可能會出現異常的代碼;
}
catch (Exception ex) // ex是捕獲到的異常對象
{
    出現異常後要執行的代碼;
}
           

try-catch語句會先嘗試執行try中的代碼,如果沒有出現異常,則正常執行完畢;如果出現異常,則跳轉到catch中執行catch中的代碼,并捕獲異常對象ex,可以通過ex擷取異常的相關資訊,例如ex.Message表示異常消息,ex.StackTrace表示異常堆棧等。例如:

try
{
    int a = 10; // 定義一個整型變量a,并指派為10
    int b = 0; // 定義一個整型變量b,并指派為0
    int c = a / b; // 定義一個整型變量c,并指派為a除以b Console.WriteLine©; // 輸出c的值 
} catch (Exception ex) // 捕獲異常對象ex 
{ 
  Console.WriteLine(ex.Message); // 輸出異常消息 
}           

上面的代碼會輸出:

Attempted to divide by zero.           

因為在try中的代碼中,a除以b會導緻一個除零異常,是以程式會跳轉到catch中,輸出異常對象ex的消息屬性,表示出現了什麼異常。 try-catch語句還可以嵌套使用,即在一個try-catch語句中再包含一個或多個try-catch語句,以實作更細緻的異常處理。例如:

try
{
    try
    {
        int a = 10; // 定義一個整型變量a,并指派為10
        int b = 0; // 定義一個整型變量b,并指派為0
        int c = a / b; // 定義一個整型變量c,并指派為a除以b
        Console.WriteLine(c); // 輸出c的值
    }
    catch (DivideByZeroException ex) // 捕獲除零異常對象ex
    {
        Console.WriteLine(ex.Message); // 輸出異常消息
    }
}
catch (Exception ex) // 捕獲其他異常對象ex
{
    Console.WriteLine(ex.Message); // 輸出異常消息
}           

上面的代碼會輸出:

Attempted to divide by zero.
           

因為在内層的try中的代碼中,a除以b會導緻一個除零異常,是以程式會跳轉到内層的catch中,輸出異常對象ex的消息屬性,表示出現了什麼異常。由于内層的catch已經處理了這個異常,是以外層的catch不會再執行。

try-catch語句還可以有多個catch分支,每個catch分支對應一種特定類型的異常,這樣可以根據不同類型的異常做出不同的處理。例如:

try
{
    int[] array = new int[] { 1, 2, 3 }; // 定義一個整型數組,并指派為1,2,3
    int index = 3; // 定義一個索引變量,并指派為3
    int num = array[index]; // 定義一個整型變量,并指派為數組中索引為index的元素
    Console.WriteLine(num); // 輸出num的值
}
catch (IndexOutOfRangeException ex) // 捕獲索引越界異常對象ex
{
    Console.WriteLine("Index out of range: " + ex.Message); // 輸出異常消息
}
catch (Exception ex) // 捕獲其他異常對象ex
{
    Console.WriteLine("Other exception: " + ex.Message); // 輸出異常消息
}
           

上面的代碼會輸出:

Index out of range: Index was outside the bounds of the array.
           

因為在try中的代碼中,index的值為3,超出了數組array的範圍,是以程式會跳轉到第一個catch分支,輸出異常對象ex的消息屬性,并加上一些提示資訊,表示出現了索引越界異常。如果在try中的代碼中出現了其他類型的異常,則會跳轉到第二個catch分支,輸出異常對象ex的消息屬性,并加上一些提示資訊,表示出現了其他類型的異常。

try-finally語句

try-finally語句是一種無論是否出現異常都要執行某些操作的異常處理語句,它的基本文法如下:

try
{
    可能會出現異常的代碼;
}
finally
{
    無論是否出現異常都要執行的代碼;
}
           

try-finally語句會先嘗試執行try中的代碼,如果沒有出現異常,則正常執行完畢,然後執行finally中的代碼;如果出現異常,則跳過try中剩餘的代碼,直接執行finally中的代碼。無論是否出現異常,finally中的代碼都會被執行。例如:

try
{
    int a = 10; // 定義一個整型變量a,并指派為10
    int b = 0; // 定義一個整型變量b,并指派為0
    int c = a / b; // 定義一個整型變量c,并指派為a除以b
    Console.WriteLine(c); // 輸出c的值
}
finally
{
    Console.WriteLine("Finally"); // 輸出Finally
}
           

上面的代碼會輸出:

Finally
           

因為在try中的代碼中,a除以b會導緻一個除零異常,是以程式會跳過try中剩餘的代碼,直接執行finally中的代碼,輸出Finally。如果沒有出現異常,則會先輸出c的值,然後輸出Finally。

try-finally語句一般用于釋放一些資源,例如檔案、資料庫連接配接、網絡連接配接等,以確定這些資源不會因為異常而洩露或占用。

try-finally語句可以和try-catch語句結合使用,形成一個完整的異常處理機制,即先嘗試執行代碼,如果出現異常,則捕獲并處理異常,無論是否出現異常,都執行一些必要的操作。例如:

try
{
    int a = 10; // 定義一個整型變量a,并指派為10
    int b = 0; // 定義一個整型變量b,并指派為0
    int c = a / b; // 定義一個整型變量c,并指派為a除以b
    Console.WriteLine(c); // 輸出c的值
}
catch (Exception ex) // 捕獲異常對象ex
{
    Console.WriteLine(ex.Message); // 輸出異常消息
}
finally
{
    Console.WriteLine("Finally"); // 輸出Finally
}
           

上面的代碼會輸出:

Attempted to divide by zero.
Finally
           

因為在try中的代碼中,a除以b會導緻一個除零異常,是以程式會跳轉到catch中執行catch中的代碼,并捕獲異常對象ex,輸出異常對象ex的消息屬性,表示出現了什麼異常。然後程式會執行finally中的代碼,輸出Finally。

總結

本文介紹了C#中的流程控制語句,包括順序結構、選擇結構、循環結構和異常處理語句。這些語句可以幫助我們編寫更加靈活和強大的程式,實作各種複雜的功能和邏輯。希望本文對你有所幫助。

繼續閱讀