第五回-02 if 文および if~else 文

ここでは If 文、および If~Else 文を学ぶ。
これまでのプログラムは常に一本道であったが、if 文を学ぶと 状況に応じて処理が分岐するプログラムを記述できるようになる。

if 文

if 文は以下の構造を持っている。

if( 条件 ){
    命令 (複数の命令でも良い)
}


上記のような記述により、以下のような動作が実現される。 これを模式的に表すと、以下の様になる。



すなわち、条件が満たされているか (true)、満たされていないか (false) で、
「命令」を実行するかどうかが変わる、ということである。
これは、プログラムの処理が条件によって分岐する、と言い替えることができる。

使用例としては例えば以下のプログラムが挙げられる。
ユーザーが入力した整数が 5 より大きいときにのみ「あなたの入力した数字は5より大きいですね」と表示するプログラムである。
入力した整数が 5 以下の場合は何も表示されない。

int i;
std::cin >> i;     // コンソールから数字を入力して、変数 i に代入

if( i>5 ){
    std::cout << "あなたの入力した数字は5より大きいですね\n";
}

このプログラムを実行するには、「第一回-03 初めての C/C++ プログラミング(コンソールアプリケーション編)」を参考に
コンソールアプリケーションのプロジェクトを作成し、冒頭に

#include <iostream>

を記述してから main 関数内にプログラムを記述すれば良い。実際に動作を確認してみよう。
その際、「デバッグなしで開始」を実行した後、半角数字をコンソールに入力して Enter キーを押そう。

このとき、入力した数が 10 より大きければ「あなたの入力した数字は5より大きいですね」と表示される。



一方、入力した数が 5 以下ならばなにも表示されずにプログラムが終了する。



一方、入力した数が 5 以下ならば何も表示されずにプログラムが終了する。
つまり、プログラムの処理が i の値に応じて分岐したわけである。


if~else 文

if文では、一つの条件に対しその条件が正しいか (true)、正しくないか (false) で 命令を実行するかしないかの2通りに分岐させた。
このとき、「命令を実行するかしないか」の2通りではなく、 「命令1と命令2のどちらを実行するか」の2通りの方が便利なことが多い。

それを実現するのがif ~ else 文である。 if ~ else 文は以下のような構造をしている。

if( 条件 ){
    命令1 (複数の命令でも良い)
}else{
    命令2 (複数の命令でも良い)
}


この場合の模式図は以下の様になる。



先程の if 文との違いは、「ある命令を実行するかしないか」ではなく「命令1と命令2のどちらを実行するか」の2択になることである。

使用例は、上で用いた例の続きとすれば以下のようになるだろう。

int i;
std::cin >> i;

if( i>5 ){
    std::cout << "あなたの入力した数字は5より大きいですね\n";
}else{                                                            // 変更点
    std::cout << "あなたの入力した数字は5以下ですね\n";        // 変更点
}

先程の例と異なり、i が 5 以下の場合もメッセージが表示されるようになる。
すなわち、表示される内容が、i の大小により、以下の2択になったということである。 実行して違いを確認しておこう。


else if の利用

ここまでは、一つの条件に対しその条件が正しいか (true)、正しくないか (false) で2通りに分岐させた。
実際のプログラミングでは、命令を3通り、4通りと分岐させたいことがしばしばある。
そのような場合は else if によって条件を追加していくことができる。構造は以下の通り。

if( 条件1 ){
    命令1 (複数の命令でも良い)
}else if( 条件2 ){
    命令2 (複数の命令でも良い)
}else if( 条件3 ){
    命令3 (複数の命令でも良い)
…
}else if( 条件n-1 ){
    命令n-1 (複数の命令でも良い)
}else{
    命令n  (複数の命令でも良い)
}


これを模式的に表すと下図のようになる。



具体例を見た方が分かりやすいだろう。以下の例はこれまでの例を発展させ、処理を3つに分岐させている。 else の使い方に注意しよう。このプログラムでは「i が 5 に等しい」という条件を直接書いていないが、
「i>5 でもなく i<5 でもない (すなわち i=5)」と言う形で「i が 5 に等しい」という条件を実現しているのである。

int i;
std::cin >> i;

if(i>5){
	std::cout << "あなたの入力した数字は5より大きいですね\n";
}else if(i<5){
	std::cout << "あなたの入力した数字は5より小さいですね\n";
}else{
	std::cout << "あなたの入力した数字は5ですね\n";
}



条件の書き方

第五回-01 for 文による繰り返しでも紹介したが、条件文を書く際に必要な関係演算子の一覧をもう一度挙げる。

演算子 意味 備考
> 大きい
>= 以上
< 小さい
<= 以下
== 等しい C/C++ では「代入」は「=」、「等しい」は「==」、のように区別されているので注意。
1年生で学んだ Visual Basic ではどちらも「=」で区別していなかった。
!= 等しくない C/C++ では「!」は「否定」の意味がある。

さらに、「かつ」「または」という条件を記述するための記号も紹介。

&& かつ
|| または

これらは

if( 条件1 && 条件2 ){

}

や

if( 条件1 || 条件2 ){

}

のように用いる。



←第五回-01 for 文による繰り返し第五回-03 for 文と if 文を組み合わせる→

非情報系学生のための C/C++ 入門に戻る