2016年5月1日 星期日

給新手的C++教學 (上冊) - 4. 條件判斷 (Decision making)

回到「給新手的C++教學 (上冊)」

上一章

利用前三章提到的知識,我們已經可以寫出自己的計算機了!
但是,其實我們的程式還可以變得更強!
在本章,我們將賦予程式「判斷、決策」的能力,讓程式也可以像人一樣思考!

先來講個簡單的例子:
輸入一個數字,如果這個數字是2的話輸出「Yes」,不是的話輸出「No」

這裡請出我們的新朋友,「if (如果)」
用法如下:

if(條件)
{
    條件成立時要執行的程式碼
}

所以,程式碼可以這樣寫:

#include<cstdio>
int main()
{
    int n;
    scanf("%d",&n);
    if(n==2)
    {
        printf("Yes\n");
    }
    if(n!=2)
    {
        printf("No\n");
    }
}

趕快試試看吧! :)

你可能會發現另外兩個新朋友:「==」和「!=」
其中
「==」的作用是判斷左邊是不是「等於」右邊
「!=」的作用是判斷左邊是不是「不等於」右邊
類似的用法還有:
「<」的作用是判斷左邊是不是「小於」右邊
「>」的作用是判斷左邊是不是「大於」右邊
「<=」的作用是判斷左邊是不是「小於或等於」右邊
「>=」的作用是判斷左邊是不是「大於或等於」右邊

你可能還會發現:『「==」成立』不就是『「!=」不成立』嗎?
只要其中一方成立,另一方就會不成立
反之亦然
只要其中一方不成立,另一方就會成立


因此,「else (否則)」的概念就被引進來了
用法如下:

if(條件)
{
    條件「成立」時要執行的程式碼
}
else
{
    條件「不成立」時要執行的程式碼
}

這樣一來,「判斷n有沒有等於2」的程式碼就可以寫得更簡單了:

#include<cstdio>
int main()
{
    int n;
    scanf("%d",&n);
    if(n==2)
    {
        printf("Yes\n");
    }
    else
    {
        printf("No\n");
    }
}

你現在可能覺得差不了多少,但是以後你應該就會發現
這樣的一點邏輯簡化,對於寫出正確無誤的程式碼非常有幫助

再考考你
給你年分,請你判斷它是不是閏年?

你可能會想:「那我就先看看它是不是4的倍數,如果不是4的倍數的話就不是閏年,如果是4的倍數的話再看看它是不是100的倍數,如果不是100的倍數的話就是閏年,如果是100的倍數的話再看看它是不是400的倍數,如果不是400的倍數的話就不是閏年,否則就是閏年」

我們的程式也可以這樣思考!
對了,前面忘了說
其實除了「加減乘除」之外,C++還提供了另外一個運算子:「%」
就是算出餘數啦
例如以下這段程式碼:

#include<cstdio>
int main()
{
    int a=5,b=3;
    printf("%d\n",a%b);
}

程式會輸出「2」
「5%3」的程式輸出「2」了!

因此,依據上面學到的知識,要判斷閏年,程式碼可以這樣寫:

#include<cstdio>
int main()
{
    int year;
    scanf("%d",&year);
    if(year%4!=0)
    {
        printf("不是閏年\n");
    }
    else
    {
        if(year%100!=0)
        {
            printf("是閏年\n");
        }
        else
        {
            if(year%400!=0)
            {
                printf("不是閏年\n");
            }
            else
            {
                printf("是閏年\n");
            }
        }
    }
}

很有趣吧!
想不想趕快來玩玩看呢?
例如:心理測驗 (XD?!)

下一章

感謝:
(版權所有 All copyright reserved)

12 則留言:

  1. 請問版主大大 為啥按下F11後 跑出並非預期的亂碼?? 感謝回答
    這是範例C++程式碼:
    #include<cstdio>
    int main()
    {
        printf("Hello world!\n");
        return 0;
    }

    回覆刪除
  2. #include<cstdio>
    int main()
    {    
       int a=1,b=2;
       printf("%d\n",&a+b);
          if(a+b==2)
         { 
           scanf("yes \n");
       }
        else
        {
            scanf("no \n");
        }
        
    }
    請問為何按下F11後只有一串奇怪數字 >^< 感謝回答

    回覆刪除
  3. 似乎也可行??
    #include
    int main()
    {
    int n;
    scanf("%d",&n);
    if(n%4==0)
    if(n%100!=0)
    {
    printf("是\n");
    }
    else
    {
    printf("否\n");
    }
    }

    回覆刪除
    回覆
    1. 這樣輸入2021就沒有輸出東西了耶......🤔

      刪除
  4. 想請問,為啥照著範例打,結果最後一個else被檢查出沒有作為前提的if?

    回覆刪除
    回覆
    1. 我剛剛也出現這個問題,我是scanf後面沒有加分號「;」,不知道你是不是跟我一樣XDDD

      刪除
    2. 直接把程式碼複製貼上還是這樣嗎?

      刪除
  5. 作者已經移除這則留言。

    回覆刪除
  6. 請問第四行year前面的"&"是什麼意思?

    回覆刪除
    回覆
    1. 用scanf輸入的變數前面都要加&哦,只有char陣列搭配%s的時候不用加~

      刪除
  7. 那if或while可以判斷兩個條件嗎?就是兩個條件都要符合才能執行

    回覆刪除

歡迎留言或問問題~
若您的留言中包含程式碼,請參考這篇
如果留言不見了請別慌,那是因為被google誤判成垃圾留言,小莫會盡快將其手動還原

注意:只有此網誌的成員可以留言。