C 言語で一次方程式 (ax + b = 0) を解く方法

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

はじめに

この実験では、C プログラミングを用いて、ax + b = 0 という形の一次方程式を解く方法を学びます。まず、ユーザーから係数 a と b を読み込み、係数 a が 0 でないことを確認しながら、公式 x = -b/a を適用して解 x を計算します。最後に、解を出力するか、解が存在しないことを示します。

この実験では、代数式とそれらの C 言語での実装に関する基本的な概念を扱います。この実験の終わりまでに、単純な一次方程式をプログラム的に解く方法をしっかりと理解しているはずです。

係数 a と b の読み込み

このステップでは、C 言語で一次方程式を解くために係数 a と b を読み込む方法を学びます。ユーザーに入力を促し、係数を変数に格納するシンプルなプログラムを作成します。

まず、プロジェクトディレクトリに新しい C ファイルを作成しましょう。

cd ~/project
nano linear_equation.c

次に、係数を取得するための以下のコードを入力します。

#include <stdio.h>

int main() {
    double a, b;

    // ユーザーに係数 a の入力を促す
    printf("係数 a を入力してください (ゼロでなければなりません): ");
    scanf("%lf", &a);

    // ユーザーに係数 b の入力を促す
    printf("係数 b を入力してください:");
    scanf("%lf", &b);

    // 入力された係数を表示する
    printf("係数 a: %.2f\n", a);
    printf("係数 b: %.2f\n", b);

    return 0;
}

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

gcc linear_equation.c -o linear_equation
./linear_equation

実行例:

係数 a を入力してください (ゼロでなければなりません): 2
係数 b を入力してください: 4
係数 a: 2.00
係数 b: 4.00

コードを詳しく見てみましょう。

  • 係数に小数点以下の値を入力できるように、double を使用しています。
  • printf() を使用して、ユーザーに入力を促しています。
  • scanf() を使用して、ユーザーからの入力を読み込み、変数 ab に格納しています。
  • 入力された係数を表示することで、正しく読み込まれたことを確認しています。

x = -b/a の計算 (a ≠ 0 の確認)

このステップでは、一次方程式 ax + b = 0 の解を計算するプログラムを、a がゼロの場合の処理に焦点を当てて修正します。

前のファイルを開き、コードを更新します。

cd ~/project
nano linear_equation.c

以下のコードで内容を置き換えます。

#include <stdio.h>

int main() {
    double a, b, x;

    // ユーザーに係数 a の入力を促す
    printf("係数 a を入力してください (ゼロでなければなりません): ");
    scanf("%lf", &a);

    // a がゼロかどうかをチェックする
    if (a == 0) {
        printf("エラー: 係数 'a' はゼロにすることはできません。\n");
        return 1;
    }

    // ユーザーに係数 b の入力を促す
    printf("係数 b を入力してください:");
    scanf("%lf", &b);

    // 解 x を計算する
    x = -b / a;

    // 解を表示する
    printf("方程式 %.2fx + %.2f = 0 の解:\n", a, b);
    printf("x = %.2f\n", x);

    return 0;
}

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

gcc linear_equation.c -o linear_equation
./linear_equation

有効な入力に対する実行例:

係数 a を入力してください (ゼロでなければなりません): 2
係数 b を入力してください: 4
方程式 2.00x + 4.00 = 0 の解:
x = -2.00

無効な入力 (a = 0) に対する実行例:

係数 a を入力してください (ゼロでなければなりません): 0
エラー: 係数 'a' はゼロにすることはできません。

このコードの重要な点:

  • 解を計算する前に、a がゼロでないことを確認するチェックを追加しています。
  • a がゼロの場合、エラーメッセージを出力してプログラムを終了します。
  • x は、公式 x = -b/a を使用して計算します。
  • 出力は小数点以下 2 桁にフォーマットするために %.2f を使用しています。

解の表示または解なしの場合の処理

この最終ステップでは、一次方程式ソルバーを拡張して、さまざまな状況に対応し、解について明確な出力を提供します。

前のファイルを開き、コードを更新します。

cd ~/project
nano linear_equation.c

以下のコードで内容を置き換えます。

#include <stdio.h>
#include <math.h>

int main() {
    double a, b, x;

    // ユーザーに係数 a の入力を促す
    printf("係数 a を入力してください:");
    scanf("%lf", &a);

    // ユーザーに係数 b の入力を促す
    printf("係数 b を入力してください:");
    scanf("%lf", &b);

    // さまざまな状況をチェックする
    if (a == 0 && b == 0) {
        printf("無限個の解があります:すべての実数は解です。\n");
    } else if (a == 0 && b != 0) {
        printf("解なし:方程式を解くことができません。\n");
    } else {
        // 解 x を計算する
        x = -b / a;

        // 解を表示する
        printf("方程式:%.2fx + %.2f = 0\n", a, b);
        printf("解:x = %.2f\n", x);
    }

    return 0;
}

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

gcc linear_equation.c -o linear_equation
./linear_equation

実行例:

シナリオ 1 (通常の解):

係数 a を入力してください: 2
係数 b を入力してください: 4
方程式: 2.00x + 4.00 = 0
解: x = -2.00

シナリオ 2 (解なし):

係数 a を入力してください: 0
係数 b を入力してください: 5
解なし: 方程式を解くことができません。

シナリオ 3 (無限個の解):

係数 a を入力してください: 0
係数 b を入力してください: 0
無限個の解があります: すべての実数は解です。

今回のバージョンで改善された点:

  • 一次方程式の 3 つの異なるシナリオに対応します。
  • さまざまなケースに対して明確で情報的なメッセージを表示します。
  • 解の種類を決定するために正確な数学的論理を使用します。

まとめ

この実験では、C 言語で一次方程式を解くために係数 a と b を読み取る方法を学びました。ユーザーに入力を促し、係数を変数に格納するシンプルなプログラムを作成しました。また、a がゼロの場合の処理に焦点を当てて、一次方程式 ax + b = 0 の解を計算する方法を学びました。プログラムは a がゼロかどうかをチェックし、ゼロの場合にはエラーメッセージを表示します。それ以外の場合は、解 x = -b/a を計算して出力します。