IEにおいて、
[Math Processing Error] となって数式等が正しく表示されないときは、
互換表示をOFFにすること!
2次方程式を解く
実数係数の2次方程式 ax2 + bx + c = 0 を実数の範囲で解きますが、
コンピュータに因数分解させるのは難しいので、
解の公式を使いましょう!
画面表示では指数表現できないので ax^2 + bx + c = 0 と書きます。
準備(高校数学の復習)
-
$x$の実数係数の2次方程式$ax^2+bx+c=0\ (a\ne 0)$の解の公式
$\displaystyle x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}$
|
(根号内の$D=b^2-4ac$は判別式(discriminant)と呼ばれる)
|
- 平方完成によって上の公式を導出することは出来ますか?
仕様
- 係数 a, b, c を入力
- 判別式 D(discriminant)の符号で場合分け
- D > 0 の時は 2実解 x1, x2
「与えられた2次方程式は、2実解○○、△△を持ちます。」と表示
- D = 0 の時は 重解 x1
「与えられた2次方程式は、重解○○を持ちます。」と表示
- D < 0 の時は 実数解なし
「与えられた2次方程式は、実数解を持ちません。」と表示
作成
- まず流れ図(フローチャート)を書く
- 下のプログラムを完成する
/* 2次方程式を解くプログラム */
#include <stdio.h>
main()
{
float a, b, c, disc, x1, x2;
printf("2次方程式 ax^2 + bx + c = 0 を解きます\n");
printf("係数 a, b, c を入力して下さい:");
scanf("%f %f %f", &a, &b, &c );
/* 解の公式を使って、if文で場合分けを実現する */
}
/* end of eq1.c */
- 係数の入力の区切りはスペースを使うこと!
- 係数に 1 -3 2 と入れてみよう(2実解の場合)
係数に 2 -3 1 と入れると?
- 係数に 1 -4 4 と入れてみよう(重解の場合)
係数に 4 -4 1 と入れると?
- 係数に 1 1 1 と入れてみよう(解なしの場合)
- 係数に 0 -1 1 と2次の係数 a にゼロを入れたらどうなりますか?
- 本来あってはならない入力に対しても対処すること(=例外処理)は重要です!
- 2次の係数 a がゼロの時は「2次方程式でない」と表示するようにしてみましょう!
方程式 ax2 + bx + c = 0 を解く
実数係数の方程式 ax2 + bx + c = 0を実数の範囲で解きますが、
今回は a = 0 や a = b = 0 の場合等も考慮しましょう!(高々2次の方程式と呼びます!)
仕様
- 係数 a, b, c を入力
- a ≠ 0 の場合は 2次方程式
- 判別式 D(discriminant)の符号で場合分け
- D > 0 の時は 2実解 x1, x2
「与えられた2次方程式は、2実解○○、△△を持ちます。」と表示
- D = 0 の時は 重解 x1
「与えられた2次方程式は、重解○○を持ちます。」と表示
- D < 0 の時は 実数解なし
「与えられた2次方程式は、実数解を持ちません。」と表示
- a = 0, b ≠ 0 の場合は 1次方程式を解く
「与えられた1次方程式の解は○○です。」と表示
- a = b = 0, c ≠ 0 の場合は 解なし
「与えられた方程式を満たす解はありません。」と表示
- a = b = c = 0 の場合は 不定
「与えられた方程式は不定です。」と表示
作成
- まず流れ図(フローチャート)を書く
- 下のプログラムを完成する
/* 高々2次の方程式を解くプログラム */
#include <stdio.h>
main()
{
float a, b, c, disc, x1, x2;
printf("方程式 ax^2 + bx + c = 0 を解きます\n");
printf("係数 a, b, c を入力して下さい:");
scanf("%f %f %f", &a, &b, &c );
/* if文で場合分けを実現する */
}
/* end of eq2.c */