としか出ません。
#include<stdio.h>
void main (void)
{
double a;
double b;
double c;
printf("Aを入力する");
scanf("%lf",&a);
printf("Bを入力する");
scanf("%lf",&b);
c=(2*a*b)/(a+b);
printf("平均値は");
printf("%8.6lf",c);
}
というプログラムを作ったのですが、プログラムはコンパイルするのですが出てくる答えは0.000000しか出ません。ほかにもよく0.0000という答えが出ることがあります。原因を教えていただけませんでしょうか。
No.5ベストアンサー
- 回答日時:
# 素で知りませんでした < 調和平均
修正するときのコツは、問題を切りわけることです。
考えられるのは
・表示だけが正しくない
・a,bが正しくない
・c=(2*a*b)/(a+b);が正しくない
・(これに書いていないところで) cの値が変わっている
くらいでしょうか?
%fは固定小数点表示で、指定した値より小さな分は表示できません。
例えば、 10の-20乗なども 0.000000 と表示されてしまいます。
→ %e(指数表示)や%g(値の大小によって、固定小数点表示と指数表示を切り替える)を使って、c==0なのか、c!=0なのかを確認する。
a,bについても同様に
printf("a=%g b=%g\n", a, b);
として、入力した値と同じか確かめる。気になるなら
printf("2*a*b=%g a+b=%g\n", 2*a*b, a+b);
とでもやって、途中経過も確認する。
あとは、次のことがあれば、こちらでも検証しやすいです。
・実際にa,bとしてどんな値を入力したのかを補足あたりに書いて、回答者側でも確認できるようにする。
・あなたの使っている環境(OS,Cコンパイラの種類,バージョン)を明らかにする
No.4
- 回答日時:
>printf("%8.6lf",c);
これはC99仕様のCででしか許されません。
http://www.kijineko.co.jp/tech/superstitions/pri …
特に、long doubleをサポートする処理系では「%Lf」で「引数はlong doubleである」と認識するので「%8.6lf」の指定で「引数はlong doubleである」として処理する可能性があります。
もし、long doubleと勘違いされた場合、何が表示されるかは未定義ですが、多くの場合、cがどんな値になっても「0.000000」しか出ないでしょう。
No.3
- 回答日時:
「調和平均」ってやつですね>#2.
どういうコンパイラでどんな入力をしたときに「出てくる答えは0.000000」となるんでしょうか?
# 「main の返り値を void としてるのが気に入らない」とか... はないよなぁ, いくらなんでも.
No.2
- 回答日時:
> c=(2*a*b)/(a+b);
aとbの平均の計算式をよく考えてください。
0しか出ない、ということは無いですが、平均になってません。
現在は、aかbのどちらか一方が0の時、c=0になります。
> printf("%8.6lf",c);
コンパイラによっては、何が起こるかわかりません。
http://www.kijineko.co.jp/tech/superstitions/pri …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C言語を実行すると-infが出てき...
-
c言語で、繰り返し文の中で、0....
-
C 開放してるのにエラー(doubl...
-
関数のプログラム
-
doubleの変数にintとintの割り...
-
バイナリから実数を取得したい...
-
Cで3乗根を求める方法
-
C言語の型による処理速度の違い
-
float型とdouble型の変数の違い...
-
C言語 関数プロトタイプ宣言の...
-
-1.#IND00と出てしまうのですが...
-
c言語について
-
関数におけるif文とreturn文に...
-
C言語の複素数についてです。
-
DWORDの警告
-
C言語で2.5で割った余りを求...
-
指数形式で入力するには
-
プログラミングについて
-
プログラミングでのテイラー展開
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
doubleの変数にintとintの割り...
-
C言語を実行すると-infが出てき...
-
float型とdouble型の変数の違い...
-
c言語で、繰り返し文の中で、0....
-
C 開放してるのにエラー(doubl...
-
関数におけるif文とreturn文に...
-
至急です! マクロ定義で #defi...
-
C言語 関数プロトタイプ宣言の...
-
浮動小数点の定数
-
int とdoubleの比較
-
C言語の型による処理速度の違い
-
c言語のコンパイルエラー canno...
-
doubleは常に%lfとするべきなのか
-
difftime()について
-
C言語初心者 構造体 課題について
-
C言語でintをdoubleに
-
listに構造体を格納
-
たくさんの数の平均を求める方...
-
(C,C++言語)関数の引数は自動キ...
おすすめ情報