- ベストアンサー
Cプログラミング
授業の課題で出されたのですが、判別式を使ってのD<0の時の場合が 分かりません。どうか、else ifを使ってのプログラムで分かる方はお力をかしてください。よろしくお願いします。 1.二次方程式ax2+bx+c=0のa、b、cを入力すると、解の公式を用いて答えを出すプログラムを作って、動作を確認せよ。ただし、aが0の場合を考慮せよ。また、解が重根の場合や複素数の場合にも対応せよ。(判別式を用いて条件分岐させるとよい。複素数解の場合は、x = 3 + 5i のように表示させる。)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
一応作ってみました。 ただし、このまま提出すれば、間違いなくばれます。 #include <stdio.h> #include <stdlib.h> #include <complex.h> int main(void) { double a, b, c; if (scanf("%lf%lf%lf", &a, &b, &c) < 3) { return EXIT_FAILURE; } else if (a == 0) { printf("x = %g\n", -c / b); } else { double complex x[2]; x[0] = (-b + csqrt(b*b - 4*a*c)) / (2*a); x[1] = (-b - csqrt(b*b - 4*a*c)) / (2*a); printf("x = %g", creal(x[0])); if (cimag(x[0])) printf("%+gi", cimag(x[0])); if (x[0] != x[1]) { printf(", %g", creal(x[1])); if (cimag(x[1])) printf("%+gi", cimag(x[1])); } } }
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
D<0 の場合の根号の中の処理ってことですね √(-n)=√n × i ですから D<0の時 fabs で絶対値にするぐらいのことでいいんじゃない
お礼
はい。分からないのはD<0の場合なんです。 fabsで絶対値ですか!経験不足で全く知らなくて… 回答ありがとうございます!
- Pesuko
- ベストアンサー率30% (2017/6702)
課題丸投げは禁止よ。
お礼
そうですね。 出来るところまでは自分でやったのですが… ここでは分からないところだけ聞こうと思います。 回答ありがとうございます。
お礼
参考プログラムを作っていただいてありがとうございます! これを参考に頑張ってみたいと思います! 回答ありがとうございました。