2017-02-22 28 views
2

Программа выполняет все, что предназначено, предлагает пользователю ввести возраст, пока пользователь не наберет «-1». Как только пользователь вводит это, программа предназначена для того, чтобы рассказать вам о самом большом, самом маленьком и AVERAGE. У меня все работает нормально, но я не уверен, как усреднять входные данные, любая помощь оценивается!Как я могу усреднить эти пользовательские входы?

ОБНОВЛЕНИЕ: Спасибо всем, кто помог, я обновил код. Остается только то, что я не получаю правильное среднее значение. Я включил обновленный код.

#include<stdio.h> 
int main() 
{ 
    int n, large, small; 
    int sumOfAges = 0; 
    double averageAge = 0.0; 
    int Num = 0; 
    printf("Enter an age: \n"); 
    scanf("%d", &n); 
    large = n; 
    small = n; 



    while(n != -1) 
    { 
     printf("Enter an age: \n"); 
     scanf("%d",&n); 
     if (n>large) 
     large = n; 
     if(n < small && n != -1) 
     small = n; 
     sumOfAges += n; 
     Num++; 
    } 

    averageAge = (sumOfAges/Num); 

    printf("\n The largest age is %d", large); 
    printf("\n The smallest age is %d", small); 
    printf("\n The average age is %lf", averageAge); 
    return 0; 
} 
+3

Вы знаете, как вычисляется среднее значение? –

+0

@ Юджин, да. Добавьте все, затем разделите на количество чисел. Я новичок в кодировании и C, поэтому извиняюсь, если ваш вопрос был саркастичным. Мне просто нужно указать, как это осуществить. – jh365

+1

У вас уже есть цикл. Вам просто нужно иметь еще две переменные: одну для суммы (добавить 'n'), вторую - количество чисел (добавить +1). Затем отобразите результат вычисления (не забывая бросать в float или double, чтобы избежать округления). – AntonH

ответ

1

Для расчета среднего вы должны аккумулировать все возрасты и разделить их на количество введенных возрастов.

Программа может выглядеть следующим образом

#include <stdio.h> 

int main(void) 
{ 
    int largest, smallest; 
    int n, total; 

    n = 0; 
    total = 0; 

    while (1) 
    { 
     int age; 

     printf("Enter an age (-1 - exit) : "); 

     if (scanf("%d", &age) != 1 || age == -1) break; 

     if (n++ == 0) 
     { 
       largest = smallest = age; 
     } 
     else if (largest < age) 
     { 
       largest = age; 
     } 
     else if (age < smallest) 
     { 
       smallest = age; 
     } 

     total += age; 
    } 

    if (n != 0) 
    { 
     printf("\nThe largest age is %d", largest); 
     printf("\nThe smallest age is %d", smallest); 
     printf("\nThe average age is %d\n", total/n); 
    } 

    return 0; 
} 

Его выход может выглядеть

Enter an age (-1 - exit) : 10 
Enter an age (-1 - exit) : 20 
Enter an age (-1 - exit) : 15 
Enter an age (-1 - exit) : 16 
Enter an age (-1 - exit) : 25 
Enter an age (-1 - exit) : 21 
Enter an age (-1 - exit) : -1 

The largest age is 25 
The smallest age is 10 
The average age is 17 

Я не думаю, что вывод, что средний возраст как двойное является хорошей идеей в этом случае , Однако, если вы хотите, вы можете объявить переменную total как имеющую тип double. :)

+0

@ jh365 Спросите меня, что неясно. –

2

Внутри ваше время заявления вы должны отслеживать количества входов, а общая стоимость входов

int numberOfInputs = 0; 
int totalValue = 0; 

while(n != -1) 
{ 
    numberOfInputs++; 
    totalValue += n; 
    // Your other While-loop code here 
} 

В среднем в чем определяется делением totalValue по numberOfInputs.

float Average = (float)totalValue/numberOfInputs; 

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

+0

Вы имеете в виду «total/numberOfInput?» –

+0

Я не являюсь нисходящим, но у вас бесконечный цикл ... и ваша средняя формула неверна (что не очевидно с первого взгляда ;-) – chqrlie

+0

1) Не спрашивайте о голосовании в теле ответа. Это не связано. 2) Да, нужно пояснить нижнюю часть, иначе это бесполезно. 3) Я могу придумать несколько причин для этого DV (не мое): a) Отказаться от тривиального ответа вместо того, чтобы преподавать OP что-то. б) Использование (потенциально) неинициализированных переменных. c) Как указано - бесконечный цикл, как написано –

2

Чтобы найти среднее значение в этом случае, вам необходимо определить значение N, то есть количество возрастных значений, для которых вы хотите найти среднее значение (как значение с плавающей запятой) в вашем цикле while, и добавьте каждый новый возраст (как целочисленные значения) в общую возрастную ценность, сохранив как N, так и сумму возрастов вместе с smallest и largest.

//...your vars 
int sumOfAges = 0; 
double averageAge = 0.0; 
int N = 0; 

while(age != -1) 
{ 
    printf("Enter an age: \n"); 
    scanf("%d",&age); 
    if (age != -1){ 
     if (age>max) 
      max = age; 
     if(age < min) 
      min = age; 

     sumOfAges += age; 
     N++; 
    } 
} 

Затем вычисляют среднее значение, как averageAge = ((double)sumOfAges/N);

+0

Не используйте имена 'N' и' n' как имена переменных. Используйте значащие имена. – stark

+1

'N' обычно используется в статистике и имеет смысл по этой причине. Зачем отрицать историю поля в его приложении? –

+1

Идентификаторы, которые отличаются только _case_, как правило, сложнее понять/отличить от идентификаторов, отличающихся текстом. Использование 'age' vs.' n' поможет отделить 'n' от' N'. – chux