2次方程式は解の公式を使って解析的に求められますので、わざわざ数値計算で解く必要がありませんが、数値計算の入門的な課題として最適です。2次方程式
は解の公式
を用いて解が求められます。ただし
であり、このDが正か負、または0になるかによって解の数や解が実数解になるか虚数解になるかが決まります。特にコンピューターでは虚数が扱えないので、虚数解になる場合注意が必要です。
Dの値が正か0、負になるかで場合分けして解を求めます。
#include <stdio.h>
#include <math.h>
void answer(double a,double b,double c)
{
double Re1,Re2,Im1,Im2,D;
D=b*b-4.0*a*c;
if(D>0) {
Re1=(-b + sqrt(D))/(2.0*a);
Re2=(-b - sqrt(D))/(2.0*a);
Im1=0.0;
Im2=0.0;
}
else if(D==0) {
Re1=-b/(2.0*a);
Im1=0.0;
}
else {
Re1=Re2 =-b/(2.0*a);
Im1=sqrt(-D)/(2.0*a);
Im2=-Im1;
}
if(D==0) {
printf("%f + i %f\n",Re1,Im1);
}
else {
printf("%f + i %f\n",Re1,Im1);
printf("%f + i %f\n",Re2,Im2);
}
}
int main()
{
double a,b,c;
printf("a = \n");
scanf("%lf",&a);
printf("b = \n");
scanf("%lf",&b);
printf("c = \n");
scanf("%lf",&c);
answer(a,b,c);
return 0;
}
2次方程式の係数がそれぞれa=2,b=2,c=5のときの解を求めた結果です。プログラムを実行しそれぞれの係数を入力すると解が表示されます。
a =
2
b =
2
c =
5
-0.500000 + i 1.500000
-0.500000 + i -1.500000