• ベストアンサー

Cプログラミング

授業の課題で出されたのですが、判別式を使ってのD<0の時の場合が 分かりません。どうか、else ifを使ってのプログラムで分かる方はお力をかしてください。よろしくお願いします。 1.二次方程式ax2+bx+c=0のa、b、cを入力すると、解の公式を用いて答えを出すプログラムを作って、動作を確認せよ。ただし、aが0の場合を考慮せよ。また、解が重根の場合や複素数の場合にも対応せよ。(判別式を用いて条件分岐させるとよい。複素数解の場合は、x = 3 + 5i のように表示させる。)

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.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]));   }  } }

doratao
質問者

お礼

参考プログラムを作っていただいてありがとうございます! これを参考に頑張ってみたいと思います! 回答ありがとうございました。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

D<0 の場合の根号の中の処理ってことですね √(-n)=√n × i ですから D<0の時 fabs で絶対値にするぐらいのことでいいんじゃない

doratao
質問者

お礼

はい。分からないのはD<0の場合なんです。 fabsで絶対値ですか!経験不足で全く知らなくて… 回答ありがとうございます!

  • Pesuko
  • ベストアンサー率30% (2017/6702)
回答No.1

課題丸投げは禁止よ。

doratao
質問者

お礼

そうですね。 出来るところまでは自分でやったのですが… ここでは分からないところだけ聞こうと思います。 回答ありがとうございます。

関連するQ&A

専門家に質問してみよう