初めまして、こんばんわ。
学校の課題で、二次方程式の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.1
- 回答日時:
パッと読んでみただけですが...
if文の中が間違ってますよ。コレ。
(a=b)みたいに書かれてますが、
一致かどうか比較するときは
(a==b)とやります。
たぶんこれを直すと動くんじゃないかな、
と思います。(試してません。)
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文ですね~!!
わかりました!!これからあとの課題もそれを使ってやってみます!!
アドバイスの方、本当にありがとうございました!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コンパイルエラーについて
-
コマンドラインに出力した文字...
-
【C初心者】+,-,*./について【...
-
台形の面積を求めるプログラム
-
じゃんけんゲームをつくったの...
-
迷路作成のプログラミング
-
C言語での、年複利の計算方法...
-
error C2143: 構文エラー : ';'...
-
cshの文字列操作(0埋め)
-
printf で二進表示を行いたい。
-
スレッドとメッセージキューに...
-
#include <stdio.h> #include <...
-
教えてください!!
-
C言語のプログラムにエラーが出...
-
printfでSegmentation fault
-
Cプログラムについて
-
Cプログラムについて
-
なぜgccはstdio.hをインクルー...
-
C言語のじゃんけんゲームのプロ...
-
学校の課題で
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コンパイルエラーについて
-
printf で二進表示を行いたい。
-
c言語でAからZまでを表示する...
-
テキストカーソル位置の取得
-
4の倍数を論理演算で表す。。
-
cshの文字列操作(0埋め)
-
【C言語教えてください】sin波...
-
10個出力で改行したいのですが...
-
wsprintfの書式制御文字列につ...
-
error C2143: 構文エラー : ';'...
-
printfの出力内の文字をdefine...
-
%P と %X の違い
-
C言語
-
strcmp
-
(C言語)めちゃくちゃな値にな...
-
コマンドラインに出力した文字...
-
スレッドとメッセージキューに...
-
printf( " %2d", p * q );
-
Visual Sutdio 2017 でのC言語...
-
defineで定数が置き換えられな...
おすすめ情報