iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 11
0
Modern Web

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

Day11-C#的條件判斷- if else(例子:比大小、賣場折扣、判斷腰圍肥胖)

在寫程式時你會遇到「如果這樣的話執行這一段,否則則進行另一段」的狀況,就像下圖
https://ithelp.ithome.com.tw/upload/images/20190910/20120055UxOC7VVF7v.png

這就是要出動if-else判斷式的時候了!!!!!

寫法如下:

if(條件成立)
{
    程式A;
}
else
{
    程式B;
}

我們接下來將會透過三個題目來說明if-else

題目一:if-else怎麼用?----輸入x跟y,輸出比較大的數
題目二:不只一個條件要判斷怎麼辦?----賣場周年慶折扣
題目三:if裡面可以包if嗎?----男女標準體重計算

題目一:if-else怎麼用?----輸入x跟y,輸出比較大的數

  • 題目內容:寫一個程式可以輸入x跟y,然後輸出最大的值
  • 輸出結果範例:
    https://ithelp.ithome.com.tw/upload/images/20190910/20120055n9sCoF4uXj.png
    解法一:
    思考邏輯→判斷x跟y的大小,如果x大就輸出x,不然就輸出y
int x, y, answer;
Console.Write("請輸入x =");//show出請輸入的字串
x = Convert.ToInt32(Console.ReadLine());//讀入輸入的數字(此時為字串)並轉型成int
Console.Write("請輸入y =");
y = Convert.ToInt32(Console.ReadLine());

if (x > y)
{
    answer = x;
}
else
{
    answer = y;
}
Console.Write("較大者為 = {0}", answer);
Console.ReadKey();//避免視窗關掉看不到結果

欸可是這樣第一個判斷完其實就知道第二個的結果啦,else好像有一點點多餘的感覺?
是的,所以只有兩種結果的狀況你其實不一定要寫出else
解法二:
思考邏輯→我先把答案指定為其中一個數,如果比答案大就把答案換成大的數

int x, y, answer;
Console.Write("請輸入x =");
x = Convert.ToInt32(Console.ReadLine());
Console.Write("請輸入y =");
y = Convert.ToInt32(Console.ReadLine());
answer = x;
if (answer < y)
{
    answer = y;
}
Console.Write("較大者為 = {0}", answer);
Console.ReadKey();

還有還有~還記得三元運算子?:嗎?輸出只有兩種結果的狀況也很適合使用喔~

解法三:

int x, y, answer;
Console.Write("請輸入x =");
x = Convert.ToInt32(Console.ReadLine());
Console.Write("請輸入y =");
y = Convert.ToInt32(Console.ReadLine());
answer = (x > y) ? x : y;
Console.Write("較大者為 = {0}", answer);
Console.ReadKey();

題目二:不只一個條件要判斷怎麼辦?----賣場周年慶折扣

不只要進行一個條件判斷時,寫法為

if(條件一成立)
{
    程式A;//條件一成立執行A
}
else if(條件二成立)
{
    程式B;//條件一不成立且條件二成立,執行B
}
else
{
    程式C;//上面都不成立,執行C
}
  • 題目內容:辛西亞百貨周年慶!全館滿千打9折,滿5000打8折,滿萬以上打7折!請輸入總金額,判斷總共幾折優惠,以及折扣後價格(四捨五入)
  • 輸出結果範例:
    https://ithelp.ithome.com.tw/upload/images/20190910/20120055cp9yNM60pL.png

解法一:

double discount;
Console.Write("請輸入購買金額 =");
int price = Convert.ToInt32(Console.ReadLine());//將讀入的值轉成int
if(price > 10000){//先進行第一個判斷是否大於10000,如果有的話進入這個括號內的程式
    Console.WriteLine("恭喜享有7折優惠");
    discount = 0.7;//折扣數7折
}
else if (price >= 5000)
{
    Console.WriteLine("恭喜享有8折優惠");//如果不符合>10000,則進行這一個判斷。因為要判斷不只兩次,用else if陳述
    discount = 0.8;//折扣數8折
}
else if (price >= 1000)
{
    Console.WriteLine("恭喜享有9折優惠");//上面兩個都不符合,進行這一個條件判斷,也是用else if寫
    discount = 0.9;//折扣數9折
}
else {
    Console.WriteLine("金額不足,沒有優惠喔");//以上都不符合,則執行else內的程式碼
    discount = 1;//無折扣
}
Console.WriteLine("折扣後金額為 = {0}", Math.Round(discount * price));//算出折扣總金額,注意台灣沒有小數點的金額,Math.Round在後方介紹
Console.ReadKey();//防止程式關閉

這裡要特別注意順序,下方的解法你會發現只要輸入大於1000,怎麼樣都只有9折,因為在第一個條件就符合了~當然不會跑到其他if囉~

錯誤解法(對!我曾經這麼寫過QQ)

double discount;
Console.Write("請輸入購買金額 =");
int price = Convert.ToInt32(Console.ReadLine());
if (price >= 1000)
{
    Console.WriteLine("恭喜享有9折優惠");
    discount = 0.9;
}
else if (price >5000)
{
    Console.WriteLine("恭喜享有8折優惠");
    discount = 0.8;
}
else if (price >10000)
{
    Console.WriteLine("恭喜享有7折優惠");
    discount = 0.7;
}
else
{
    Console.WriteLine("金額不足,沒有優惠喔");
    discount = 1;
}
Console.WriteLine("折扣後金額為 = {0}", Math.Round(discount * price));
Console.ReadKey();

補充:
Math.Round():將值四捨五入為最接近的整數或是指定的小數位數。
Math.Round(值):將值四捨五入為最接近的整數
Math.Round(值,小數位數):將值四捨五入為指定的小數位數

題目三:if裡面可以包if嗎?----

當然可以囉~判斷完一個再判斷另一個也是很常見的,就像是人生一樣複雜(欸)

  • 直接看題目:男性腰圍超過90公分,女性腰圍超過80公分,即可稱為肥胖。請user輸入性別及腰圍,判斷是否肥胖
  • 輸出結果範例:
    https://ithelp.ithome.com.tw/upload/images/20190910/20120055rh9nOtm4w1.png

解法參考
思考邏輯:
https://ithelp.ithome.com.tw/upload/images/20190910/20120055QVJeJJkVck.png
程式碼

string gender;
double waist;
Console.Write("請輸入性別(M/F) =");
gender = Console.ReadLine();//讀入輸入的值,因為是要把值(字串)放入字串內,所以不用轉型
Console.Write("請輸入腰圍 =");
waist = Convert.ToDouble(Console.ReadLine());//讀入輸入的值,因為是要把值(字串)放入double內,所以要轉型
if (gender == "M")//如果是男的走這個{}
{
    if (waist > 90)//是男的且腰圍大於90是這個{}
    {
        Console.WriteLine("男生腰圍超過90就過胖囉");
    }
    else//是男的且腰圍不大於90是這個{}
    {
        Console.WriteLine("男生這腰圍還行,記得不要超過90喔~");
    }
}
else//如果是女的走這個{}
{
    if (waist > 80)//是女的且腰圍大於80是這個{}
    {
        Console.WriteLine("女生腰圍超過80就過胖囉");
    }
    else//是女的且腰圍不大於80是這個{}
    {
        Console.WriteLine("女生這腰圍還行,記得不要超過80喔~");
    }
}
Console.ReadKey();//避免視窗關閉

這就是兩個if的用法~同一層是同一組if 跟else,看到了嗎~當用到巢狀寫法(一層包一層),這時縮排的重要性就非常重要了!

巢狀寫法
https://ithelp.ithome.com.tw/upload/images/20190910/201200550YXOJxJwRM.png

當然最後這題也可以使用&&並搭配if else if else的寫法寫出來,你可以自己試試看唷~

有任何問題都歡迎大大們跟我討論~我會修改文章或是補充在回覆der~

根據條件判斷的部分,還有另一個switch好朋友可以使用喔~switch請見第下一篇~


上一篇
Day10-用C#算數學!(基本運算、平方、平方根、log、sin)
下一篇
Day12-C#的條件判斷- switch
系列文
C#與ASP.Net入門-我要成為工程師!!31

1 則留言

0
YoChen
iT邦新手 1 級 ‧ 2019-09-12 10:24:59

由小寫到大那邊,應該不需要用到&& XDDD

if (price < 1000)
{
    Console.WriteLine("金額不足,沒有優惠喔");
}
else if (price < 5000)
{
    Console.WriteLine("恭喜享有9折優惠");
}
else if (price < 10000)
{
    Console.WriteLine("恭喜享有8折優惠");
}
else
{
    Console.WriteLine("恭喜享有7折優惠");
}

阿哈哈哈哈哈哈哈哈哈哈我那時候一定是想睡覺QQ,我想表達的是另一個啦嗚嗚嗚嗚嗚~已修改~感謝大大XDD

我要留言

立即登入留言