2012-05-30 49 views
0
for(k = 0; k < n; k++) 
{ 
    total += total + temps[k]; 
} 

avgTemp = total/n; 

temps是我的数组,其中包含n元素。 avgTemp存储temps中所有值的平均值。 k只是一些整数,使我的循环工作。 k,n和总数已经在上面的某处适当地声明了。 total跟踪数组中元素的总数。C++发现数组中的平均数

我的练习题告诉我这是错误的。我究竟做错了什么?

+10

'双avgTemp =标准::累加(临时工,临时工+ N,0.0)/ N;''假设是temps'存储一串温度作为浮点值。 – bames53

回答

6

for(k = 0; k < n; k++) 
{ 
    /// here's the error. 
    /// You assign the new value to total as (total = total + total + temps[k]) 
    total += total + temps[k]; 
} 

avgTemp = total/n; 

应该

for(k = 0; k < n; k++) { total += temps[k]; } 

avgTemp = total/n; 

for(k = 0; k < n; k++) { total = total + temps[k]; } 

avgTemp = total/n; 

使用迭代总和甚至会更好。它可以避免舍入错误。

avgTemp = temps[0]; 

for(k = 1 ; k < n ; k++) { total = (temps[k] + (double)(k-1) * total)/ (double)k; } 

bames53在评论中也给出了一个很好的基于STL的代码。

2

首先,total += temps[k]

+ =表示total = total + temps[k]已经

顺便说一句, 占总声明为float或double?否则,你正在做一个整数部分。

1

当获得数字的总和时,您将总数添加到自身,然后添加下一个元素。

total += total + temps[k]; 

应该是:

total += temps[k]; 
2

你的代码是“总”,并称给自己的每一次迭代,这是不是你想要的。您需要更改:

total += total + temps[k]; 

total += temps[k];