2014-12-14 2 views
3

Почему мой расчет не совпадает с положением со средней ошибкой?Вычислить средний балл

У меня есть функция:

int student_average_scope() { 
    char name[50]; 
    int group; 
    int exam; 
    int average = 0; 
    int digit = 0; 
    int counter_digits = 0; 

    for (int i = 0; i < 4; i++) { 
    sscanf(student_list[i], "%d %[^0-9] %d", &group, name, &exam); 

    while (exam > 0) { 
     digit = exam % 10; 
     average += digit; 
     counter_digits++; 
     exam = exam/10; 
    } 

    printf("%.1f\n", (double)average/counter_digits); 
    } 

    return 0; 
} 

Где student_list[i] = "4273 Константинопольский А. А. 4333 знзнз" среднем равен 3,9, но правильный ответ 3.2! И если я делаю простую функцию, вычислить средний балл, дайте мне правильный результат (3.2). Где я ошибся?

int student_average_scope() { 
    int exam = "4333"; 

    int average = 0; 
    int digit = 0; 
    int counter_digits = 0; 

    while (exam > 0) { 
     digit = exam % 10; 
     average += digit; 
     counter_digits++; 
     exam = exam/10; 
    } 

    printf ("%.1f\n", (double) average/counter_digits); 

    return 0; 
} 
+0

«Это работа dosen't» не является хорошим explanation.Include больше деталей, как то, что выход вы получаете –

+0

@CoolGuy ой, извините, спасибо. Я изменю свой ответ – rel1x

+0

первый ответ дает мне правильный ответ? – SMA

ответ

5

Вопрос заключается в том, что вы не в состоянии сбросить переменные в ноль при переходе от одной записи к другой в вашем for цикле. То, что вы должны сделать это:

for (int i = 0; i < 4; i++) { 
    average = 0; 
    counter_digits = 0; 
    ... 
+0

Oh! Да. Спасибо огромное! – rel1x

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