C言語基礎|if文とelseによる分岐

if文に「それ以外」を教えよう

前回学習した if 文は、
「条件が成り立つときだけ処理を行う」
というものでした。

しかし、それだけだと、

  • 条件が成り立たないときに何も起きない。
  • 実行した人が結果を判断しづらい。

という場面が出てきます。

そこで登場するのが else です。
else を使うと、

条件が成り立たなかった場合の処理

をはっきりと書けるようになります。

else付きif文の基本構造

else を含んだ if 文の基本形は、次のとおりです。

書式意味
if (式) 文1 else 文2条件に応じてどちらか一方を実行

この構造では、
必ずどちらか一方の文が実行されます。

if–else文の流れを図で理解する

if–else 文の処理の流れを、文章による図で表すと次のようになります。

if–else 文の流れ

  • 制御式を評価する
  • 値が非0
     → 文1を実行
  • 値が0
     → 文2を実行

ポイントは、
両方とも実行されることはない
どちらも実行されないこともない
という点です。

サンプル①:点数による合否判定

ここでは、
入力した点数が60点以上かどうかを判定する
プログラムに変更してみましょう。

サンプルプログラム

プロジェクト名:chap3-2-1 ソースファイル名:chap3-2-1.c

Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。

// 点数が合格か不合格かを判定する
#include <stdio.h>

int main(void)
{
    int score;

    printf("点数を入力してください:");
    scanf("%d", &score);

    if (score >= 60)
        puts("合格です。おめでとう!");
    else
        puts("今回は不合格です。");

    return 0;
}

実行例

点数を入力してください:75
合格です。おめでとう!

点数を入力してください:42
今回は不合格です。

条件に応じて、必ずどちらかのメッセージが表示されます。

if文だけの場合との違い

if文だけの場合と、if–else文の違いを整理してみましょう。

構造特徴
if (式) 文条件が成り立つときだけ実行
if (式) 文1 else 文2条件に応じて必ずどちらか実行

「結果を必ず表示したい」「判断結果を明確にしたい」
そんな場面では、if–else 文がとても便利です。

サンプル②:正の数か負の数かを判定する

次は、
入力した数が正の数かどうか
を判定するプログラムです。

サンプルプログラム

プロジェクト名:chap3-2-2 ソースファイル名:chap3-2-2.c

Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。

// 入力した整数が正かどうかを判定する
#include <stdio.h>

int main(void)
{
    int value;

    printf("整数を入力してください:");
    scanf("%d", &value);

    if (value > 0)
        puts("その数は正の数です。");
    else
        puts("その数は0以下です。");

    return 0;
}

実行例

整数を入力してください:12
その数は正の数です。

整数を入力してください:-3
その数は0以下です。

制御式には「値そのもの」も使える

if 文の制御式は、
比較式だけでなく、値そのものを書くこともできます。

非ゼロとゼロの考え方

判定
非0条件が成り立つ
0条件が成り立たない

これを使うと、次のような書き方ができます。

if (num)
    puts("ゼロではありません。");
else
    puts("ゼロです。");

数値をそのまま条件として使えます。

if文とif–else文の使い分け

ここで、2種類の if 文を整理しておきましょう。

if文

用途
if (式) 文条件が成立したときだけ処理したい。

if–else文

用途
if (式) 文1 else 文2条件に応じて処理を分けたい。

プログラムの意図に応じて、
どちらを使うか選ぶことが大切です。

演習問題:if–elseを使った判定問題

演習3-1

二つの整数を読み込み、
後者が前者の倍数であれば

BはAの倍数です。

そうでなければ
BはAの倍数ではありません。

と表示するプログラムを作成せよ。

解答例

プロジェクト名:chap3-2-3 ソースファイル名:chap3-2-3.c

Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。

#include <stdio.h>

int main(void)
{
    int a, b;

    printf("二つの整数を入力してください。\n");
    printf("整数A:");
    scanf("%d", &a);
    printf("整数B:");
    scanf("%d", &b);

    if (b % a == 0)
        puts("BはAの倍数です。");
    else
        puts("BはAの倍数ではありません。");

    return 0;
}

if–elseを使うと「説明できるプログラム」になる

if–else 文を使うことで、

  • 判断結果が必ず表示される。
  • 利用者が結果を理解しやすい。
  • プログラムの意図が明確になる。

というメリットがあります。

この次は、
else if による複数条件分岐
へ進むと、さらに表現力が広がります 🚀

ここまで理解できれば、
「プログラムが選択肢を持つ」 という感覚が身についてきます 👍
次は複数の条件を扱う else if が楽しみですね。