2013-04-16 3 views
1

по какой-то причине, я получаю очень странное отрицательное Nuber как мой средний для моей программы, вот мой код:найти среднее значение из массива

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

+1

@ 0x499602D2 двойного – user12074577

+1

'станд :: accumulate' и разделение будет делать это без необходимости писать свой собственный цикл. – chris

+1

Покажите нам, как вы объявляете свой массив и каково его содержимое. – 0x499602D2

ответ

3
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 
+0

спасибо, только что заметил это, но это не исправить ... – user12074577

+0

как насчет двойного? потому что это то, что я использую. – user12074577

+0

@ user12074577 см. Мое обновленное сообщение? – taocp

Смежные вопросы