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

avgTemp = total/n; 

temps мой массив, который содержит n элементов. avgTemp хранит среднее значение всех значений в temps. k - это просто целое число, чтобы заставить мой цикл работать. k, n и total уже объявлены соответствующим образом где-то выше. total отслеживает общее количество элементов в массиве.C++ Поиска среднего значения чисел в массиве

Мое упражнение говорит мне, что это неправильно. Что я делаю не так?

+10

'двойной avgTemp = станд :: накапливают (Temps, временные секретари + N, 0,0)/п;' 'предполагая 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] уже

И кстати, тотально объявлен как поплавок или двойной? В противном случае вы выполняете целочисленный раздел.

1

При получении суммы чисел вы добавляете общее значение в себя, а затем добавляете следующий элемент.

total += total + temps[k]; 

должно быть:

total += temps[k]; 
2

Ваш код добавляет «всего» к себе на каждой итерации, что не то, что вы хотите. Вы должны изменить:

total += total + temps[k]; 

к

total += temps[k];