C言語入門:if、else、else if (3)
C言語でプログラムを書くうえで「もしもこうなったら、こうする」「この場合はこうする」「それ以外の場合はこうする」など、条件によりプログラムを分岐させる事は非常に重要です。 処理を分岐させるif文・else文・else if文の基本的な使い方は前述しましたが、ここではもう少し高度な使い方の説明したいと思います。 ここでは、サンプルコードの結果は書いていません。 実際に手元にサンプルコードをコピー ⇒ コンパイル ⇒ 実行してみてください。
if文の内部にさらにifがある状態
前述した例では、ifやelseは単体として使っていました。 今度は、もう少し複雑にしてみたいと思います。
今回の例では、if文の中にさらにif文を入れます。 例えば、以下のサンプルでは一つ目のif文内部は処理されますが、一つ目のif文内部にはさらにifやelseがあります。
#include <stdio.h>
int
main()
{
int a;
a = 10;
if (a < 100) {
printf("a is less than 100\n");
if (a < 0) {
printf("a is less than 0\n");
} else if (a < 50) {
printf("a is less than 50\n");
} else if (a > 5) {
printf("a is more than 5\n");
} else {
printf("else\n");
}
}
}
さて、上記例の実行結果はどうなるでしょうか? 答えを書いてしまうと、まず、「a is less than 100」と表示されます。 最初のif文に入っている事がこれでわかります。 次に表示されるのは「a is less than 50」です。 その後、何も表示されずにプログラムは終了します。 ここで注意していただきたいのは、「a is more than 5」という表示がされないことです。 「else if (a > 5)」というのは一見条件を満たしているように見えますが、直前のelse if内部に入ってしまっているので、その後のelse ifやelseには処理が行かないためです。
上記例のようにif文が複数ネストしている(入れ子になっている)構造はプログラムを書くうえで良く使う構造です。 是非覚えましょう。
if文の条件部分に複数の条件がある状態
今までの例では、if文の条件はそれぞれ一つでした。 C言語では、複数の条件式を組み合わせて条件を作成できます。 (実際には一つの長い条件ということになりますが、ここでは説明のため「複数の条件」という事にしときます)
以下の例では、if文の中に複数の条件を混ぜています。
#include <stdio.h>
int
main()
{
int a = 7;
int b = 3;
if (a == 7 && b == 3) {
printf("first [if]\n");
}
if (a > 100 || b > 100 || a == b || a == 7) {
printf("second [if]\n");
}
if (11 % 7 == 4 && 1 + 1 + 1 == b) {
printf("third [if]\n");
}
}
何か意味不明と思われるかも知れませんが、一つずつ説明して行きたいと思います。 まず、最初に結果を言ってしまうと「first [if]」「second [if]」「third [if]」全てが表示されます。
まず、最初のif文ですが、「a == 7 かつ b == 3」という条件文です。 aの値は7でbの値は3なので、この条件文は真になります。
次は、「aは100より大きい もしくは bは100より大きい もしくは a == b もしくは a == 7」という条件です。 まず、aは7なので100より大きくありません。 次に、bは3なので100より大きくありません。 さらに、aは7でbは3なのでaとbの値は同じではありません。 最後の条件ですが、aは7なので a == 7は真になります。 このif文の条件は、4つの要素から成り立っていますが、最初の要素は各自「偽」ですが最後のa == 7というのが真です。 4つの要素はそれぞれ「|| (OR)」でつながっているので、どれか一つが真になれば条件文全体としては真になります。 なので、「second [if]」という文字列の表示されます。
最後の条件ですが、条件文の中に式が入っています。 まず、最初の式ですが、「11を7で割った余りが4」という意味です。 次の式は、「1 + 1 + 1 は bの値と同一である」という意味です。 それぞれの式は「&& (AND)」でつながっているので、条件文全体としては、「11を7で割った余りが4 かつ 1+1+1とbの値は同一」ということになります。 11を7で割った余りは4で、しかもbに入っている値は3なので、両方の式は真になり、if文の条件も真になります。 その結果、「third [if]」という文字列が表示されます。
最後に
ここでは、前述した例よりも多少複雑なif文の使い方の例を挙げました。 if、else if、else文をより深く理解する助けになれれば幸いです。 意味不明、わからない、簡単すぎる、間違っている、など何かございましたらお知らせください。
おまけ