
看到题主在其他回答的回复中提到了一个问题:“如果所有的数字都接近该类型表达范围的上限怎么办,会不会溢出?”
如果是原问题,不考虑溢出的情况,难度真的不大。但如果考虑进去的话,问题就变得有趣起来。
假设对signed char类型的两个数字125和125进行平均值计算
(125+125)/2
(-6)/2
-3
此时结果很明显是错的。
假设对于signed char数组{120,127,124,126}进行求取平均值。
我们可以这么来考虑,最开始读入0个数字,当前平均值为0,余数为0。
读入1个数字后,此时平均值为120,余数为0。
读入第2个数字127后,用127减去之前的平均值120,得到7,除以2,商3余1。用之前的平均值120加上商3,更新余数为1。
读入第3个数字124后,124减去平均值123得到1,除以3商0余1。平均值123加0,余数1加1,结果为2。
读入第4个数字126后,126减去123得到3,除以4商0余3。平均值123加0,余数2加3,结果为5,大于4。所以平均值123要加1,结果为124,余数减4,结果为1。
上面的例子应该是把所有情况都考虑到了吧。
(手机码字较麻烦,抽空上电脑把代码发出来)
