c++ - 数组平均程序输出错误

标签 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. 您还没有初始化sum,所以这个程序的输出是不确定的。我想在你的情况下,编译器只是将它设置为 0 无论如何这是预期的行为,所以这就是你的结果接近正确结果的原因。但是,不要期望情况总是如此,并始终确保您使用已初始化的变量。
  2. 在循环结束时,您需要重置 numbsum 的值。
  3. 您使用的整数总是向下舍入结果。您可以使用 double 或在需要时强制转换变量。

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

另请注意,如果您在相同情况下直接输入 0,程序会因为除以 0 而崩溃。

关于c++ - 数组平均程序输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34190133/

相关文章:

c++ - 跨 C++ 模块传递指向成员函数的指针

c++ - 在 C++ 中实现的纯虚函数

c++ - SPSS 15 I/O DLL : Modifying Existing Cases

c++ - 我应该使用什么 STL 容器来行走一棵树?

C++ 函数的时间测量

c++ - 如何重命名我不知道扩展名的文件?

c++ - PyModule_AddObject 崩溃

c++ - 在函数 c++ 中更改时不保留类的公共(public)变量

c++ - 检查成员是否存在,可能在基类中,VS2005/08版本

c++ - 如何在 C++ 中创建异步/等待代码?