三項演算子のC言語での使用法

こんにちは、将来のプログラミングの達人たち!今日は、C言語における三項演算子の世界に興味深く飛び込んでいきましょう。これまで聞いたことがないとしても、このレッスンの終わりまでには、この強力なツールをプロのように使いこなすことができるようになるでしょう!

C - Ternary Operator

三項演算子とは?

まずは準備をしましょう。アイスクリーム屋さんで、チョコレートとバニラの間で選択するシーンを思い浮かべてください。普通はif-else文を使ってこの決定を行うと思いますが、もっと短く、より洗練された方法があることをご存知ですか?それが三項演算子です!

三項演算子は簡略化されたif-else文です。三つのオペランドを取ることから「三項(ternary)」と呼ばれています。コード内での決定を短くするショートカットとして考えられます。

C言語における三項演算子の構文

この便利な演算子の構文を分解してみましょう:

condition ? expression1 : expression2

このように動作します:

  1. まず、conditionを評価します。
  2. conditionが真である場合、expression1を実行します。
  3. conditionが偽である場合、expression2を実行します。

シンプルですね?「この条件が真かどうか?はいならこれをやる、いいえならこれをやる」と考える感じです。では、実際に使ってみましょう!

例1: C言語における三項演算子

まずは基本的な例から始めましょう:

#include <stdio.h>

int main() {
    int age = 20;
    char *status = (age >= 18) ? "adult" : "minor";
    printf("You are an %s.\n", status);
    return 0;
}

この例では、ageが18歳以上かどうかをチェックしています。それが真の場合は「adult」を、偽の場合は「minor」をstatusに割り当てます。出力は「You are an adult.」になります。

以下に分解します:

  • (age >= 18) は条件
  • "adult" は条件が真の場合に割り当てる値
  • "minor" は条件が偽の場合に割り当てる値

例2: 数値の比較

では、三項演算子を使って二つの数の大きな方を見つけましょう:

#include <stdio.h>

int main() {
    int a = 10, b = 20;
    int max = (a > b) ? a : b;
    printf("The larger number is: %d\n", max);
    return 0;
}

ここでは、abを比較しています。aが大きい場合、amaxに割り当て、それ以外の場合はbを割り当てます。出力は「The larger number is: 20」になります。

例3: 偶数または奇数のチェック

三項演算子を使って数が偶数か奇数かをチェックしてみましょう:

#include <stdio.h>

int main() {
    int number = 7;
    printf("%d is %s.\n", number, (number % 2 == 0) ? "even" : "odd");
    return 0;
}

この例では、numberが2で割り切れるかどうかをチェックしています。それが真の場合は「even」を、偽の場合は「odd」を表示します。出力は「7 is odd.」になります。

例4: 絶対値

三項演算子を使って数の絶対値を見つける方法も見てみましょう:

#include <stdio.h>

int main() {
    int number = -5;
    int absolute = (number < 0) ? -number : number;
    printf("The absolute value of %d is %d.\n", number, absolute);
    return 0;
}

numberが負である場合、-1倍して正にします。それ以外の場合はそのままです。出力は「The absolute value of -5 is 5.」になります。

例5: 成績の分類

三項演算子を使って成績を分類してみましょう:

#include <stdio.h>

int main() {
    int score = 75;
    char *result = (score >= 60) ? "Pass" : "Fail";
    printf("Your score is %d. Result: %s\n", score, result);
    return 0;
}

ここでは、scoreが60以上かどうかをチェックしています。それが真の場合は「Pass」を、偽の場合は「Fail」をresultに割り当てます。出力は「Your score is 75. Result: Pass」になります。

例6: うるう年チェック

三項演算子を使って年がうるう年かどうかをチェックしてみましょう:

#include <stdio.h>

int main() {
    int year = 2024;
    char *result = ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) ? "Leap Year" : "Not a Leap Year";
    printf("%d is %s.\n", year, result);
    return 0;
}

この例では、yearが4で割り切れるかつ100で割り切れない、または400で割り切れるかどうかをチェックしています。それが真の場合は「Leap Year」を、偽の場合は「Not a Leap Year」を表示します。出力は「2024 is Leap Year.」になります。

ネストされた三項演算子

では、ネストされた三項演算子を使って少し難しいことをやってみましょう。コードのロシアンマトリョーシカのように!

#include <stdio.h>

int main() {
    int num = 10;
    char *result = (num > 0) ? "positive" : (num < 0) ? "negative" : "zero";
    printf("%d is %s.\n", num, result);
    return 0;
}

この例では、まずnumが正であるかどうかをチェックします。それが偽の場合は、numが負であるかどうかをチェックします。それも偽の場合は、0であると判断します。出力は「10 is positive.」になります。

結論

そして、皆さん!C言語における三項演算子の使い方をマスターしました。正しく使えば、コードをより簡潔で読みやすくすることができます。しかし、強力なツールには責任が伴います。三項演算子を賢く使いましょう!

以下に、今回カバーした方法の簡単な参照表を示します:

方法 構文
基本的三項 condition ? expr1 : expr2 (age >= 18) ? "adult" : "minor"
数値の比較 (a > b) ? a : b int max = (a > b) ? a : b;
偶数または奇数 (num % 2 == 0) ? "even" : "odd" (7 % 2 == 0) ? "even" : "odd"
絶対値 (num < 0) ? -num : num int abs = (num < 0) ? -num : num;
成績の分類 (score >= 60) ? "Pass" : "Fail" char *result = (score >= 60) ? "Pass" : "Fail";
うるう年チェック ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) ? "Leap Year" : "Not a Leap Year" char *result = ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) ? "Leap Year" : "Not a Leap Year";
ネストされた三項 cond1 ? expr1 : cond2 ? expr2 : expr3 (num > 0) ? "positive" : (num < 0) ? "negative" : "zero"

練習を続ければ、すぐに三項演算子を使いこなすことができるようになります。楽しくプログラミングを続けましょう!

Credits: Image by storyset