ここから本文です

C言語で二次方程式の解を求めるプログラムなのですが

sun********さん

2007/11/118:49:52

C言語で二次方程式の解を求めるプログラムなのですが

C言語で二次方程式の解を求めるプログラムなのですが

#include<stdio.h>
#include<math.h>
int main(void)
{
float a,b,c,d,x1,x2;

scanf("%f",&a);
scanf("%f",&b);
scanf("%f",&c);

d=b*b-4*a*c;
if(d==0){
x1=-b/2*a;
printf("x1=%f",x1);
}
else{
x1=(-b+sqrt(d))/2*a;
x2=(-b-sqrt(d))/2*a;
printf("x1=%f,x2=%f",x1,x2);
}
}

このように書いてみたのですがこれだとd<0のときの異なる2つの虚数解が出ません。
どこが足りないのでしょうか?

どなたかよろしくお願いします。

閲覧数:
29,977
回答数:
2
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

cra********さん

2007/11/422:46:02

まず、winning_eleven_playerさんのおっしゃる通り、2*aを()でくくる必要があります。
あと、sqrt関数はマイナスの値を引数にとることができないと思うので、dの正負でも場合分けをする必要があります。


#include <stdio.h>
#include <math.h>

int main(void)
{
float a,b,c,d,x1,x2;

scanf("%f", &a);
scanf("%f", &b);
scanf("%f", &c);

d = b * b - 4 * a * c;
if (d < 0) {
x1 = -b / (2 * a);
x2 = sqrt(-d) / (2 * a);
printf("x1 = %f + %fi", x1, x2);
printf("x2 = %f - %fi", x1, x2);
}
else if (d == 0) {
x1 = -b / (2 * a);
printf("x1 = %f", x1);
}
else {
x1 = -b / (2 * a);
x2 = sqrt(d) / (2 * a);
printf("x1 = %f + %f", x1, x2);
printf("x2 = %f - %f", x1, x2);
}
}

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

win********さん

2007/11/120:00:58

C言語では数学と同じように、演算子の優先順位が決まっています。
/と*は優先順位が同じなので、カッコがないかぎり、左から順に演算していきます。そのため、解を求める部分で先に2で割ってから、aの値をかけていることになります。
2*aをカッコでくくれば、解は正しく出るはずです。

また、虚数解についてですが、虚数解の場合はiが出力されれば分かりやすいので、dが負の時のみ場合分けで、

printf("x1=%fi,x2=%fi",x1,x2);

とすればどうでしょう。

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる