
2次方程式 ax^2+bx+c=0(a≠0) の根をもとめるプログラミングを作成する際に、数値がおかしくなってしまいました。
計算の過程を出力していった結果、おそらく序盤のscanfから間違っていることがわかりましたが、どう間違っているのかがわかりません。
対策を教えていただけませんか?
#include<stdio.h>
#include<math.h>
void main(void){
double a,b,c,d,e,f;
printf("a,b,c=");
scanf("%d,%d,%d",&a,&b,&c);
printf("%d,%d,%d\n",a,b,c);
d=(b*b)-(4*a*c);
e=(-b+sqrt(d))/a;
f=(-b-sqrt(d))/a;
if(d>0)
printf("x=%6.3f,%6.3f\n",e,f);
else if(d==0)
printf("x=%6.3f\n",e);
else
printf("no solution\n");
}
a,b,c=のところに何の数値を入れても
3,-1315373568,64
x= 0.000
と表示されてしまいます。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
>int変数で入力した後で型変換をするやり方も試しましたが、これも同じでした。
ちゃんと、1,2,3「リターン」のように、数をカンマで区切って入力しましたか?
scanf("%d,%d,%d",&ia,&ib,&ic);
であれば、「カンマで区切って数値を入力する」という意味になっています。
書式とおり1,2,3「リターン」と入力すれば、ia,ib,icにそれぞれ 1,2,3が代入されるはずですが・・
<おまけ>
scanf("%d %d %d",&ia,&ib,&ic);
であれば、カンマではなく「スペースで区切って数値を入力する」という意味になりますので、1 2 3「リターン」と入力することになります。
No.3
- 回答日時:
最近、関連する回答をしたので。
https://oshiete.goo.ne.jp/qa/9016082.html
scanf でも同様のことが行なわれています。
「%d は数値」と覚えるのではなく「%dはintに対応」と型とセットで覚えましょう。
また、 %dは整数なので、 1.5 と言った小数点が入ると読み込めません。
scanfの戻り値は確認するようにしましょう。
No.2
- 回答日時:
>対策を教えていただけませんか?
double a,b,c,d,e,f;
int ia,ib,ic;
のように同名のint変数を定義して
scanf("%d,%d,%d",&ia,&ib,&ic);
でいったんInt変数で入力を受け付けて、
a=ia; b=ib; c=ic;
でdouble型に型変換して代入するのではどうですか?
あと気になったのは、
else if(d==0)
とありますが、変数dの型はdouble型ですよね。
int型は誤差はありませんが、double型は、浮動小数点表現ですので、基本、近似計算です。ですから == 0 になるのは運がいいときだけですよ。
No.1
- 回答日時:
>double a,b,c,d,e,f;
>scanf("%d,%d,%d",&a,&b,&c);
>printf("%d,%d,%d\n",a,b,c);
double型の時に"%d"でしたか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
カウントアップタイマ
-
C 開放してるのにエラー(doubl...
-
listに構造体を格納
-
C言語 初心者です
-
C言語の型による処理速度の違い
-
2次方程式の解を求めるプログ...
-
2次元配列 CXX0030とい...
-
二次関数で
-
実数型の変数に値を入力した計...
-
C++初心者です。簡単なスコア計...
-
平均を求めるプログラムを作っ...
-
浮動小数点の定数
-
doubleの変数にintとintの割り...
-
斜辺と角度て底辺と高さを出したい
-
c言語のコンパイルエラー canno...
-
大きな桁の計算はどうやるの?
-
C++で外積
-
C言語で台形公式を使った二重積...
-
「Aに対するBの割合」と「Aに対...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C 開放してるのにエラー(doubl...
-
至急です! マクロ定義で #defi...
-
C言語を実行すると-infが出てき...
-
C言語の型による処理速度の違い
-
c言語で、繰り返し文の中で、0....
-
C言語 関数プロトタイプ宣言の...
-
doubleの変数にintとintの割り...
-
float型とdouble型の変数の違い...
-
-1.#IND00と出てしまうのですが...
-
c言語のプログラミングについて...
-
C言語で台形公式を使った二重積...
-
C言語でdouble型の小数点の引き...
-
C言語のプログラムで#include<m...
-
2次方程式の解を求めるプログ...
-
C言語の複素数についてです。
-
doubleは常に%lfとするべきなのか
-
関数におけるif文とreturn文に...
-
difftime()について
-
int とdoubleの比較
おすすめ情報
回答ありがとうございました。
%dの部分を%fにしたのですが、何の実数を入力しても実数は全て0.000になってしまい、x=-0.000にしかなりませんでした。
int変数で入力した後で型変換をするやり方も試しましたが、これも同じでした。
自分でもミスを探してみたのですが見つからず、力不足で申し訳ありません。
修正後の5~7行目です。
printf("a,b,c=");
scanf("%6.3f,%6.3f,%6.3f",&a,&b,&c);
printf("%6.3f,%6.3f,%6.3f\n",a,b,c);