- ベストアンサー
平均を求めるプログラムで答えが0.000000としか出ない原因は?
- 質問者は、平均を求めるプログラムを作成しましたが、答えが0.000000としか出ない問題に直面しています。
- プログラムは正しくコンパイルされ、実行もできますが、出力は常に0.000000となっています。
- 原因を特定するために、コードを確認したり、入力値や計算式に問題がないかを調べたりする方法を教えてほしいとしています。
- みんなの回答 (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コンパイラの種類,バージョン)を明らかにする
その他の回答 (4)
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
>printf("%8.6lf",c); これはC99仕様のCででしか許されません。 http://www.kijineko.co.jp/tech/superstitions/printf-format-for-double.html 特に、long doubleをサポートする処理系では「%Lf」で「引数はlong doubleである」と認識するので「%8.6lf」の指定で「引数はlong doubleである」として処理する可能性があります。 もし、long doubleと勘違いされた場合、何が表示されるかは未定義ですが、多くの場合、cがどんな値になっても「0.000000」しか出ないでしょう。
- Tacosan
- ベストアンサー率23% (3656/15482)
「調和平均」ってやつですね>#2. どういうコンパイラでどんな入力をしたときに「出てくる答えは0.000000」となるんでしょうか? # 「main の返り値を void としてるのが気に入らない」とか... はないよなぁ, いくらなんでも.
- kmee
- ベストアンサー率55% (1857/3366)
> 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/printf-format-for-double.html
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
cを求める前に printf("a=%lf b=%lf\n", a, b); してみて。入力値が入ってますか?
お礼
朝の忙しい時間にありがとうございます。 a及びbはちゃんと読み取っており、表示しました。
お礼
どうもありがとうございました。初心者でなかなか前に進みませんが、頑張ってみます。