OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

どこが悪いのか・・・

  • 暇なときにでも
  • 質問No.169906
  • 閲覧数41
  • ありがとう数2
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 66% (2/3)

初めまして、こんばんわ。
学校の課題で、二次方程式の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
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル8

ベストアンサー率 39% (23/58)

#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;
}
お礼コメント
tedukamaru

お礼率 66% (2/3)

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

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

本当ありがとうございました。
投稿日時 - 2001-11-17 22:13:37
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル8

ベストアンサー率 39% (23/58)

パッと読んでみただけですが... if文の中が間違ってますよ。コレ。 (a=b)みたいに書かれてますが、 一致かどうか比較するときは (a==b)とやります。 たぶんこれを直すと動くんじゃないかな、 と思います。(試してません。)
パッと読んでみただけですが...

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

たぶんこれを直すと動くんじゃないかな、
と思います。(試してません。)
  • 回答No.3
レベル11

ベストアンサー率 29% (27/92)

No.1の方の補足です。 No.1の方の回答で間違いはないと思います。 現在コンパイル出来る環境にないので試せません。ごめんなさい。 一応、if、else ifを使ったら、慣れないうちは万が一の条件に備えて (絶対に、これ以外の条件はない!と言い切れる場合を除いて) else   printf("無効な条件分岐です"); といった感じの”else文”を付け ...続きを読む
No.1の方の補足です。

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

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

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

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

お礼率 66% (2/3)

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

else文ですね~!!
わかりました!!これからあとの課題もそれを使ってやってみます!!
アドバイスの方、本当にありがとうございました!!
投稿日時 - 2001-11-17 22:18:03
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ