0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

この記事について

「C言語の基礎を学ぼう」をテーマに、自身の知識 + α をアドベントカレンダーにまとめます。
25日間でC言語をマスターしよう - Qiita Advent Calendar 2025 - Qiita

こんな方を対象としています

  • コンピュータがプログラムをどのように動かしているか知りたい/知らない方

  • プログラミングをしてみたい方

  • C言語初心者の方

キーワード

  • if-else文

  • 条件演算子

  • switch文

説明

if文

特定の条件で特定の操作をしたい場合、分岐命令を利用します。
分岐命令の1つに if文 があります。

#include <stdio.h>
int main(void) {
    int a = 5;
    if (a == 5) {
        printf("aは5です。");
    }
    return 0;
}
aは5です。

if文のかっこ内には 条件式 を記載します。

条件式が 真(true) の場合、if文に囲まれた部分が 実行されます
条件式が 偽(false) の場合、if文に囲まれた部分は 実行されません

条件式によく使われる演算子を下記にまとめます。

演算子 使用例 意味
== a == b a と b が等しいなら真。
!= a != b a と b が等しくないなら真。
> a > b a が b より大きいなら真。
< a < b a が b より小さいなら真。
>= a >= b a が b 以上なら真。
<= a <= b a が b 以下なら真。
&& 式a && 式b 式aが真、かつ、式bが真なら真。
|| 式a || 式b 式aが真、または、式bが真なら真。
! !式a 式aが偽なら真。

&& || を使用するときは、評価される順番に注意が必要です。

|| を使用する場合、 左から右 に評価され、 になる条件式があった時点で それ以降の式を評価(実行)しません
(後続の式が真でも偽でも、条件式全体が真であることは確定するため)

#include <stdio.h>
int main(void) {
    int a = 5, b = 6;
    if (a == 5 || b++ == 6) { // bは7になるか?
        printf("aは5です。\n");
    }
    printf("bは%dです。\n", b);
    return 0;
}
aは5です。
bは6です。

&& を使用する場合、 左から右 に評価され、 になる条件式があった時点で それ以降の式を評価(実行)しません
(後続の式が真でも偽でも、条件式全体が偽であることは確定するため)

#include <stdio.h>
int main(void) {
    int a = 5, b = 6;
    if (a == 1 && b++ == 6) { // bは7になるか?
        printf("aは1です。\n");
    }
    printf("bは%dです。\n", b);
    return 0;
}
bは6です。

C言語の真と偽には、特殊な注意点があります。
真と偽の式の値は整数 という点です。

#include <stdio.h>
int main(void) {
    int a = 5;
    printf("真:%d 偽:%d", a == 5, a != 5);
    return 0;
}
真:1 偽:0

上記の通り、条件式を評価した場合、真なら1、偽なら0となります。

C言語では下記のように決まっています。

  • 真とは:0以外であること

  • 偽とは:0であること

そのため、下記のようなプログラムを書いても成立してしまう点に注意が必要です。

#include <stdio.h>
int main(void) {
    int a = 5;
    if (a = 4) { // ==の間違いだが、式の値は4(0以外)のため、真となる。
        printf("aは4です。");
    }
    return 0;
}
aは4です。

else文

else文は、直前のif文が偽である場合の処理を書くために使用します。

#include <stdio.h>
int main(void) {
    int a = 5;
    if (a == 1) {
        printf("aは1です。");
    } else {
        printf("aは1以外です。");
    }
    return 0;
}
aは1以外です。

else文の中に新たなif文を書くこともできます。

#include <stdio.h>
int main(void) {
    int a = 5;
    if (a == 1) {
        printf("aは1です。");
    } else if (a == 3) {
        printf("aは3です。");
    } else {
        printf("aは1でも3でもないです。");
    }
    return 0;
}
aは1でも3でもないです。

条件演算子

if-else文と同じような動作をする 条件演算子 というものがあります。
条件演算子はC言語の唯一の三項演算子(3つの項をもつ演算子)のため、三項演算子と呼ばれることもあります。

条件式 ? 真の場合に実行する式 : 偽の場合に実行する式 ;

プログラムが読みづらくなる演算子の1つであるため、多用には注意が必要です。

#include <stdio.h>
int main(void) {
    int a = 5;
    a == 1 ? printf("aは1です。") : printf("aは1以外です。");
    return 0;
}
aは1以外です。

switch文

多くの条件式がある場合、switch文を利用します。

#include <stdio.h>
int main(void) {
    int a = 2;
    switch (a) {
        case 1:
            printf("aは1です。\n");
            break;
        case 2:
            printf("aは2です。\n");
            break;
        case 3:
            printf("aは3です。\n");
            break;
        case 4:
            printf("aは4です。\n");
            break;
        default:
            printf("aは1~4以外です。\n");
            break;
    }
    return 0;
}
aは2です。
  • switch のかっこ内に評価する式を書きます。

  • case に一致する値がある場合、それ以降の式が実行されます。

  • default は一致する case が無い場合に実行されます。

  • break はそのブロック({})を抜ける処理です。

break を書かない場合、下記のような動作になるため、想定した動作になるか注意が必要です。

#include <stdio.h>
int main(void) {
    int a = 2;
    switch (a) {
        case 1:
            printf("aは1です。\n");
        case 2:
            printf("aは2です。\n");
        case 3:
            printf("aは3です。\n");
        case 4:
            printf("aは4です。\n");
        default:
            printf("aは1~4以外です。\n");
    }
    return 0;
}
aは2です。
aは3です。
aは4です。
aは1~4以外です。

練習

1. 偶数か奇数か?

整数aが偶数か奇数か調べよう。

4は偶数です!
5は奇数です!

ポイント

偶数以外は奇数です。

解答例

#include <stdio.h>
int main(void) {
    int a = 4;
    if (a % 2 == 0) {
        printf("%dは偶数です!", a);
    } else {
        printf("%dは奇数です!", a);
    }
    return 0;
}
4は偶数です!

条件演算子でも書けそうです。

#include <stdio.h>
int main(void) {
    int a = 5;
    a % 2 == 0 ? printf("%dは偶数です!", a) : printf("%dは奇数です!", a);
    return 0;
}
5は奇数です!

2. 2の倍数か4の倍数か?

整数aが2の倍数か4の倍数か調べよう。

6は2の倍数です!

ポイント

2の倍数かつ4の倍数である可能性があります。

解答例

#include <stdio.h>
int main(void) {
    int a = 8;
    if (a % 2 == 0) {
        printf("%dは2の倍数です!\n", a);
    }
    if (a % 4 == 0) {
        printf("%dは4の倍数です!\n", a);
    }
    return 0;
}
8は2の倍数です!
8は4の倍数です!

3. スケジュールを教えよう

今はa時。a時以降のスケジュールを出力しよう。

  • 10:00 - カフェに行く
  • 12:00 - ランチ会
  • 13:00 - 講演会
  • 17:00 - 同窓会
  • 21:00 - オンラインゲーム
今は17時です。
17:00 - 同窓会
21:00 - オンラインゲーム

ポイント

switch文を利用しましょう。処理を実行しないcase文があってもよいです。

解答例

#include <stdio.h>
int main(void) {
    int a = 17;
    printf("今は%d時です。\n", a);
    switch (a) {
        case 0:
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
        case 6:
        case 7:
        case 8:
        case 9:
        case 10: printf("10:00 - カフェに行く\n");
        case 11:
        case 12: printf("12:00 - ランチ会\n");
        case 13: printf("13:00 - 講演会\n");
        case 14:
        case 15:
        case 16:
        case 17: printf("17:00 - 同窓会\n");
        case 18:
        case 19:
        case 20:
        case 21: printf("21:00 - オンラインゲーム\n");
        case 22:
        case 23:
        case 24:
    }
    return 0;
}
今は17時です。
17:00 - 同窓会
21:00 - オンラインゲーム

switch文の break が無い使い方にも慣れておくとよさそうです。

おわりに

分岐処理がきれいなプログラムは読みやすいプログラムになります。
if文の中にif文、その中にif文…と入れ子になりすぎないように気を付けたいですね。

参考文献

↓↓↓ はじめてプログラミングを学んだときに読んだ本です ↓↓↓
詳細(プログラミング入門 C言語)|プログラミング|情報|実教出版

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?