Skip to content

4. 条件分岐

4.1 if文

4.1.1 if

何らかの処理を、特定の条件を満たすときにだけ実行したい場合は、if文と呼ばれる構文を用いる。ifの後に条件を記し、その後の{}の中に条件を満たしていたときだけ実行したい命令を記述する。

以下は、入力された点数が60点以上であれば「合格」、そうでなければ「不合格」と表示するプログラムである。

cpp
#include <iostream>
using namespace std;

int main() {
  cout << "点数を入力してください。" << endl;
  int score;
  cin >> score;

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

フローチャートで表すと以下のようになる。

score >= 60は、と同じである。+-/*と同じくして、条件を記述する演算子も存在する。演算子は以下の通り。

演算子数学の記号
>=
>
<
<=
==
!=

WARNING

===を混同しないように注意。=代入==等価である。

4.1.2 else

4.1.1で示した例は、60点以上「でない」ときをif (score < 60)と記述することで実装した。ただ、実際には「そうでないとき」をelse文によって簡単に記述できる。

cpp
#include <iostream>
using namespace std;

int main() {
  cout << "点数を入力してください。" << endl;
  int score;
  cin >> score;

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

TIP

else文は、if文の終わり(=})の次に書く必要がある。

4.1.3 else if

4.1.2のコードに「満点だったら」という条件を足す。

cpp
#include <iostream>
using namespace std;

int main() {
  cout << "点数を入力してください。" << endl;
  int score;
  cin >> score;

  if (score == 100) {
    cout << "満点です。" << endl;
  } else {
    if (score >= 60) {
      cout << "合格です。" << endl;
    } else {
      cout << "不合格です。" << endl;
    }
  }
}

ただ、このように書くのは冗長なので、else ifと短縮する事が許されている。

cpp
#include <iostream>
using namespace std;

int main() {
  cout << "点数を入力してください。" << endl;
  int score;
  cin >> score;

  if (score == 100) {
    cout << "満点です。" << endl;
  } else if (score >= 60) {
    cout << "合格です。" << endl;
  } else {
    cout << "不合格です。" << endl;
  }
}

こちらの方が、若干ではあるがコードを読みやすいと感じるだろう。

4.1.4 変数のスコープ

変数が使える範囲には制限があり、これを変数のスコープと呼ぶ。

具体的には、{}の外からは変数にアクセスできない。

例えば次のプログラムで言えば、変数zは8行目から10行目まででしか使用できない。12行目は正しく実行できない。(コンパイルエラーとなる。)

変数xは5行目から13行目まで好きなところで使用できる。

cpp
#include <iostream>
using namespace std;

int main() {
  int x = 8;

  if (x < 10) {
    int z = 10;
    cout << z << endl;  // OK!
    cout << x << endl;  // OK!
  }
  cout << z << endl;  // NG
  cout << x << endl;  // OK!
}