• ベストアンサー

2次方程式の解 Cプログラミング

C言語でのプログラムの添削をお願いします。 2次方程式の解を求めるものなのですが。 #include<stdio.h> #include<math.h> main(){ double a,b,c,d; double x1=0; double x2=0; scanf("%lf %lf %lf" ,&a,&b,&c); printf("a=%f b=%f c=%f\n" ,a,b,c); d=b*b-4*a*c; if(d>0){ x1=(-b+sqrt(d))/2*a; x2=(-b-sqrt(d))/2*a; printf("x=%f,%f\n" ,x1,x2); }else if(d<0){ x1=-b/2*a; x2=sqrt(-d)/2*a; printf("x=%f+%fi,%f-%fi\n" ,x1,x2,x1,x2); }else{ printf("x=%f\n" ,x1); } return 0; } このとき、 a=-7,b=2,c=-1 を与えると x=7.000000+-17.146428i,7.000000--17.146428i という値が返ってきます。 他にも、虚数解のときに間違った値が返ってきてしまう気がするのですが、いかがでしょうか? 実数解のときは正しいようです。 回答よろしくお願いします。

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

  • ベストアンサー
  • qbr2
  • ベストアンサー率50% (62/123)
回答No.2

x1=(-b+sqrt(d))/2*a; ↓ (-b+sqrt(d))/(2*a); か、(-b+sqrt(d))/2/a; にしないと、2aで割ってることになりません。 2で割って、そのあとにaを掛けてる状態。こんな場所がちらほら。 =============================== }else{ printf("x=%f\n" ,x1); } x1が全く計算されてませんね。 x1=-b/2/a の計算が必要。

amada08
質問者

お礼

確かにそうですね。 ありがとうございます。 数学苦手とか以前の問題ですねこれは。 ところで、修正したにも関わらず a=-7.000000 b=2.000000 c=-1.000000 x=0.142857+-0.349927i,0.142857--0.349927i と、 +- なんてものがでてきてしまうのですが、それはどうしたらよいですか?

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

実数解も複素数解も、代入文の右辺の分母をかっこでくくらなければいけません。たとえば x1=-b/(2*a); です。 もうひとつ、dが正でも負でもないとき、x1は0のままではいけません。

amada08
質問者

お礼

ありがとうございます。 単純に小学校の算数レベルの問題でしたね。 とてもわかりやすかったです。

すると、全ての回答が全文表示されます。
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.1

>実数解のときは正しいようです。 そうかな。 aの値が1以外の時におかしくなるような。 あと、判別式が0の時にもおかしくなりませんか。

amada08
質問者

補足

そうですか。 正直なところ、このプログラムの問題点が全然わかりません。 初心者なもので目も鍛えられておらず、数学も苦手なもので。 よろしければ具体的に問題点を挙げていただくと有り難いのですが。 どうかよろしくお願いします。

すると、全ての回答が全文表示されます。
このQ&Aのポイント
  • プリンターPX-S740でマゼンタ色が印刷されない問題について
  • マゼンタ色がブラックに近い茶色のようなくすんだ色で印刷される現象について
  • EPSON社製品のインクパターン印刷時にマゼンタ部分が正しく印刷されない問題の対処法
回答を見る