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" 視為條件A,password=="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;
}