04_演算と条件分岐

はじめに

この章では、計算や比較、条件によって処理を分岐させる書き方を確認します。C言語で学んだ基本はそのまま使えますが、C++ならではの表現のしやすさにも注目していきましょう。

算術演算子の使い方

#include <iostream>
using namespace std;

int main() {
    int a = 10;
    int b = 3;

    cout << "a + b = " << a + b << endl;
    cout << "a - b = " << a - b << endl;
    cout << "a * b = " << a * b << endl;
    cout << "a / b = " << a / b << endl;
    cout << "a % b = " << a % b << endl;

    return 0;
}

解説

比較演算子を使った判定

#include <iostream>
using namespace std;

int main() {
    int score = 75;

    if (score >= 60) {
        cout << "合格" << endl;
    } else {
        cout << "不合格" << endl;
    }

    return 0;
}

解説

C言語との違いについて

bool isPassed = true;
if (isPassed) {
    cout << "合格です。" << endl;
}

このように、C++ では 意図が明確に伝わる条件式 が書きやすくなっています。

bool型を使った条件分岐

#include <iostream>
using namespace std;

int main() {
    bool isLoggedIn = false;

    if (isLoggedIn) {
        cout << "ようこそ" << endl;
    } else {
        cout << "ログインしてください" << endl;
    }

    return 0;
}

解説

else if を使った多段分岐

#include <iostream>
using namespace std;

int main() {
    int score = 85;

    if (score >= 80) {
        cout << "優" << endl;
    } else if (score >= 60) {
        cout << "良" << endl;
    } else {
        cout << "不可" << endl;
    }

    return 0;
}
ポイント:条件は上から順に評価されます。最初に一致した条件のブロックだけ実行され、残りはスキップされます。

コーディング演習

演習1:基本コードを動かす

04_01_calc.cpp を作成し、次のコードを入力して実行しましょう。
// calc.cpp
#include <iostream>
using namespace std;

int main() {
    int a, b;
    cout << "2つの整数を入力してください:";
    cin >> a >> b;

    cout << "a + b = " << a + b << endl;
    cout << "a - b = " << a - b << endl;
    cout << "a * b = " << a * b << endl;
    cout << "a / b = " << a / b << endl;
    cout << "a % b = " << a % b << endl;

    if (a > b) {
        cout << "a の方が大きい" << endl;
    } else if (a < b) {
        cout << "b の方が大きい" << endl;
    } else {
        cout << "同じ値" << endl;
    }

    return 0;
}

演習2:コードを改造する

04_01_calc.cpp をコピーして 04_02_calc_mod.cpp として保存し、次の変更を加えてみましょう:
ヒントを見る else if を複数並べることで多段分岐ができます。
条件は上から評価されるため、大きい値の条件を先に書くことがポイントです。

理解度チェック

問題04-1

次のコードの出力はどれか。

#include <iostream>
using namespace std;
int main() {
    int x = 5;
    if (x % 2 == 0) {
        cout << "偶数" << endl;
    } else {
        cout << "奇数" << endl;
    }
    return 0;
}
解説を表示 正解:イ
5 を 2 で割った余りは 1 なので条件 x % 2 == 0 は false となり、「奇数」と表示されます。

問題04-2

次のコードの出力はどれか。

#include <iostream>
using namespace std;
int main() {
    int score = 85;
    if (score >= 80) {
        cout << "優" << endl;
    } else if (score >= 60) {
        cout << "良" << endl;
    } else {
        cout << "不可" << endl;
    }
    return 0;
}
解説を表示 正解:ア
85 は 80 以上なので最初の条件 score >= 80 が true となり、「優」と表示されます。else if 以降は評価されません。

問題04-3

次のコードの出力はどれか。

#include <iostream>
using namespace std;
int main() {
    bool isMember = true;
    if (isMember) {
        cout << "会員価格が適用されます。" << endl;
    } else {
        cout << "通常価格です。" << endl;
    }
    return 0;
}
解説を表示 正解:ア
isMembertrue なので if ブロックが実行され、「会員価格が適用されます。」と表示されます。

問題04-4

int a = 10, b = 3; のとき、cout << a / b << endl; の出力はどれか。

解説を表示 正解:イ
整数同士の割り算は小数点以下が切り捨てられます。10 / 3 = 3(余り1)となります。小数を得たい場合は double 型を使うか、(double)a / b のようにキャストが必要です。

まとめ