2次方程式の解
ax^2+bx+c=0の方程式について
abcを自分で入力して、「2次方程式として成り立つか」の判断をし、2次方程式であればその解を求めるプログラムです。
2次方程式の解き方をなんとなく忘れていたので、数IIの教科書やらで確認してみました。
以下のように作成したのですが、解が出るはずの値を入力しても強制的に終了してしまいます。どこがおかしいのでしょうか?
他に気になる点は、メイン関数にて「2次方程式として成り立った場合」にはサブへ移動ができているのでしょうか。
あと、仮に↑が合っていたとして、異なる2つの虚数解の計算方法は以下のやり方でも良いのかどうかもお聞きしたいです。
よろしくお願いします。
#include<stdio.h>
#include<math.h>
void niji(double a,double b,double c){
double x1,x2,x3,y1,y2,D;
D=b*b-(4.0)*a*c;
if(D>0){
printf("2つの異なる実数解\n");
x1=(-b+sqrt(D))/(2.0*a);
x2=(-b-sqrt(D))/(2.0*a);
printf("x= %f , %f \n",x1,x2);
}
else if(D==0){
printf("重解\n");
x3=(-b)/(2.0*a);
printf("x= %f \n",x3);
}
else{
printf("2つの異なる虚数解\n");
x3=(-b)/(2.0*a);
y1=sqrt(D)/(2.0*a);
y2=-sqrt(D)/(2.0*a);
printf("x= %f + i %f, %f - i %f\n",x3,y1,x3,y2);
}
return;
}
int main(void){
double a,b,c;
printf("ax^2+bx+c=0の式のabcを入力せよ\n");
while(scanf("%f %f %f",&a,&b,&c)){
if(a==b==c==0){
break;
}
else if((a==b==0)&&(c!=0)){
printf("不能\n");
}
else if((a==0)&&(b!=0)){
printf("1次方程式になる\n");
}
else{// 入力されたabcが↑の3つに該当しなければ
niji(a,b,c);//←サブ関数に示した2次方程式を解く
}
}
return 0;
}