• ベストアンサー

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

  • C言語プログラミングで困っています。助けて下さい。

    C言語プログラミングで困っています。助けて下さい。 課題1-1: 実数 a と実数 b を入力すると、一次方程式ax + b = 0 の解を求めるプログラムを作る 課題1-2: 1-1 で作成したプログラムについて、さらにa として1が入力されたとき、方程式の表示       部分が1x + 3 = 0ではなくx + 3 = 0となるようにせよ 課題1-3: 1-2 で作成したプログラムについて、さらにb として0 や負の数が入力されたとき、方程式     の表示部分が2x = 0 や2x – 3 = 0となるようにせよ 課題1-4: 1-3 で作ったプログラムについて、さらにa の値として0が入力された場合、「解けません」     と表示するようにせよ 課題1-5: 係数 a, b, c を入力すると、 2次方程式ax2 + bx + c =0の解を表示するプログラムを作     れ ※ 1-2 ~ 1-4 のような機能を盛り込む ※ a が0の場合には、先に作った1次方程式のプログラムが動く という問題です。最終的にこれらを一つのプログラムにしてください。判別式や解の公式、ルート√などを使ってよろしくお願いします。C言語でお願いします

  • プログラミングの課題で困っています。助けて下さい。

    プログラミングの課題で困っています。助けて下さい。 課題1-1: 実数 a と実数 b を入力すると、一次方程式ax + b = 0 の解を求めるプログラムを作る 課題1-2: 1-1 で作成したプログラムについて、さらにa として1が入力されたとき、方程式の表示部      分が1x + 3 = 0ではなくx + 3 = 0となるようにせよ 課題1-3: 1-2 で作成したプログラムについて、さらにb として0 や負の数が入力されたとき、方程式     の表示部分が2x = 0 や2x – 3 = 0となるようにせよ 課題1-4: 1-3 で作ったプログラムについて、さらにa の値として0が入力された場合、「解けません」     と表示するようにせよ 課題1-5: 係数 a, b, c を入力すると、 2次方程式ax2 + bx + c =0の解を表示するプログラムを作     れ ※ 1-2 ~ 1-4 のような機能を盛り込む ※ a が0の場合には、先に作った1次方程式のプログラムが動く という課題です。最終的にこれらを一つのプログラムにしてください。判別式や解の公式、ルート√などを使ってよろしくお願いします。  

  • C言語 プログラミング

    C言語初心者です。 以下の点を踏まえて、 2次方程式ax^2+bx+c=0の解が実数であるかどうか判定するプログラムを教えてください!お願いいたします。 ・if文を組み合わせる ・判別式D=b^2-4acを使う ・係数abcは実数として入力する ・aが0の場合などすべての場合を網羅している 例 a=0,b=0,c=1の場合、解は存在しない

  • 二次方程式の解について。

     二次方程式が実数の範囲で解を持つか、または複素数の範囲で解を持つかは、二次方程式の解の公式の「判別式」で判断することができますよね。  そこで、この判別式を使って、二次方程式の解が実根になる確率と虚根になる確率と、どっちが大きいのか考えてみました。  まず、簡単にするために二次方程式  ax^2+bx+c=0  の両辺をaでわって、新しくできる係数をp,qとします。そうしてできた二次方程式の判別式は  p^2-4q  となりますよね。この判別式が0に等しいとして、この式を変形していきます…  p^2-4q=0  4=p^2/q  つまり数直線で考えると、p^2/qが丁度4になったとき二次方程式は一つの解しか持たないことになります(重根でしたか?)。同様に考えると(-∞,4)の範囲で二次方程式は虚根を、(4,∞)の範囲で二次方程式は実根をもつはずです。  そう考えると、虚根を持つ範囲の方が4つ分広いので確率が高いとおもったのですが、どうなるのでしょうか?  それとも、私の考え方がどこか間違っていたのでしょうか?

  • 2次方程式の照明の問題で

    『実数abc及び複素数αについて、αがxに関する2次方程式ax^2+bx+cの解であるならば、αの共役複素数も方程式ax^2+bx+cの解であることを照明しろ』 と言う問題なんですが、α+β=-b/aとαβ=c/aの公式を使ってやるのだと思ったのですが、どうしても上手く求めることができません。 どうやって照明したらいいか、ヒントをいただけるとありがたいです。

  • ax^2+bx+c=0の求解プロセスをDFDで表したいのですが・・・

    ax^2+bx+c=0の求解プロセスをDFDで表したいのですが、aが0か、判別式が正か負か0かなどによって、その後の処理が変わってきますよね? DFDの場合、そのような分岐はどう書けばよいのでしょうか?

  • 複素数と方程式

    複素数1+iを解の一つとする実数係数の三次方程式xの三乗+axの二乗+bx+c=0(すいません。式をどの様に打てばよいのか分からず、大変見づらくなってしまいました。axの二乗は、xだけが二乗されています)について、 ①この方程式の実数解をaで表せ。 ②この方程式と二次方程式xの二乗-bx+3=0がただ一つの解を共有するとき、定数a、b、cの値を求めよ。 という問題です。 ①から解けません。xに1+iと、共役な複素数1-iを代入したりしてみたのですが、解けません。 教えてください。

  • a、b、c、dは実数の定数である

    方程式x^4+ax^2+bx^2+cx+d=0は4つの虚数解を持つ その解の内、ある2つの和は19+2iであり、他の2つの積は4+5iである このときa、b、c、dの値を求めよ 解の2つをα、βとするとそれらの共役複素数も解なのはわかりましたがそこからを教えてください

  • 2次方程式の実数解

    3つのxの2次方程式  ax^2+bx+c=0 bx^2+cx+a=0 cx^2+ax+b=0 があるとき、 3つの方程式のうち、すくなくとも1つは実数解をもつことを証明せよ。(ただし、a, b, cは0以外の実数) という問題なのですが、a,b,cの大小関係から判別式を使って考えてみたのですが、うまくいきません。

  • 二次方程式

    3つのxの2次方程式  ax^2+2bx+c=0 bx^2+2cx+a=0 cx^2+2ax+b=0 について、すくなくとも1つは実数解をもつことを証明せよ。(ただし、a, b, cは0以外の実数) という問題なのですが、判別式を使って考えているのですが、よく分かりません。どなたかアドバイスをお願いします。