今日の人気記事

  1. サンプルプログラム集
  2. 配列に格納した数値を昇順ソート
  3. 変数の値を出力 - printf 関数
  4. MinGW - gcc のインストール - Windows環境
  5. MinGW - gccのコンパイルと実行 - Windows環境

2次方程式の解を計算

スポンサーリンク

ここでは「2次方程式の解」を計算するサンプルプログラムを紹介します。

2次方程式の解の公式

まずは2次方程式の解を求める「解の公式」の復習をしておきましょう。

2次方程式(\(a\neq0\))

\[ ax^2 + bx + c = 0 \]

の解は

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

で与えられます。

スポンサーリンク

それではサンプルプログラムをみてみましょう。

サンプルプログラム

2次方程式の解を計算するサンプルプログラムです。

/*
 * C言語のサンプルプログラム - Webkaru
 * - 2次方程式の解を計算 -
 */
#include <stdio.h>
#include <math.h>

int main(void)
{

  /* 2次方程式の定数 */
  float a, b, c;

  /* 判別式 */
  float discriminant;

  /* 2次方程式の解 */
  float kai1, kai2;

  /* 解が複素数を含む場合 */
  float real, imag;

  /* 2次方程式の定数を入力 */
  printf("2次方程式の定数を入力してください。\n");

  printf("a = ");
  scanf("%f", &a);

  printf("b = ");
  scanf("%f", &b);

  printf("c = ");
  scanf("%f", &c);

  /* 判別式を計算 */
  discriminant = b * b - 4 * a * c;

  /* 判別式に数値による条件分岐 */
  if ( discriminant > 0 ) {

    // 解の計算
    kai1 = ( -b + sqrt(discriminant) ) / (2*a) ;
    kai2 = ( -b - sqrt(discriminant) ) / (2*a);

    // 解の出力
    printf("2次方程式の解: x = %.2f, %.2f\n", kai1, kai2);

  } else if ( discriminant == 0 ) {

    // 解の計算
    kai1 = kai2 = -b / ( 2 * a );

    // 解の出力
    printf("2次方程式の解: x = %.2f, %.2f\n", kai1, kai2);

  } else {

    // 解の計算
    real = -b / (2*a);
    imag = sqrt(-discriminant) / (2*a);

    // 解の出力
    printf("2次方程式の解: %.2f+%.2fi, %.2f-%.2fi\n", real, imag, real, imag);
  }

  return 0;
}

このサンプルでは判別式

\[ D = \sqrt{b^2-4ac} \]

を使って条件分岐し、2次方程式の解を計算・出力しています。判別式の平方根(sqrt)を計算するためにヘッダーファイル「math.h」を読み込んでいます。

それではいくつかの実行結果をみてみましょう。

2次方程式の定数を入力してください。
a = 1
b = 2
c = 3
2次方程式の解: -1.00+1.41i, -1.00-1.41i
2次方程式の定数を入力してください。
a = 6.2
b = 12
c = 3.4
2次方程式の解: x = -0.34, -1.59
2次方程式の定数を入力してください。
a = 4
b = 4
c = 1
2次方程式の解: x = -0.50, -0.50
スポンサーリンク

関連記事(一部広告含む)