コース一覧
    C言語基礎 制御フロー編
    条件の組み合わせ

    C言語基礎 制御フロー編

    C言語の条件分岐と繰り返しを学び、処理の流れを組み立てるコースです。

    1
    条件分岐
    01. if文15分
    02. else ifで多分岐15分
    03. switch文15分
    04. 三項演算子15分
    05. 定番 FizzBuzz判定15分
    06. 条件の組み合わせ15分
    07. つくる 合否とランク判定15分
    08. 第3章クイズ10分
    2
    繰り返し
    01. for文15分
    02. while15分
    03. do-while15分
    04. breakとcontinue15分
    05. 二重ループ(九九)15分
    06. FizzBuzzループ版15分
    07. つくる N人分の入力15分
    08. 第4章クイズ10分

    条件の組み合わせ

    判定の軸が2つあるとき

    ここまでは点数だけで判定してきました。実際の成績は、点数が足りていても出席が足りなければ不合格になります。判定の軸が2つに増えると、結果は3通りになります。合格、点数不足で不合格、出席不足で不合格の3つです。理由まで表示したいので、単に不合格とまとめるわけにはいきません。

    軸が2つあるときの書き方はふたつあります。if の中に if を入れる入れ子と、&& で条件をつなぐ平らな形です。

    入れ子で書く

    c

    if (attendance >= 80) {
        if (score >= 60) {
            printf("合格です\n");
        } else {
            printf("点数不足のため不合格です\n");
        }
    } else {
        printf("出席不足のため不合格です\n");
    }

    外側で出席を見て、出席を満たしている人だけを内側の点数判定へ通しています。内側の else に来た人は「出席は足りているが点数が足りない」人だと確定しているので、理由をそのまま書けます。判定の順序が構造として見えるのが入れ子の利点です。

    平らに書く

    同じことは && でも書けます。

    c

    if (attendance >= 80 && score >= 60) {
        printf("合格です\n");
    } else if (attendance >= 80) {
        printf("点数不足のため不合格です\n");
    } else {
        printf("出席不足のため不合格です\n");
    }

    字下げが浅く、3つの結果が縦に並ぶので見通しがよくなります。ただし2つ目の枝で attendance >= 80 をもう一度書いている点に注意してください。合格の条件を変えたとき、こちらも直し忘れると矛盾します。

    どちらを選ぶか

    条件が2つで、片方が明らかな前提条件になっているときは入れ子が読みやすくなります。逆に、結果の一覧を見せたいときや、入れ子が3段以上になりそうなときは平らな形にします。目安として、字下げが3段を超えたら書き方を見直す合図です。

    なお && は左から評価され、左が偽と分かった時点で右を見ません。これを短絡評価と呼びます。attendance >= 80 && score >= 60 で出席が足りなければ、点数の比較は行われません。今は結果に影響しませんが、後の章で割り算を条件に入れるときに効いてきます。

    else はどの if のものか

    入れ子を書くと、else がどの if に対応するのか迷う場面が出てきます。C の決まりは単純で、else は最も近い、まだ else を持っていない if に付きます。

    c

    if (attendance >= 80)
        if (score >= 60)
            printf("合格です\n");
    else
        printf("出席不足のため不合格です\n");

    字下げでは外側の if に付けたつもりですが、実際には内側の if に付きます。出席が足りていて点数が足りない人に「出席不足」と表示され、出席が足りない人には何も表示されない、というちぐはぐな結果になります。ここでも効くのが波かっこです。すべての if と else に波かっこを付けておけば、対応が目で見て確定するので、この種の取り違えは起こりません。

    要件

    1. scanf で整数を2つ読む。1つ目が点数、2つ目が出席率
    2. まず「点数は75点です」の形で表示する
    3. 出席率が80未満なら「出席不足のため不合格です」と表示する
    4. 出席率が足りていて点数が60以上なら「合格です」と表示する
    5. 出席率が足りていて点数が60未満なら「点数不足のため不合格です」と表示する

    ヒント

    出席率を外側、点数を内側にした入れ子の if で書けます

    出席不足の判定を先に済ませると、内側では点数だけを考えれば済みます

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/07

    関連レッスン

    • つくる 合否とランク判定

      分岐一式を組み合わせて合否とランクを出せるようになります。

    • 第3章クイズ

      第3章の理解を確認します。

    • for文

      回数を指定して繰り返せるようになります。

    main.c
    エディタを読み込んでいます

    メモ

    条件の組み合わせ

    ⌘S で保存