dポイントプレゼントキャンペーン実施中!

タイトル通り、a、b、cを入力させて、ax^2+bx+c=0の解xを求めたいのですが、結果をどう求めればいいのか、実解・虚数解・重解の場合をどうしたらいいのか、の2点がよくわかりません。

#include<math.h>
#include<stdio.h>
double sqrt(double a,double b,double c)
{
return (b*b-4*a*c);
}

main(void)
{
double a,b,c,sqrt,ans;
do{
printf("ax^2 + bx +c = 0 の解 x を求めます。\n a,b,cを入力してください。\n");
printf("a : "); scanf("%lf",&a);
printf("\nb : "); scanf("%lf",&b);
printf("\nc : "); scanf("%lf",&c);

if(a = 0){
printf("a は0以外を入力してください。\n");
}
}while(a = 0);

ans = (-b+dist(a,b,c))/(2*a);
printf("%lf", ans);
printf("\n");
return(0);
}


他にも多々ダメな部分があると思いますがご指摘・アドバイス等いただけたらと思います。よろしくお願いします。

A 回答 (3件)

課題のようなので、少し意地悪をすると...



> printf("%lf", ans);

%lfを使っているということはC99だと思います。
C99であれば、

int quadratic(double complex ans[2], double a, double b, double c)
{
 double D = b*b - 4*a*c;

 ans[0] = (b + csqrt(D)) / (2 * a);
 ans[1] = (b - csqrt(D)) / (2 * a);
 return (D > 0) - (D < 0);
}

のように複素数型を使えば、虚数解でも普通に計算できるので便利です。
    • good
    • 0
この回答へのお礼

色々知らないことばかりで勉強になります。ありがとうございました。

お礼日時:2005/06/28 17:48

while(a=0);


は、
while(a==0.0);
だと思います。
#1の方と同じだけど
sqrtがdistの間違い
ans = (-b+dist(a,b,c))/(2*a);

distの前にsqrtが要る
ans = (-b+sqrt(dist(a,b,c)))/(2*a);
ans = (-b-sqrt(dist(a,b,c)))/(2*a);
の2つの場合を考えないといけない。

distの値で
0:重解
-:虚数解
+:実解
のように場合分けしないといけない
    • good
    • 0
この回答へのお礼

たくさん間違えていてすみません。ご指摘ありがとうございました。
場合わけも具体的に考えたらすぐわかることでしたね。ありがとうございました。

お礼日時:2005/06/28 17:49

課題だと思いますのでヒントだけ。



double sqrt

sqrt -> distの間違いですよね?



distの値によって処理(解の表示)を分岐させれば良いと思う。

dist>0 と dist=0 と dist<0
    • good
    • 0
この回答へのお礼

そうですね。間違えてました。ありがとうございました。

お礼日時:2005/06/28 17:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!