C言語

【C言語】第1章第15回:条件式(三項演算子)の基本

条件式(三項演算子)は、簡潔に条件分岐を記述できる便利な演算子です。この章では、三項演算子の基本的な使い方や実際のプログラム例を交えながら、その利便性を詳しく解説します。

1. 条件式(三項演算子)とは?

三項演算子(?:)は、条件が真か偽かによって異なる値を返す演算子です。

基本構文

条件式 ? 真の場合の値 : 偽の場合の値;

三項演算子は以下のように動作します:

  • 条件式が真(true)の場合、真の場合の値が返されます。
  • 条件式が偽(false)の場合、偽の場合の値が返されます。

2. 基本的な例

以下のプログラムでは、三項演算子を使用して、入力された数が偶数か奇数かを判定します。

#include <stdio.h>

int main() {
    int number;

    printf("Enter a number: ");
    scanf("%d", &number); // ユーザー入力を取得

    // 三項演算子を使用して判定
    const char *result = (number % 2 == 0) ? "Even" : "Odd";

    printf("The number is %s.\n", result); // 結果を表示
    return 0;
}

解説:

  1. number % 2 == 0:入力された数が2で割り切れるかを判定。
  2. 三項演算子を使用して、結果を"Even"または"Odd"に設定。
  3. printfで判定結果を出力。

3. ネストされた三項演算子

三項演算子はネストして使用することもできます。ただし、複雑になりすぎると可読性が低下するため注意が必要です。

例:最大値の判定

#include <stdio.h>

int main() {
    int a = 10, b = 20, c = 15;

    // ネストされた三項演算子を使用して最大値を判定
    int max = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);

    printf("The maximum value is %d.\n", max);
    return 0;
}

解説:

  • 最初にabを比較し、大きい方を判定。
  • その結果をcと比較し、最終的な最大値を求めます。

4. 三項演算子の注意点

三項演算子を使用する際には、以下の点に注意してください:

  • 複雑な条件を記述すると、コードの可読性が低下します。
  • 適切なカッコを使用して、演算子の優先順位を明確にする必要があります。

例:読みやすい書き方

#include <stdio.h>

int main() {
    int score = 75;

    // 三項演算子を使用して成績を判定
    const char *grade = (score >= 90) ? "A" : 
                        (score >= 80) ? "B" : 
                        (score >= 70) ? "C" : "F";

    printf("Your grade is %s.\n", grade);
    return 0;
}

解説:条件ごとに改行を入れることで、ネストされた三項演算子でも可読性を保っています。

5. 練習問題

以下の課題に挑戦して、三項演算子の理解を深めてください。

  1. 三項演算子を使用して、2つの数値のうち小さい方を出力するプログラムを作成してください。
  2. 三項演算子を使い、ユーザー入力を基に「正の数」「負の数」「ゼロ」を判定するプログラムを作成してください。
  3. 3つの整数を入力し、三項演算子を使用してそれらの中間値を判定するプログラムを作成してください。

6. 練習問題の解答と解説

問1の解答

#include <stdio.h>

int main() {
    int x = 10, y = 20;

    // 三項演算子を使用して小さい方を判定
    int min = (x < y) ? x : y;

    printf("The smaller number is %d.\n", min);
    return 0;
}

問2の解答

#include <stdio.h>

int main() {
    int number;

    printf("Enter a number: ");
    scanf("%d", &number);

    // 三項演算子を使用して判定
    const char *result = (number > 0) ? "Positive" : 
                         (number < 0) ? "Negative" : "Zero";

    printf("The number is %s.\n", result);
    return 0;
}

問3の解答

#include <stdio.h>

int main() {
    int a, b, c;

    printf("Enter three numbers: ");
    scanf("%d %d %d", &a, &b, &c);

    // 三項演算子を使用して中間値を判定
    int mid = (a > b) ? ((a < c) ? a : (b > c ? b : c)) : 
              ((b < c) ? b : (a > c ? a : c));

    printf("The middle value is %d.\n", mid);
    return 0;
}

7. まとめ

三項演算子は、短く簡潔に条件分岐を記述するための便利なツールです。ただし、複雑すぎるネストを避け、可読性を意識したコードを書くよう心がけましょう。練習問題を通じて、その使い方を習得し、プログラムの効率性を高めてください。