ページ 11

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

Posted: 2019年4月20日(土) 20:57
by 初心者学生です
Int main void
{
int a=8,b=12,h=10,S;
S=a*h+1/2*(b-a)*h;
printf (“S=%d¥n,S);
}

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

Posted: 2019年4月20日(土) 22:40
by box
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;

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

Posted: 2019年4月20日(土) 22:42
by box
どうして素直に
S = (a + b) * h / 2;
と書かないのかな?

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

Posted: 2019年4月21日(日) 09:03
by dic
http://www.ndmc.ac.jp/med/subject/sh_me ... hinkagaku/
ここで詳しく聞いてください。