- ベストアンサー
どこが悪いのか・・・
初めまして、こんばんわ。 学校の課題で、二次方程式のXの解を求めるC言語のプログラムを作ったのですが 何故か巧く起動しません。 よくわかりません・・・。 是非、何処が悪いのか指摘していただくと嬉しいです。 /*2-10(su210.c)*/ #include <stdio.h> #include <math.h> main() { int a,b,c; float D,x,y; printf("a*x^2+b*x+c=0のときa.b.cを入力して下さい。\n"); printf("a="); scanf("%d",&a); printf("b="); scanf("%d",&b); printf("c="); scanf("%d",&c); if(a=0){ if(b=c=0) printf("xはすべての実数をとる。"); else{ if(c=0&&b!=0) printf("x=0"); else{ if(b=0&&c!=0) printf("解なし。"); else{ if(b!=0&&c!=0) {x=-c/b; printf("x=%f",x);} } } } } else{ if(a!=0){ D=b^2-4*a*c; if(D>0){ x=(-b+sqrt(D))/2/a; y=(-b-sqrt(D))/2/a; printf("判別式はD>0です。\n"); printf("x1=%f\n",x); printf("x2=%f\n",y);} else{ if(D=0){x=-b/2*a;printf("判別式はD=0です。\n");printf("x=%f",x);} else{ if(D<0){printf("判別式はD<0です。\n");printf("解なし。");} } } } } }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1で回答したものです。 すいません。 if文直しても動きません。 ていうか、 間違えすぎててどこから指摘していいのか 判らないくらい間違ってますよ(汗)。 まず、「^」これは、乗記号ではありません。 Cの演算子にべき乗はないんで、普通にかけるか、pow関数を使います。 それから、else{ if( ... じゃなくて、else if と一気に書いてOKです。 ていうか、カッコの対応が間違ってました。 さらに、int型の変数をint型で割ると小数点以下は打ち切られます。 (b/c)の値が、整数にしかなりません。 文法、もうちょい勉強したほうがよろしいでしょう。 (って生意気なこと言えたクチではありませんが...) 以下、修正したものを。 #include <stdio.h> #include <math.h> main() { int a,b,c; float D; printf("a*x^2+b*x+c=0のときa.b.cを入力して下さい。\n"); printf("a="); scanf("%d",&a); printf("b="); scanf("%d",&b); printf("c="); scanf("%d",&c); if(a==0){ if(b==0&&c==0)printf("xはすべての実数をとる。"); else if(c==0&&b!=0)printf("x=0"); else if(b==0&&c!=0)printf("解なし。"); else if(b!=0&&c!=0)printf("x=%lf",-(c/b)); } else{ D=(float)((b*b)-4*a*c); if(D>0){ printf("判別式はD>0です。\n"); printf("x1=%f\n",(-b+sqrt(D))/(2*a)); printf("x2=%f\n",(-b-sqrt(D))/(2*a)); } else if(D==0){ printf("判別式はD=0です。\n");printf("x=%lf", (double)-b/(2*a));} else if(D<0){ printf("判別式はD<0です。\n");printf("解なし。");} } return 0; }
その他の回答 (2)
- sakocchi
- ベストアンサー率29% (27/92)
No.1の方の補足です。 No.1の方の回答で間違いはないと思います。 現在コンパイル出来る環境にないので試せません。ごめんなさい。 一応、if、else ifを使ったら、慣れないうちは万が一の条件に備えて (絶対に、これ以外の条件はない!と言い切れる場合を除いて) else printf("無効な条件分岐です"); といった感じの”else文”を付けることをお勧めします。 意外な盲点をついて、このelse文に引っ掛かる場合があります。 もしもの時のバグ探しにも役立ちますよー。
お礼
本当にありがとうございます~!!!!!!! else文ですね~!! わかりました!!これからあとの課題もそれを使ってやってみます!! アドバイスの方、本当にありがとうございました!!
- fatal_error
- ベストアンサー率39% (23/58)
パッと読んでみただけですが... if文の中が間違ってますよ。コレ。 (a=b)みたいに書かれてますが、 一致かどうか比較するときは (a==b)とやります。 たぶんこれを直すと動くんじゃないかな、 と思います。(試してません。)
お礼
わざわざありがとうございます!! 本当助かりました・・・ありがとうございます!! 全部間違えてたんですね・・・ 私もまだ、C言語を触って数ヶ月なんで… これからfatal_error様のお言葉とおり 勉強しなおしてきます。 本当ありがとうございました。