【问题标题】:find average value from array [closed]从数组中找到平均值[关闭]
【发布时间】:2013-04-16 02:00:50
【问题描述】:

由于某种原因,我的程序平均得到一个非常奇怪的负数,这是我的代码:

int sum, avg;
int size;
size = sizeof(array) / sizeof(array[0]);
sum = 0;
avg = 0;

for(int i = 0; i < size; i++){
    sum += array[i];
}
avg = sum / size

我的输出是:-6.84941e+061

【问题讨论】:

  • std::accumulate 和一个部门会这样做,而无需编写自己的循环。
  • 向我们展示您如何声明您的数组及其内容。
  • 或者更好的是,在 main 函数中显示一个可编译的示例,演示您获得的输出。
  • 告诉我们数据的本质是什么。它们是大数、小数、大量小/大数等吗?您系统上int 的大小是多少?在除法之前,部分总和是否超过 INT_MAX?您是否考虑过调试这个?
  • 您的代码显示 avg 是 int 类型。那如何打印浮点值?

标签: c++ arrays average


【解决方案1】:
for(int i = 1; i < size; i++){
       //^^should be 0
   sum += array[i];
}
avg = sum / size; //pay attention to truncation when doing integer division

整数除法时要注意截断。例如,10/20 = 0 在整数除法中。 同时,求和时需要从0开始。

您的代码应如下所示:

 //the average may not necessarily be integer
 float avg = 0.0;  //or double for higher precision
 for (int i = 0; i < size; ++i)
 {
     sum += array[i];
 }
 avg = ((float)sum)/size; //or cast sum to double before division

【讨论】:

  • 谢谢,刚刚注意到了,但没有解决...
  • 双倍呢?因为这就是我正在使用的。
  • @user12074577 看到我更新的帖子了吗?
  • @user12074577 double 也可以。但是你仍然需要注意整数截断是和是整数。只声明 avg double 是不够的
  • @user12074577 更新您的帖子,向我们展示您执行此操作的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 2016-02-01
相关资源
最近更新 更多