Skip to main content

3.3 複合條件判斷式

搭配使用邏輯運算子

底下是一個典型的帳密驗證程式片斷。

string id, password;

cin >> id;
cin >> password;

if(id=="admin")
{
    if(password=="123456")
    {
        cout << "登入成功" << endl;
    }
    else
    {
        cout << "登入失敗" << endl;
    }
}
else
{
    cout << "登入失敗" << endl;
}

因為「帳號正確」、「密碼正確」兩者皆需成立,所以使用了二層 if...else 敘述,看起來很累贅。

And 邏輯運算子 &&

「帳號正確」而且「密碼正確」可以這樣表示。

string id, password;

cin >> id;
cin >> password;

if(id=="admin" && password=="123456")
{
    cout << "登入成功" << endl;
}
else
{
    cout << "登入失敗" << endl;
}

邏輯運算子可以對 布林值(boolean) 進行運算。

我們把 id=="admin" 視為條件Apassword=="123456 視為條件B

條件A 的運算結果有兩種可能 true, false。條件B 也是一樣。所以 A and B 有四種可能狀況,表列如下。

A B A && B
false false false
false true false
true false false
true true true

這種表叫做 「真值表(truth table)」 ,可以表示某個邏輯運算的各種狀態和運算結果,我們也很常用 0 表示 false,用 1 表示true。

A B A && B
0 0 0
0 1 0
1 0 0
1 1 1

由這張 And 的真值表可以看出只有在兩個條件都是 true 的情況下 A and B 的邏輯運算結練才會是 true,其他狀況都是 false。

Or 邏輯運算子 ||

Or 的真值表如下,只要 A, B 其中之一為 true,運算結果就會是 true。

A B A || B
0 0 0
0 1 1
1 0 1
1 1 1

如果獲得獎學金的資格是「國文成績85(含)以上」或「英文成績80(含)以上」,則我們可以用 Or 運算子這樣判斷個案是否可以領取獎學金。

if(chi>=85 || eng>=80)
{
    cout << "符合領取獎學金資格" << endl;
}

Nor 邏輯運算子 !

And 和 Or 運算子左右各有一個運算元,所以我們稱之為 二元運算子

Not 只有右邊一個運算元,所以它是 一元運算子。Not 的運算結果是把它後面那個運算元的真值反轉,也就是 true 變成 false,false 變成 true。

A !A
0 1
1 0

我們可以這樣來過濾 $n$「不是 4 的倍數」

if(!(n%4==0))
{
    cout << n << "不是 4 的倍數" << endl;
}