C#快速入門教程(14)—— 迴圈語句結構
在程式碼流程控制中,迴圈的含義就是在特定的條件下多次執行一些程式碼,以簡化某些重複工作的執行,一個典型的例子就是累加的計算,如計算整數1到100的和就可以使用如下程式碼。
static void Main(string[] args)
{
int sum = 0;
for( int i=1;i<=100;i++)
{
sum = sum + i;
}
Console.WriteLine("1到100的和是{0}", sum);
}
程式碼執行結果如下圖。
從這個示例中,我們可以看到迴圈語句結構的幾個要素,如本例中是通過變數i來控制迴圈變數的;其中,i的初始值是1;執行迴圈語句的條件是當i小於或等於100;每次迴圈語句執行後通過i++語句使變數i的資料加1,只有這樣才可以結束迴圈,如果沒有結束迴圈的條件,則會無限迴圈,也稱為死迴圈。
下面,看一下for語句結構的基本語法。
for(<迴圈變數初始化> ; <迴圈條件> ; <迴圈變數每次變化>)
{
<語句塊>
}
for語句結構的含義是,迴圈控制變數初始化為一定的值,當其滿足一定的條件時就執行<語句塊>的內容,每次執行後需要一個改變迴圈變數資料的操作。
在C#中,迴圈相關的還包括foreach語句結構、while語句結構、do-while語句結構、continue語句和break語句,下面分別討論。
foreach語句結構可以方便的訪問集合(陣列、列表等型別,後續會討論相關內容)中的成員,如下面的程式碼,我們分別使用for語句結構和foreach語句結構訪問一個陣列的成員。
static void Main(string[] args)
{
int[] arr = new int[10];
// 給陣列成員賦值
for( int i=0;i<10;i++)
{
arr[i] = i + 1;
}
// 顯示陣列成員資料
foreach(int num in arr)
{
Console.WriteLine(num);
}
}
程式碼執行結果如下圖所示。
再來看一下while和do...while語句結構,其中,while語句結構的應用格式如下。
while(<條件表示式>)
{
<語句塊>
}
下面是do...while語句結構的應用格式。
do
{
<語句塊>
}while(<條件表示式>);
我們可以看到,while和do...while語句結構最大的區別就在於<條件表示式>的位置不同;其執行邏輯是,在while語句結構中,每次迴圈前會對條件進行判斷,如果條件滿足,即<條件表示式>的值為true時,執行本次迴圈,當條件不滿足時,即<條件表示式>的值為false時,結構迴圈結構的執行;而do...while語句結構中,條件的判斷會在每次迴圈執行後進行,也就是說,迴圈中的<語句塊>最少會執行一次,當<條件表示式>的值為true時執行下一次迴圈,為false時結構迴圈結構的執行。
下面的程式碼是使用while語句結構計算1到100的累加運算。
static void Main(string[] args)
{
int sum = 0, n = 1;
while (n <= 100)
{
sum += n;
n++;
}
Console.WriteLine("1到100累加結果為{0}", sum);
}
下面的程式碼是使用do...while語句結構計算1到100的累加運算。
static void Main(string[] args)
{
int sum = 0, n = 1;
do
{
sum += n;
n++;
} while (n <= 100);
Console.WriteLine("1到100累加結果為{0}", sum);
}
大家可以觀察while和do...while語句結構的工作方式和特點,這裡需要注意的是,do...while語句結構會在每次迴圈結束時才對條件進行判斷,如果第一次執行迴圈時資料不滿足要求,就有可能產生錯誤。
接下來的工作,我們來計算1到100中偶數的和,可以使用兩種方式,首先是通過for語句結構中的迴圈控制變數每次迴圈後加2來處理,如下面的程式碼。
static void Main(string[] args)
{
int sum = 0;
for(int i=2;i<=100;i+=2)
{
sum += i;
}
Console.WriteLine("1到100中偶數的和是{0}", sum);
}
另一種方法是在迴圈語句中使用continue語句來實現,如下面的程式碼。
static void Main(string[] args)
{
int sum = 0;
for(int i=2;i<=100;i++)
{
if (i % 2 == 1) continue;
sum += i;
}
Console.WriteLine("1到100中偶數的和是{0}", sum);
}
本程式碼中,當i除以2的餘數是1,也就是i不是偶數時,就使用continue語句結束本次迴圈,當i是偶數時,就累加到sum變數中。這裡使用的continue語句的功能就是結束本次迴圈,當條件滿足時執行下次迴圈,當條件不滿足時就結束迴圈結構。
另一個相關的語句是break,其功能是終止迴圈結構的執行;如下面的程式碼,用來一個整數是否為質數。
static void Main(string[] args)
{
int x=17; // 大於1的整數
int max = (int)Math.Sqrt(x);
bool isPrime = true;
for(int i=2;i<=max;i++)
{
if(x % i ==0 )
{
isPrime = false;
break;
}
}
Console.WriteLine("{0}{1}質數", x,
isPrime?"是":"不是");
}
本例中,首先將isPrime變數設定為true,即假裝x是質數;當x小於4時迴圈不會執行,2和3就是質數;當x大於或等於4並且能被2到x的算術平方根中的任何數整除時,x就不是質數,此時,將isPrime設定為false,並使用break語句退出迴圈結構。
此外,如果是多層迴圈,可以通過goto語句加標籤的方法快速跳出,如下面的程式碼。
static void Main(string[] args)
{
int counter = 0;
for (int i = 0; i <= 100; i++)
{
for (int j = 0; j <= 100; j++)
{
for (int k = 0; k <= 100; k++)
{
counter++;
if (i == 10 && j == 20 && k == 30)
goto I_FOR_END;
}
}
}
I_FOR_END:;
Console.WriteLine("內層迴圈執行{0}次", counter);
}
程式碼中,我們定義了一個標籤I_FOR_END用於標籤i迴圈結束的位置,在三層迴圈中,當滿足特定的條件時就使用goto I_FOR_END;語句直接跳轉到三層迴圈外面。
實際開發中,迴圈語句結構是靈活多變的,大家可以根據實際需要選擇合理的程式碼結構。
如果大家對i++表示式的應用不太熟悉,可以參考我的另一篇文章《這些東西還在爭嗎》。
CHY軟體小屋原創作品!
相關文章
- C#快速入門教程(12)—— if語句結構C#
- C#快速入門教程(13)—— switch語句結構C#
- C#快速入門教程(23)—— using語句和IDisposable介面C#
- Python趣味入門5:迴圈語句whilePythonWhile
- c語言中的三種迴圈語句結構C語言
- javascript新手入門之條件語句,迴圈JavaScript
- Python入門教程100天:Day04-迴圈結構Python
- Go快速入門 03 | 控制結構:if、for、switch 邏輯語句Go
- c#入門-while迴圈C#While
- Java入門系列-09-迴圈結構Java
- 分支語句和迴圈語句
- 《Java從入門到失業》第三章:基礎語法及基本程式結構(3.8):流程控制(迴圈語句、while語句、for語句)JavaWhile
- JavaScript for 迴圈語句JavaScript
- Ruby迴圈語句
- TypeScript 迴圈語句TypeScript
- MySQL迴圈語句MySql
- JavaScript 流程控制語句詳解:if語句、switch語句、while迴圈、for迴圈等JavaScriptWhile
- C語言——迴圈結構(for迴圈,while迴圈,do-while迴圈)C語言While
- C#程式設計基礎第七課:C#中的基本迴圈語句:while迴圈、do-while迴圈、for迴圈、foreach迴圈的使用C#程式設計While
- Go語言入門教程系列——函式、迴圈與分支Go函式
- 七 while迴圈語句While
- JavaScript跳出for迴圈語句JavaScript
- Python的迴圈語句Python
- 7-迴圈語句
- 《演算法筆記》2.4小節——C/C++快速入門->迴圈結構演算法筆記C++
- 實驗6迴圈結構程式設計(for語句的應用)程式設計
- 《C#快速入門教程》目錄C#
- C#快速入門教程(16)—— 介面C#
- C#快速入門教程(6)——方法C#
- Python-條件語句和迴圈語句Python
- Python 迴圈語句的使用Python
- 【Python基礎】for迴圈語句Python
- MyBatis xml foreach迴圈語句MyBatisXML
- 流程控制、 迴圈語句
- python04: while迴圈語句 break continue for in 迴圈PythonWhile
- go語言快速入門教程Go
- C#快速入門教程(26)—— 繪圖C#繪圖
- C#快速入門教程(21)—— 泛型C#泛型