我遇到了一个问题,我必须取一行数字之和的平均值,以零结尾,这不能算在等式中。然而,虽然我的第一个输出值非常接近或有时是正确的,但我的其他值完全不正确。如果有人能找出我的代码有什么问题,我会很高兴。
#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
但是哪里出了问题?
最佳答案
您的代码有几个问题:
- 您还没有初始化
sum
,所以这个程序的输出是不确定的。我想在你的情况下,编译器只是将它设置为0
无论如何这是预期的行为,所以这就是你的结果接近正确结果的原因。但是,不要期望情况总是如此,并始终确保您使用已初始化的变量。 - 在循环结束时,您需要重置
numb
和sum
的值。 您使用的整数总是向下舍入结果。您可以使用 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/