2016-05-05 2 views
1
#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    int Sum=0,numbers; 
    double Average; 
    int counter = 0; 

    printf("\nPlease Enter the Numbers one by one\n"); 
    for(;;) { 
    scanf("%d",&numbers); 
    if(numbers == 0) { 
     break; 
    } 
    else { 
     Sum = Sum + numbers; 
     counter++; 
    } 
    } 

    Average = Sum/counter; 

    printf("\nSum of the %d Numbers = %d",counter, Sum); 
    printf("\nAverage of the %d Numbers = %.4f",counter, Average); 

    return 0; 
} 

Я написал программу, которая может принимать бесконечные числа ввода, добавлять их в одну переменную и выводить среднее значение всех входных чисел при нажатии клавиши 0.C - Выход округлен

Однако проблема заключается в том, что при вводе в примере 5, и 2 переменная сумма имеет значение 7. И счетчик имеет значение 2.

Однако, когда математическая операция начинается Average = SUM/Counter, то результат 3.00 не 3.500 ....

Кто-нибудь знает, где моя проблема?

Поблагодарили бы за любую помощь.

Приветствия

Marco

+3

потому что SUM is int ... Typecast результат, чтобы удвоить –

+0

Спасибо, что он работает =). –

ответ

5
Average = Sum/counter; 

Сумма является внутр.

Average = (double)Sum/counter; 

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

+0

Спасибо =) его работа –

+0

Вам нужно указать числитель или знаменатель перед делением, чтобы получить двойной результат. Выполнение результата приведет к целочисленному результату. Обратите внимание: это то, что вы сделали, но не то, что вы описали. – KevinDTimm

+0

Вот что я имел в виду. Формулировка может вводить в заблуждение. Я изменю его –

3

Sum и counter оба типа int, поэтому целочисленное деление выполняется и их результат также типа int.

Вы должны бросить один из операндов double так, чтобы она с плавающей точкой разделения:

Average = (double)Sum/counter; 
+0

Спасибо =) его работа –

0

Я не имею репутацию размещать комментарии. Так что я должен предоставить его в качестве ответа: ответ

dbush является более точным:

Вы должен бросить один из операндов, а не результата.

Вы сделали бы результат, он все равно был 3,00.

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