Как рассчитать несколько средних, используя вложенный цикл for? - PullRequest
0 голосов
/ 11 марта 2019

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

#include <stdio.h>

int main(void)

{

    int ctr = 0, i, mark, grades, s, students;
    float average, gradeTotal = 0, mark;

    printf("how many students?\n");
    scanf("%i", &students);

    for (s = 1; s <= students; s++)
    {
        printf("Enter number of grades:\n");
        scanf("%f", &grades);

        for (i = 1; i <= grades; i++)
        {
            printf("enter mark: \n");
            scanf("%i", &mark);

            gradeTotal += mark;
        }
        average = gradeTotal/grades;
        printf("The average is %.2f\n", average);
    }

    return(0);
}

1 Ответ

0 голосов
/ 11 марта 2019

Простое решение заключается в повторной инициализации gradeTotal в ноль в начале внешнего цикла.

Без этого gradeTotal будет сохранять промежуточную сумму для всех студентов, поэтому напечатанное значение будет такой, что промежуточная сумма для текущих студентов И всех предыдущих студентов, деленная на grades, тогда как вы хотите получить среднее значение для КАЖДОГО студента .

Вы можете также рассмотреть возможность ограничения области действия переменных. Например, определение Инициализация gradeTotal во внешнем цикле (а не определение его вне цикла) предотвратит любую вероятность случайного неправильного использования его значений между итерациями цикла, как у вас. Как правило, лучше определять переменные в наименьшей возможной области видимости, поскольку это помогает устранить такие проблемы, как забвение повторной инициализации и предотвращение случайного использования в другом коде. mark и i не нужны вне внутреннего цикла. s, grades, gradeTotal и average не нужны вне внешнего цикла. ctr вообще не нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...