C 言語における条件分岐の実装

CBeginner
オンラインで実践に進む

はじめに

この実験では、C プログラミングにおける条件文の実装方法を学びます。まず、ifelse if、および else 文の基本構文を紹介し、次に 2 つの数を比較するための単純な if 文を書きます。また、複数の条件に対して else if を使用する方法を検討し、さまざまな入力でプログラムをコンパイルおよびテストする方法を学びます。

この実験では、条件論理の基本概念を扱います。これらは、C プログラムにおける意思決定機能を構築するために不可欠です。この実験が終了するとき、異なる条件に基づいてコードのフローを制御するために条件文をどのように使用するかを十分に理解しているでしょう。

if 構文(if、else if、else)の理解

プログラミングの世界では、意思決定は重要なスキルであり、条件文がそれを達成する鍵となっています。このステップでは、ifelse if、および else 構文を使用して、C プログラミングにおける条件文の基本概念を深く掘り下げます。これらの強力なツールを使うことで、プログラムは決定的なフローチャートのように、さまざまな状況に動的に対応することができます。

If 文とは何か?

if 文は、基本的にコード内の論理的なチェックポイントです。丸括弧 () 内の条件を評価します。特定のコードブロックが実行されるかどうかを決定するゲートキーパーのように考えてください。条件が真の場合、波括弧 {} 内のコードブロックが実行されます。条件が偽の場合、コードブロック全体がスキップされ、プログラムは次の命令セットに進みます。

基本的な If 構文

以下は、if 文の基本構文です。

if (condition) {
    // condition が真の場合に実行するコード
}

この単純な構造が、プログラミングにおける意思決定の基礎を形成しています。条件は、比較、論理演算、またはブールチェックなど、真偽値を返す任意の式です。

Else If と Else の追加

プログラムが複雑になるにつれて、多くの場合、複数のシナリオを処理する必要があります。ここで else ifelse が登場し、より洗練された決定木を作成することができます。

if (condition1) {
    // condition1 が真の場合に実行するコード
} else if (condition2) {
    // condition2 が真の場合に実行するコード
} else {
    // 上記の条件がすべて偽の場合に実行するコード
}

この構造を使うと、複数の条件をチェーン化することができ、else は以前の条件でカバーされないすべてのシナリオに対するキャッチオールとして機能します。

サンプルプログラム

条件論理を示すために、簡単なプログラムを作成しましょう。新しいファイルを conditions.c と名付けて、以下のコードを追加します。

cd ~/project
touch conditions.c
#include <stdio.h>

int main() {
    int score = 75;

    if (score >= 90) {
        printf("Grade: A\n");
    } else if (score >= 80) {
        printf("Grade: B\n");
    } else if (score >= 70) {
        printf("Grade: C\n");
    } else if (score >= 60) {
        printf("Grade: D\n");
    } else {
        printf("Grade: F\n");
    }

    return 0;
}

解説

このプログラムは、典型的な成績評価システムのシナリオを示しています。どのように動作しているかを分解しましょう。

  • int score = 75; は、学生の数値成績を格納するための変数を作成します。
  • if 文と else if 文は、異なる成績の閾値と比較して成績をチェックします。
  • 条件は、高い順から低い順に評価されます。
  • 最初に真になる条件が、表示される成績を決定します。
  • 条件がすべて真でない場合、else ブロックがデフォルトの成績を割り当てることを保証します。

プログラムのコンパイルと実行

プログラムをコンパイルして実行するには、ターミナルで以下のコマンドを使用します。

gcc conditions.c -o conditions
./conditions

出力例:

Grade: C

score の値を変更して実験してみると、出力がどのように変化するかがわかります。

  • score = 95 に設定すると、「A」が表示されます。
  • score = 85 に設定すると、「B」が表示されます。
  • score = 55 に設定すると、「F」が表示されます。

この実践的なアプローチにより、条件文がどのようにプログラムのフローを制御し、異なる入力値に基づいて意思決定を行うかを理解することができます。

比較用の単純な if 文を書く

このステップでは、C 言語の if 文を使って簡単な比較プログラムを作成する方法を学びます。2 つの数を比較し、それらの関係に基づいて異なる出力を提供するプログラムを作成します。

プログラミングは論理と意思決定に関するものです。現実の生活のように、特定の条件に基づいて選択を行うのと同じように、プログラミングでは条件文を使ってコードのフローを制御します。

WebIDE を開き、~/project ディレクトリに新しいファイル number_compare.c を作成します。以下は、数の比較を示すプログラムです。

cd ~/project
touch number_compare.c
#include <stdio.h>

int main() {
    int a = 10;
    int b = 20;

    if (a < b) {
        printf("%d is less than %d\n", a, b);
    }

    if (a == b) {
        printf("%d is equal to %d\n", a, b);
    }

    if (a > b) {
        printf("%d is greater than %d\n", a, b);
    }

    return 0;
}

条件文を記述する際、値の間の関係を評価するために比較演算子を使用します。これらの演算子は、プログラミングにおける比較の言語であり、論理的な判断を行うことができます。

比較演算子を分解してみましょう。

  • < は「未満」を意味します。
  • == は「等しい」を意味します。
  • > は「超える」を意味します。

これらの演算子は、2 つの値を比較してその関係を判断する論理的な判断基準のように機能します。if 文内の条件が真の場合、コードブロックが実行されます。

プログラムをコンパイルして実行します。

gcc number_compare.c -o number_compare
./number_compare

出力例:

10 is less than 20

比較がどのように機能するかを理解することは、プログラミングにおいて重要です。値を変更して異なる条件を試すことで、プログラムがどのように意思決定を行うかについて、より深い洞察を得ることができます。

ab の値を変更して、異なる比較結果を見てみましょう。

  • a = 20b = 10 に変更して、a > b の場合を見る。
  • a = b に設定して、等しい比較を見る。
  • 異なる数値を試して、比較がどのように機能するかを理解する。

基本的な比較に慣れるにつれて、さらに柔軟性を提供するより複雑な比較演算子を発見するでしょう。

  • <=(未満または等しい)
  • >=(超えるまたは等しい)
  • !=(等しくない)

これらの演算子は、プログラムにおいてより微細で洗練された意思決定論理を作成する能力を拡大します。各比較は、コードがどのパスをたどるかを決定する小さなテストのようであり、プログラムをより動的で応答性の高いものにします。

代替フロー用の else 句を追加する

else 文は、主な条件に一致しないケースを処理する強力な方法を提供します。基本的には、プログラムのフォールバックまたはデフォルトの動作を作成します。このメカニズムにより、コードがさまざまなシナリオに賢く対応できるようになります。

WebIDE で新しいファイル age_check.c を作成します。以下は、if-else の使用方法を示すプログラムです。

cd ~/project
touch age_check.c
#include <stdio.h>

int main() {
    int age = 16;

    if (age >= 18) {
        printf("You are an adult and can vote.\n");
    } else {
        printf("You are a minor and cannot vote yet.\n");
    }

    return 0;
}

コードを詳細に分解してみましょう。

  • if (age >= 18) は、年齢が 18 歳以上かどうかをチェックします。
  • 条件が真の場合、最初のメッセージが表示されます。
  • else は、条件が偽のすべてのケースをキャッチします。
  • この例では、18 歳未満の人に対してメッセージが表示されます。

条件文を使用する際は、プログラム内の決定ポイントと考えてください。if 文は条件をチェックし、else 句はその条件が満たされない場合の代替経路を提供します。

プログラムをコンパイルして実行します。

gcc age_check.c -o age_check
./age_check

出力例:

You are a minor and cannot vote yet.

age の値を変更してみましょう。

  • age = 20 に設定して、「成人」のメッセージを表示します。
  • age = 16 に設定して、「未成年」のメッセージを表示します。

異なる値を試すことで、条件論理が実際にどのように機能するかを理解することができます。

また、else if を使ってより複雑な条件を作成することもできます。これにより、複数の条件チェックが可能になります。

#include <stdio.h>

int main() {
    int temperature = 25;

    if (temperature < 0) {
        printf("It's freezing outside!\n");
    } else if (temperature < 10) {
        printf("It's cold today.\n");
    } else if (temperature < 20) {
        printf("The weather is mild.\n");
    } else {
        printf("It's warm outside.\n");
    }

    return 0;
}

この例は、else if が最後の else をキャッチオールとして使用して複数の条件チェックを作成できる方法を示しています。各条件は順に評価され、最初に真になる条件のコードブロックが実行されます。最後の else は、以前の条件がすべて満たされない場合のデフォルトケースとして機能します。

複数の条件に対して else if を使用する

このステップでは、より洗練されたシナリオで複数の条件を処理するために else if をどのように使用するかを検討します。このアプローチを使うと、単純な二択から抜け出し、プログラムにより微細な意思決定論理を作成することができます。

WebIDE で新しいファイル grade_calculator.c を作成します。以下は、else if を使った複数の条件を示すプログラムです。

cd ~/project
touch grade_calculator.c
#include <stdio.h>

int main() {
    int score = 85;

    if (score >= 90) {
        printf("Excellent! Your grade is A.\n");
    } else if (score >= 80) {
        printf("Great job! Your grade is B.\n");
    } else if (score >= 70) {
        printf("Good work. Your grade is C.\n");
    } else if (score >= 60) {
        printf("You passed. Your grade is D.\n");
    } else {
        printf("Sorry, you failed. Your grade is F.\n");
    }

    return 0;
}

コードを分解して、else if がどのように機能するかを理解しましょう。

  • else if は、チェックする追加の条件を作成します。
  • 条件は、順序付けられた方法で上から下に評価されます。
  • 最初に真になる条件のブロックが実行され、その後の条件はスキップされます。
  • 最後の else は、以前の条件に合致しないすべての値に対するキャッチオールとして機能します。

このアプローチは、現実の生活で意思決定を行う方法と似ており、適切な一致を見つけるまで複数の可能性をチェックします。この例では、成績計算がネストされた条件論理の典型的な使用例を示しています。

プログラムをコンパイルして実行します。

gcc grade_calculator.c -o grade_calculator
./grade_calculator

出力例:

Great job! Your grade is B.

score の値を変更して、さまざまなシナリオを試すことができます。

  • score = 95 に設定して、「A」を取得します。
  • score = 75 に設定して、「C」を取得します。
  • score = 55 に設定して、「F」を取得します。

以下は、else if をより複雑な論理シナリオにどのように使用できるかを示す別の例です。

#include <stdio.h>

int main() {
    int temperature = 25;

    if (temperature < 0) {
        printf("Freezing cold!\n");
    } else if (temperature < 10) {
        printf("Very cold\n");
    } else if (temperature < 20) {
        printf("Cool\n");
    } else if (temperature < 30) {
        printf("Warm\n");
    } else {
        printf("Hot!\n");
    }

    return 0;
}

この 2 番目の例は、else if 文を使って精密な範囲を作成し、連続的な尺度を離散的なカテゴリに分解する方法を示しています。注意深く定義された条件を使用することで、異なる入力値に賢く対応する洗練された意思決定構造を作成することができます。

ネストされた if 文

複数の条件を評価する必要があるプログラムを書く際、単一の if 文だけでは意思決定プロセスの完全な複雑さを捉えることができないことがよくあります。このような場合、ネストされた if 文が非常に役立ち、複雑なシナリオを処理できる条件論理の層を作成することができます。

ネストされた If 文とは何か?

ネストされた if 文は、基本的には別の if または else ブロックの中に配置された if 文です。一連の意思決定チェックポイントのように考えてください。その後の各条件は、前の条件が真である場合にのみ評価されます。このアプローチにより、プログラムのフローをより細かく、正確に制御することができます。

サンプルプログラム

年齢と学生かどうかに基づいて人のカテゴリを決定するためにネストされた if 文を使用するプログラムを作成しましょう。新しいファイルを nested_conditions.c と名付けて、以下のコードを追加します。

cd ~/project
touch nested_conditions.c
#include <stdio.h>

int main() {
    int age;
    char is_student;

    printf("Enter your age: ");
    scanf("%d", &age);

    printf("Are you a student? (y/n): ");
    scanf(" %c", &is_student);

    if (age < 18) {
        if (is_student == 'y') {
            printf("You are a minor and a student.\n");
        } else {
            printf("You are a minor and not a student.\n");
        }
    } else {
        if (is_student == 'y') {
            printf("You are an adult and a student.\n");
        } else {
            printf("You are an adult and not a student.\n");
        }
    }

    return 0;
}

解説

このプログラムでは、ネストされた if 文がどのようにより洗練された決定木を作成できるかを示しています。重要なコンポーネントを分解してみましょう。

  • int age;char is_student; は、ユーザーの年齢と学生の状態を格納するための変数を宣言します。
  • scanf("%d", &age); は、ユーザーに年齢を入力してもらい、それを age 変数に格納します。
  • scanf(" %c", &is_student); は、ユーザーの学生の状態を読み取ります。%c の前の空白は、入力バッファの問題を防ぐ重要な詳細です。
  • 外側の if 文は最初に、ユーザーが 18 歳未満であるかどうかをチェックし、主要な決定分岐を作成します。
  • 内側の if 文は、各年齢層内の学生の状態に基づいて分類をさらに細分化します。

プログラムのコンパイルと実行

プログラムをコンパイルして実行するには、ターミナルで以下のコマンドを使用します。

gcc nested_conditions.c -o nested_conditions
./nested_conditions

出力例:

Enter your age: 17
Are you a student? (y/n): y
You are a minor and a student.

このプログラムは、ネストされた if 文の威力を示しています。異なる入力を試すことで、プログラムがどのように動的に出力を調整するかを確認できます。

  • 年齢 20 と学生の状態 'y' を入力して、「成人で学生」のメッセージを表示します。
  • 年齢 15 と学生の状態 'n' を入力して、「未成年で学生ではない」のメッセージを表示します。

各入力の組み合わせは、ネストされた条件構造を通じて異なるパスをトリガーし、このプログラミング技術の柔軟性と精度を示しています。

まとめ

この実験では、C 言語のプログラミングにおける条件文について、ifelse if、および else の構文を使って学びました。条件文の基本構造を紹介することから始めました。これにより、プログラムが特定の条件に基づいて意思決定を行い、異なるコードブロックを実行できるようになります。次に、2 つの数を比較し、それらの関係に基づいて異なる出力を提供する単純な if 文を書きました。最後に、else if を使って複数の条件を順に処理し、else ブロックを使って以前の条件に合致しないすべての値をキャッチする方法を検討しました。この実験で扱った主な概念には、条件文の構文を理解すること、単純な比較を書くこと、および C プログラムでより複雑な意思決定論理を作成するために else ifelse を使うことが含まれます。