初めまして、こんばんわ。
学校の課題で、二次方程式の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("解なし。");}
}
}
}
}
}
No.2ベストアンサー
- 回答日時:
#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;
}
わざわざありがとうございます!!
本当助かりました・・・ありがとうございます!!
全部間違えてたんですね・・・
私もまだ、C言語を触って数ヶ月なんで…
これからfatal_error様のお言葉とおり
勉強しなおしてきます。
本当ありがとうございました。
No.3
- 回答日時:
No.1の方の補足です。
No.1の方の回答で間違いはないと思います。
現在コンパイル出来る環境にないので試せません。ごめんなさい。
一応、if、else ifを使ったら、慣れないうちは万が一の条件に備えて
(絶対に、これ以外の条件はない!と言い切れる場合を除いて)
else
printf("無効な条件分岐です");
といった感じの”else文”を付けることをお勧めします。
意外な盲点をついて、このelse文に引っ掛かる場合があります。
もしもの時のバグ探しにも役立ちますよー。
本当にありがとうございます~!!!!!!!
else文ですね~!!
わかりました!!これからあとの課題もそれを使ってやってみます!!
アドバイスの方、本当にありがとうございました!!
No.1
- 回答日時:
パッと読んでみただけですが...
if文の中が間違ってますよ。コレ。
(a=b)みたいに書かれてますが、
一致かどうか比較するときは
(a==b)とやります。
たぶんこれを直すと動くんじゃないかな、
と思います。(試してません。)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラムの時、フローチャートはどうなりますか?図でお願いします。 int main(void) { 1 2022/10/01 22:45
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# プログラミングのペーパーテスト 実行結果がどのように表示されるか答えよ #include <stdi 1 2022/07/09 14:27
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10個出力で改行したいのですが...
-
strcmp
-
printf で二進表示を行いたい。
-
改行について 1行に何個かづ...
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
C言語プログラミング
-
CTRL+Dでループを抜けるには
-
二つの整数値の大小比較
-
%P と %X の違い
-
scanfに文字が入力されたときに...
-
コマンドプロンプトがすぐ消える
-
C言語で、 printf()とwhile文を...
-
C言語
-
BMI値から体型を判定するプログ...
-
分数を表示するプログラム(長...
-
C言語で入力した変数の値から三...
-
ガウスの消去法、後退代入について
-
4の倍数を論理演算で表す。。
-
C言語について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語について
-
printf で二進表示を行いたい。
-
cshの文字列操作(0埋め)
-
10個出力で改行したいのですが...
-
コンパイルエラーについて
-
テキストカーソル位置の取得
-
strcmp
-
unsigned int型について
-
c言語でAからZまでを表示する...
-
printf( " %2d", p * q );
-
コマンドラインに出力した文字...
-
printfの出力内の文字をdefine...
-
ホームページをC言語で作りたい...
-
コマンドプロンプトがすぐ消える
-
小数点切捨て表示
-
【C言語教えてください】sin波...
-
switch分のケースを範囲数?に...
-
二つの整数値の大小比較
-
4の倍数を論理演算で表す。。
-
defineで定数が置き換えられな...
おすすめ情報