台形の面積をプログラムする問題で、上底がa.下底がb.高さをhとするのですが、あるプログラム例を出されて、その実行結果が80になる理由を知りたいです。また、どうプログラムを改善すると正答の100になるのか知りたいです。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

box
記事: 1744
登録日時: 9年前

Re: 台形の面積をプログラムする問題で、上底がa.下底がb.高さをhとするのですが、あるプログラム例を出されて、その実行結果が80になる理由を知りたいです。また、どうプログラムを改善すると正答の100になるのか知りたいです。

#2

投稿記事 by box » 6ヶ月前

a * h
という式では8 * 10 = 80を求めています。
一方、
1 / 2 * (b - a) * h
では、
1 / 2
を行なった時点でint型どうしの割り算のルールに従いゼロとなっています。
したがって、その後で(b - a)をかけようがhをかけようが、
1 / 2 * (b - a) * h
の結果はゼロです。
よって、Sの値は80とゼロを加えた80になります。別段不思議なことではありません。
正答の100を得るには2で割るのを最後にすればよいでしょう。つまり、
S=a * h + (b - a) * h / 2;
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 1744
登録日時: 9年前

Re: 台形の面積をプログラムする問題で、上底がa.下底がb.高さをhとするのですが、あるプログラム例を出されて、その実行結果が80になる理由を知りたいです。また、どうプログラムを改善すると正答の100になるのか知りたいです。

#3

投稿記事 by box » 6ヶ月前

どうして素直に
S = (a + b) * h / 2;
と書かないのかな?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。


返信

“C言語何でも質問掲示板” へ戻る