Int main void
{
int a=8,b=12,h=10,S;
S=a*h+1/2*(b-a)*h;
printf (“S=%d¥n,S);
}
台形の面積をプログラムする問題で、上底がa.下底がb.高さをhとするのですが、あるプログラム例を出されて、その実行結果が80になる理由を知りたいです。また、どうプログラムを改善すると正答の100になるのか知りたいです。
Re: 台形の面積をプログラムする問題で、上底がa.下底がb.高さをhとするのですが、あるプログラム例を出されて、その実行結果が80になる理由を知りたいです。また、どうプログラムを改善すると正答の100になるのか知りたいです。
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;
という式では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になるのか知りたいです。
どうして素直に
S = (a + b) * h / 2;
と書かないのかな?
S = (a + b) * h / 2;
と書かないのかな?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。