iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 16
1
Modern Web

C#與ASP.Net入門-我要成為工程師!!系列 第 16

Day16-C#- while與do..while(例:求因數、求最大公因數、怎麼讓console重複執行?)

好!接續上一篇for跟foreach的介紹,這篇要介紹的是while與do..while~

複習一下內容:

  1. while:前測試迴圈,通常用在當需要重複執行同樣動作,且執行的次數為未知時使用。也就是把條件判斷放在前面,先判斷條件符不符合,符合則執行迴圈。
  2. do...while:後測試迴圈,與while相同,但是第一次進入迴圈時不用檢查是否滿足條件,先執行一次迴圈內容後,第二次再判斷是否符合條件,符合條件再次進入迴圈。也就是這個寫法迴圈不管如何至少會執行一次

來看看比較圖:
https://ithelp.ithome.com.tw/upload/images/20190916/20120055yOfzodgu2x.png


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("================================================");
}

輸出結果:

https://ithelp.ithome.com.tw/upload/images/20190916/20120055q3WP0gHPef.png

這樣就會直到你打X或是強制結束,不然就可以一直跑一直跑~一直輸入一直輸入囉~


do...while

程式結構

do
{
敘述區段;
}while(條件);

使用方法與while相同

恭喜你了解四大迴圈了!!!
下一步,我們要進入陣列囉!


參考資料

Visual C# 2017程式設計經典


上一篇
Day15-C#-for迴圈VS foreach(例:經典九九乘法表/排版後的九九乘法表)
下一篇
Day17-C#陣列Array、不規則陣列。神啊~我找到處理多筆資料的好朋友了!
系列文
C#與ASP.Net入門-我要成為工程師!!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言