プロが教えるわが家の防犯対策術!

初めまして、こんばんわ。
学校の課題で、二次方程式の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("解なし。");}
}
}
}
}
}

A 回答 (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;
}
    • good
    • 0
この回答へのお礼

わざわざありがとうございます!!
本当助かりました・・・ありがとうございます!!

全部間違えてたんですね・・・
私もまだ、C言語を触って数ヶ月なんで…
これからfatal_error様のお言葉とおり
勉強しなおしてきます。

本当ありがとうございました。

お礼日時:2001/11/17 22:13

No.1の方の補足です。



No.1の方の回答で間違いはないと思います。
現在コンパイル出来る環境にないので試せません。ごめんなさい。

一応、if、else ifを使ったら、慣れないうちは万が一の条件に備えて
(絶対に、これ以外の条件はない!と言い切れる場合を除いて)

else
  printf("無効な条件分岐です");

といった感じの”else文”を付けることをお勧めします。
意外な盲点をついて、このelse文に引っ掛かる場合があります。
もしもの時のバグ探しにも役立ちますよー。
    • good
    • 0
この回答へのお礼

本当にありがとうございます~!!!!!!!

else文ですね~!!
わかりました!!これからあとの課題もそれを使ってやってみます!!
アドバイスの方、本当にありがとうございました!!

お礼日時:2001/11/17 22:18

パッと読んでみただけですが...



if文の中が間違ってますよ。コレ。
(a=b)みたいに書かれてますが、
一致かどうか比較するときは
(a==b)とやります。

たぶんこれを直すと動くんじゃないかな、
と思います。(試してません。)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!