好!接續上一篇for跟foreach的介紹,這篇要介紹的是while與do..while~
複習一下內容:
執行的次數為未知
時使用。也就是把條件判斷放在前面,先判斷條件符不符合,符合則執行迴圈。迴圈不管如何至少會執行一次
來看看比較圖:
程式結構
while(條件)
{
敘述區段;
}
讓我們直接來看題目:
題目一:求數字N的所有因數
題目內容:輸入一個整數N,由小到大依序輸出N的所有因數
思考邏輯:我把小於N的每個數都跟N相除,如果能夠整除就是我要的因數
Console.WriteLine("請輸入整數N:");
int N = Convert.ToInt32(Console.ReadLine());
int factor = 1;
string answer = "";
while (factor <= N)//欲判斷的因數是否<=N
{
if (N % factor == 0)//如果可以整除N代表factor是N的因數
{
answer += factor.ToString() + ",";//符合條件的值轉成字串後,加進去字串內,後面加一個,隔開
}
factor++;//每次執行完+1
}
Console.WriteLine($"{N}的因數為:{answer}");
Console.ReadKey();
有沒有發現其實這個題目也可以用for寫?
以這個邏輯來看迴圈執行的次數就是N次(已知次數),所以這裡用for寫也是OK的喔~
題目二:最大公因數-輾轉相除法
題目:輸入兩個整數,求兩個整數的最大公因數
輾轉相除法算法
int a, b, c, g;
Console.WriteLine("請輸入第一個整數:");
a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("請輸入第二個整數:");
b = Convert.ToInt32(Console.ReadLine());
if (b > a)//把兩數比較大的數換到被除數
{
(a, b) = (b, a);//把兩個數互換
}
while (a % b != 0)//兩個數相除不為0,代表還能繼續除
{
g = a % b;//g為餘數
a = b;//把除數變成被除數
b = g;//把餘數變成除數
}
Console.WriteLine($"兩數最大公因數為={b}");
Console.ReadKey();
題目三:重複執行的console畫面
最後,你有沒有覺得console模式每次執行完就關閉,要測試下一筆資料又要重新執行很煩?
這時候只要在前後加上while就可以讓程式一直重複不關閉囉!
把上面的程式修改一下
while (true)//這樣寫代表無窮迴圈,這裡表示只要條件式是true就一直執行while迴圈
{
int a, b, c, g;
Console.WriteLine("請輸入第一個整數:");
a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("請輸入第二個整數:");
b = Convert.ToInt32(Console.ReadLine());
if (b > a)//把兩數比較大的數換到被除數
{
(a, b) = (b, a);//把兩個數互換
}
while (a % b != 0)//兩個數相除不為0,代表還能繼續除
{
g = a % b;//g為餘數
a = b;//把除數變成被除數
b = g;//把餘數變成除數
}
Console.WriteLine($"兩數最大公因數為={b}");
Console.WriteLine("");
Console.WriteLine("================================================");
}
輸出結果:
這樣就會直到你打X或是強制結束,不然就可以一直跑一直跑~一直輸入一直輸入囉~
程式結構
do
{
敘述區段;
}while(條件);
使用方法與while相同
恭喜你了解四大迴圈了!!!
下一步,我們要進入陣列囉!