C言語

【C言語】二次方程式の解の公式


プログラミング初心者向けの練習問題の一つとして、解の公式の計算があります。

この記事では、解の公式の計算をプログラムに実装する方法について解説しています。

解の公式の概要

プログラムを作成する前に、解の公式についての簡単な説明を行います。

解の公式とは

その名の通り、二次方程式の解を求めるための公式です。

二次方程式 \(ax^2 + bx + c = 0 (a \neq 0) \) の解は

$$ x = \frac{-b \pm \sqrt{b^2-4ac}}{2a} $$

によって求められます。なお、判別式\(D=b^2-4ac\)とした

$$ x = \frac{-b \pm \sqrt{D}}{2a} $$

の形で定義されることもあります。

実際にプログラムを作成してみる

前述の公式に従ってプログラムを作成します。

プログラム作成の手順

プログラム作成の手順は以下の通りです。

  1. 変数の値を指定する(a=0の場合は強制終了)
  2. 判別式Dの計算を行う
  3. Dの計算結果を基に解を求める(D>0、D=0、D<0の3通り)

実装例

上記の手順に従ってプログラムを作成します。使用する言語はC言語です。

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

int main(void){

  float a, b, c, d;

  /* 標準入力から変数の値を指定する */
  printf("a * x * x + b * x + c = 0\n");
  printf("a = ");
  scanf("%f", &a);
  printf("b = ");
  scanf("%f", &b);
  printf("c = ");
  scanf("%f", &c);
  printf("-------------------------\n");

  /* 係数aの値が0の場合はエラーとする */
  if (a == 0.0) {
    printf("Error : a=0 \n");
  } else {
    d = b * b - 4 * a * c;  /* 判別式の計算 */
    if (d > 0) {
      float x1 = (-b + sqrt(d)) / (2 * a);
      float x2 = (-b - sqrt(d)) / (2 * a);
      printf("x = %.2f, %.2f\n", x1, x2);
    } else if (d == 0) {
      float x = -b / (2 * a);
      printf("x = %.2f\n", x);
    } else {
      float r = -b / (2*a);
      float i = sqrt(-d) / (2*a);
      printf("x = %.2f + %.2fi, %.2f - %.2fi\n", r, i, r, i);
    }
  }
  return 0;
}

このプログラムを実行すると以下の出力結果が得られます。

a * x * x + b * x + c = 0
a = 0
b = 1
c = 1
-------------------------
Error : a=0
a * x * x + b * x + c = 0
a = 1
b = 5
c = 1
-------------------------
x = -0.21, -4.79
a * x * x + b * x + c = 0
a = 1
b = 2
c = 1
-------------------------
x = -1.00
a * x * x + b * x + c = 0
a = 1
b = 1
c = 1
-------------------------
x = -0.50 + 0.87i, -0.50 - 0.87i