2012-05-30 82 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];