【6日でできるC言語入門】if文のネスト

 プログラムで分岐処理を行う際、if文のネスト(入れ子構造)は不可欠なテクニックです。if文の中にさらにif文を記述することで、より細かい条件分岐や多段階の判定を行うことができます。
 ここでは、if文のネストの基礎から実践的な活用例までを、具体的なサンプルプログラムやフローチャートを使って解説します。

1.if文のネストの基本

1.1. ネストの意味と書き方

if文のネストとは、if文の内部に別のif文を配置し、2段階以上の判定を行う方法です。
複雑な条件判定をシンプルに書くために使われます。

サンプルプログラム1:2つの値が両方とも偶数か判定

プロジェクト/ファイル名: Lesson23_1/main.c

#include <stdio.h>

int main(void) {
    int a, b;
    printf("1つ目の整数を入力してください: ");
    scanf("%d", &a);
    printf("2つ目の整数を入力してください: ");
    scanf("%d", &b);

    if (a % 2 == 0) {
        if (b % 2 == 0) {
            printf("両方とも偶数です。\n");
        } else {
            printf("1つ目は偶数ですが、2つ目は偶数ではありません。\n");
        }
    } else {
        printf("1つ目は偶数ではありません。\n");
    }
    return 0;
}

実行結果

「SDLチェック」を「いいえ」にして、プログラムを実行します。

1つ目の整数を入力してください: 4
2つ目の整数を入力してください: 8
両方とも偶数です。

1つ目の整数を入力してください: 4
2つ目の整数を入力してください: 5
1つ目は偶数ですが、2つ目は偶数ではありません。

1つ目の整数を入力してください: 3
2つ目の整数を入力してください: 8
1つ目は偶数ではありません。

1.2. ネストの流れ(フローチャート)

if文のネストによる処理の流れは下表のようになります。

判定内容メッセージ
aが偶数, bが偶数両方とも偶数です。
aが偶数, bが奇数1つ目は偶数ですが、2つ目は偶数ではありません。
aが奇数1つ目は偶数ではありません。

if文のネストのフローチャート

2.実践的なif文のネスト例

2.1. テストの合格判定(60点以上で合格、40点以上で追試、それ未満は不合格)

サンプルプログラム2

プロジェクト/ファイル名: Lesson23_2/main.c

#include <stdio.h>

int main(void) {
    int score;
    printf("テストの点数を入力してください: ");
    scanf("%d", &score);

    if (score >= 40) {
        if (score >= 60) {
            printf("合格です。\n");
        } else {
            printf("追試です。\n");
        }
    } else {
        printf("不合格です。\n");
    }
    return 0;
}

実行結果

「SDLチェック」を「いいえ」にして、プログラムを実行します。

テストの点数を入力してください: 75
合格です。

テストの点数を入力してください: 55
追試です。

テストの点数を入力してください: 30
不合格です。
scoreメッセージ
60以上合格です。
40以上60未満追試です。
40未満不合格です。

3.ネストの注意点と工夫

3.1. ネストが深くなる場合の可読性

 if文を何段もネストすると、プログラムが読みづらくなります。その場合は論理演算子(&&や||)の活用や、else ifの利用で可読性を高める工夫が必要です。

例:論理演算子でシンプルに書く

if (a % 2 == 0 && b % 2 == 0) {
    printf("両方とも偶数です。\n");
}

まとめ

 if文のネストは、多段階の判定や細かな条件分岐にとても役立ちます。ただし、ネストが深くなりすぎると読みにくくなるため、論理演算子の併用やelse ifの活用で整理することも大切です。
実践的なサンプルをもとに、ネストの仕組みと使い方をしっかり身につけましょう。