コース一覧
    C言語基礎 制御フロー編
    else ifで多分岐

    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分

    else ifで多分岐

    3つ以上に分けたい

    前回の if と else では、2つにしか分けられませんでした。成績は合否だけでなく、A から F までのランクも付けたいところです。分け先が3つ以上あるときは else if をつなげます。

    c

    if (score >= 90) {
        printf("ランクはAです\n");
    } else if (score >= 80) {
        printf("ランクはBです\n");
    } else if (score >= 70) {
        printf("ランクはCです\n");
    } else {
        printf("ランクはFです\n");
    }

    これは新しい文法ではありません。else のうしろに次の if 文を置いただけです。C の else は「文を1つ」取れるので、そこに if 文が来ています。だから何段でもつなげられます。

    上から順に見て、最初に当たった1つだけ

    else if の連なりで一番大事な性質は、上から順番に判定して、最初に真になった枝だけを実行し、残りを全部飛ばすことです。

    95点のときを追いかけてみます。score >= 90 が真なので A を表示し、そこで終わりです。下にある score >= 80 も score >= 70 も真ですが、評価すらされません。この性質があるおかげで、2つ目以降の条件に「80以上かつ90未満」と書かずに済んでいます。90以上はすでに上で捕まっているので、2つ目にたどり着いた時点で90未満だと分かっているからです。

    だから順番を間違えると壊れる

    裏を返すと、ゆるい条件を先に書くと後ろが死にます。

    c

    if (score >= 60) {
        printf("ランクはDです\n");
    } else if (score >= 90) {
        printf("ランクはAです\n");
    }

    95点でも表示は D です。95 は 60 以上なので1つ目で確定してしまい、A の行には永久に到達しません。条件が数直線で重なるときは、厳しいほうから並べるのが鉄則です。

    最後の else を書いておく

    一番下の else は「ここまでのどれにも当たらなかった残り全部」を受け止めます。ここを書かずに else if (score >= 0) のように条件を付けると、想定外の値がどの枝にも入らず、何も表示されないプログラムになります。何も起きないバグは原因を追いにくいので、受け皿としての else は必ず用意してください。

    else を付けない if を並べるのとは違う

    見た目が似ているので、次の書き方と混同しないでください。

    c

    if (score >= 90) {
        printf("ランクはAです\n");
    }
    if (score >= 80) {
        printf("ランクはBです\n");
    }

    else が無いので、これは独立した2つの if 文です。95点なら A と B の両方が表示されます。1つ目で確定して残りを飛ばす、という働きは else があってはじめて生まれます。ランクのように「必ずどれかひとつ」を選びたいときは、必ず else if でつないでください。

    境界をどちらに含めるか

    段階評価で必ず問題になるのが境界の値です。80点ちょうどは B なのか C なのかを、先に決めてから書きます。>= は「以上」で境界を含み、> は「より大きい」で境界を含みません。80点を B にしたいなら score >= 80 です。ここを score > 80 にすると80点だけが下の枝に落ち、10段階のうち1点分だけ結果がずれます。テストするときは境界の値そのものを必ず入れて確かめてください。

    要件

    1. まず「点数は95点です」の形で表示する
    2. 90以上はA、80以上はB、70以上はC、60以上はD、それ未満はFとする
    3. ランクは「ランクはAです」の形で表示する
    4. else if をつないで書き、条件は厳しいほうから並べる

    ヒント

    1つ目の条件を通り抜けた時点で90未満は確定しているので、2つ目に「90未満」を書き足す必要はありません

    最後は else にします。条件を付けるとどこにも入らない点数が生まれます

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

    関連レッスン

    • switch文

      値ごとの分岐を switch で書けるようになります。

    • 三項演算子

      条件によって値そのものを切り替えられるようになります。

    • 定番 FizzBuzz判定

      複合条件の定石を書けるようになります。

    • 条件の組み合わせ

      入れ子になった条件を整理して書けるようになります。

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

    メモ

    else ifで多分岐

    ⌘S で保存