Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語で二次方程式の解(根)を求めるプログラムの作成方法

はじめに

このチュートリアルでは、二次方程式の解(根)を求めるC言語のプログラムについて解説します。

ax² + bx + c = 0 の形式で表される二次方程式が与えられたとき、その解 x₁ と x₂ を求めることが目標です。

解を求めるための計算方法

ここでは、判別式を用いた決定的な手法を使用します。まず、判別式 D を次のように計算します。

D = √(b² − 4ac)

この判別式を使うと、方程式の解は以下の公式で求められます。

x₁ = (−b + D) / 2a

x₂ = (−b − D) / 2a

判別式の値による解の分類

判別式 D = b² − 4ac の値によって、解の性質が次のように決まります。

  • D > 0 の場合: 異なる2つの実数解を持ちます。
  • D = 0 の場合: 重解(同じ値の実数解)を1つ持ちます。
  • D < 0 の場合: 解は複素数になります。

また、a = 0 の場合は二次方程式として成立しないため、「無効な方程式」として扱う必要があります。

サンプルコード

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
//方程式の解を計算する関数
void calc_roots(int a, int b, int c) {
    if (a == 0) {
        printf("Invalid Equation");
        return;
    }
    int d = b*b - 4*a*c;
    double sqrt_val = sqrt(abs(d));
    if (d > 0) {
        printf("Roots are both real and different \n");
        printf("%f\n%f",(double)(-b + sqrt_val)/(2*a) , (double)(-b - sqrt_val)/(2*a));
    }
    else if (d == 0) {
        printf("Roots are real and same \n");
        printf("%f",-(double)b / (2*a));
    } else {
        printf("Roots are complex \n");
        printf("%f + i%f\n%f - i%f", -(double)b /(2*a),sqrt_val ,-(double)b / (2*a), sqrt_val);
    }
}
int main() {
    int a = 2, b = -5, c = 8;
    calc_roots(a, b, c);
    return 0;
}

実行結果

Roots are complex
1.250000 + i6.244998
1.250000 - i6.244998

コードの解説

このプログラムでは、係数 a = 2、b = −5、c = 8 を例に解を計算しています。

  1. まず a が 0 かどうかをチェックし、0 の場合は二次方程式として無効なため処理を終了します。
  2. 判別式 d = b² − 4ac を計算します。
  3. d > 0 の場合は異なる2つの実数解、d = 0 の場合は重解、d < 0 の場合は複素数解として出力します。
  4. 複素数解の場合は、実部 −b / 2a と虚部 √|d| / 2a を組み合わせて表示します。

この例では判別式が負のため、解は複素数となり、実部 1.250000、虚部 6.244998 の共役な複素数解が出力されています。

  1. C++で線分の中点を求める方法とサンプルコード

    本記事では、C++を使って線分の中点(ミッドポイント)を求めるプログラムの作成方法を解説します。線分の始点Aと終点Bの2つの座標が与えられたとき、その中点を計算するアルゴリズムについて学びましょう。 問題の概要 始点A(x1, y1)と終点B(x2, y2)で構成される線分があります。この線分の中点を求めるのが課題です。 入力例 a(x1, y1) = (4, -5) b(x2, y2) = (-2, 6) 出力例 (1, 0.5) 計算の説明 (x1 + x2)/2 = (4 + (-2)) / 2 = 1 (y1 + y2)/2 = (-5 + 6) / 2 = 0.5 解決アプローチ:中

  2. C++で三角形の重心を求めるプログラムの作成方法

    この記事では、三角形の3つの頂点の座標を格納した2次元配列が与えられたときに、その三角形の重心を求めるC++プログラムの作成方法を解説します。 三角形の重心とは、三角形の3本の中線がすべて交わる点のことです。 また、三角形の中線とは、ある頂点と、その対辺(向かい合う辺)の中点を結ぶ線分のことを指します。 それでは、具体的な例を使って問題を確認してみましょう。 入力 (-3, 1), (1.5, 0), (-3, -4) 出力 (-1.5, -1) 説明 重心 (x, y) = ((-3 + 1.5 - 3) / 3, (1 + 0 - 4) / 3) = (-1.5, -1) 解法のアプロ