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文をより深く理解する助けになれれば幸いです。 意味不明、わからない、簡単すぎる、間違っている、など何かございましたらお知らせください。


次:うるう年判定プログラム

- C言語入門 記事一覧

おまけ

IPv6基礎検定

YouTubeチャンネルやってます!