阵列平均程序的输出错误

时间:2015-12-09 22:21:44

标签: c++

我遇到了一个问题,我必须取一行数字之和的平均值,以零结尾,不能在等式中计算。然而,虽然我的第一个输出值非常接近或有时是正确的,但我的其他值完全没有了。如果有人能弄明白我的代码做错了什么,我会很高兴。

#include <iostream>
#include <math.h>
using namespace std;
int main() {
    int a, b, sum, average;
    int numb = 0;
    cin>>a;
    for (int i=0;i<a;i++) {
        do {
            cin>>b;
            sum= b+sum;
            numb++;
        } while (b!=0);
        average = sum/(numb-1);
        cout<<round(average)<<" ";
    }
}

输入:

  

11
  780 1610 565 799 1664 431 0
  12848 10728 4091 12286 8035 0
  959 418 171 255 694 78 393 917 119 1016 929 761 363 0
  14930 11543 11508 3062 1545 8434 6504 2631 0
  418 359 477 157 224 170 124 433 255 0
  1175 1789 853 1411 1772 661 884 449 1324 713 0
  52 325 456 579 732 621 0
  6898 11736 13531 11906 2502 0
  16334 10736 7506 8493 3749 5434 0
  3221 4212 5720 6807 14802 11421 8939 4167 12245 14132 11460 5120 9445 5000 5379 0
  366 2435 3709 1616 3725 3449 1591 901 7202 5837 0

输出:

  

974 4486 2342 3459 2748 2405 2182 2667 3109 3895 3778

预期:

  

975 9598 544 7520 291 1103 461 9315 8709 8138 3083

但出了什么问题?

1 个答案:

答案 0 :(得分:6)

您的代码存在以下几个问题:

  1. 您尚未初始化Child,因此此程序的输出不具有确定性。我想在你的情况下编译器只是将它设置为@ManyToOne,这是预期的行为,所以这就是你的结果接近正确的结果。但是,不要指望总是如此,并始终确保使用初始化变量。
  2. 在循环结束时,您需要重置sum0的值。
  3. 使用整数,它总是向下舍入结果。您可以使用双精度型或在需要时投射变量。

    numb
  4. 另请注意,如果在同一情况下直接输入sum,程序将因为除以0而崩溃。