Посчитать среднюю оценку для каждого студента - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, нужна помощь в решении проблемы... Дана задача: есть 8 студентов, ими сдано 4 экзамена. Посчитать среднюю оценку для каждого студента, а также найти лучшую и худшую оценки среди всех студентов. Программу написал, но нужно изменить программу так, чтобы использовался составной тип данных (структура) и массив с элементами этого составного типа.
#include <stdio.h> 
 
#define students 8 //Число студентов
#define exams 4 // Число экзаменов/рейтингов
 
int minimum (int [] [exams], int, int);
int maximum (int [] [exams], int, int);
float average (int [], int);
void printArray ( int [] [exams], int, int);
 
int main()
{
    int student,
    studentGrades [students][exams]; // Объявление массива
 
        for(int i = 0; i < students; i++)
    {
        for(int j = 0; j < exams; j++)
        {
            printf("Input %i %i:\n", i, j);
            scanf("%i", &studentGrades[i][j]); 
        }
    }
 
    printf ("Array:\n");
    printArray ( studentGrades, students, exams );
    printf ("\n\nThe worst grade: %d\nThe best grade: %d\n",
    minimum ( studentGrades, students, exams ),
    maximum ( studentGrades, students, exams ));
 
    for ( student = 0; student < students; student++ )
        printf ( "Average grade of the student %d is equal %.2f\n",
                student, average ( studentGrades [student], exams ) );
 
    int d;
    scanf("%i", &d);
    return 0;
}
 
//Поиск минимальной оценки
int minimum ( int grades[] [exams], int pupils, int tests )
{
    int i, j, lowGrade = 100;
 
    for ( i = 0; i < pupils; i++ )
 
        for ( j = 0; j < tests; j++ )
 
            if ( grades[i][j] < lowGrade )
                lowGrade = grades[i][j];
 
    return lowGrade;
}
 
//Поиск максимальной оценки
int maximum ( int grades[] [exams], int pupils, int tests )
{
    int i, j, highGrade = 0;
 
    for ( i = 0; i < pupils; i++ )
        for ( j = 0; j < tests; j++ )
            if ( grades[i][j] > highGrade )
                highGrade = grades[i][j];
 
    return highGrade;
}
 
//Определение средней оценки для каждого студента
float average ( int setOfGrades [], int tests)
{
    int i, total = 0;
 
    for ( i = 0; i < tests; i++)
        total +=setOfGrades[i];
 
    return (float) (total) / tests;
}
 
//Вывод массива
void printArray( int grades[] [exams], int pupils, int tests)
{
    int i, j;
 
    printf ("Exam N\t\t\t  [0]  [1]  [2]  [3]");
 
    for ( i = 0; i < pupils; i++) {
        printf ("\nGrades of the student [%d] ", i);
 
        for ( j = 0; j < tests; j++ )
            printf ("%-5d", grades[i][j]);
    }
}
Начал переделывать, но что-то не получается совсем...
#include <stdio.h> 
 
#define students 8 //Число студентов
#define exams 4 // Число экзаменов/рейтингов
 
int minimum (int [] [exams], int, int);
int maximum (int [] [exams], int, int);
float average (int [], int);
void printArray ( int [] [exams], int, int);
 
struct student0
{
    int id;
    int exam[exams];
};
 
int main()
{
        student0 s[students];
 
        for(int i = 0; i < students; i++)
    {
        for(int j = 0; j < exams; j++)
        {
            printf("Input %i %i:\n", i, j);
            scanf("%i", &studentGrades[i][j]); 
        }
    }
 
    printf ("Array:\n");
    printArray ( s, students, exams );
    printf ("\n\nThe worst grade: %d\nThe best grade: %d\n",
    minimum ( s, students, exams ),
    maximum ( s, students, exams ));
 
    for ( student = 0; student < students; student++ )
        printf ( "Average grade of the student %d is equal %.2f\n",
                student, average ( studentGrades [student], exams ) ); // ***Вот тут как изменить?***
 
    int d;
    scanf("%i", &d);
    return 0;
}
 
//Поиск минимальной оценки
int minimum ( student0 s[] [exams], int pupils, int tests )
{
    int i, j, lowGrade = 100;
 
    for ( i = 0; i < pupils; i++ )
 
        for ( j = 0; j < tests; j++ )
            if (s[i].exam[j] < lowGrade )
            if ( s[i].exam[j] < lowGrade )
                lowGrade = s[i].exam[j];
 
    return lowGrade;
}
 
//Поиск максимальной оценки
int maximum ( student0 s[] [exams], int pupils, int tests )
{
    int i, j, highGrade = 0;
 
    for ( i = 0; i < pupils; i++ )
        for ( j = 0; j <tests; j++ )
            if ( s[i].exam[j] > highGrade )
                highGrade = s[i].exam[j];
 
    return highGrade;
}
 
//Определение средней оценки для каждого студента
float average ( student0 s, int tests)
{
    int i, total = 0;
 
    for ( i = 0; i < tests; i++)
        total +=s.exam[i];
 
    return (float) (total) / tests;
}
 
//Вывод массива
void printArray(student0 s, int pupils, int tests)
{
    int i, j;
 
    printf ("Exam N\t\t\t  [0]  [1]  [2]  [3]");
 
    for ( i = 0; i < pupils; i++) {
        printf ("\nGrades of the student [%d] ", i);
 
        for ( j = 0; j < tests; j++ )
            printf ("%-5d", s[i].exam[j]);
    }
}

Решение задачи: «Посчитать среднюю оценку для каждого студента»

textual
Листинг программы
studentGrades [students][exams]; // Объявление массива

Объяснение кода листинга программы

  1. В этом коде объявляется массив studentGrades, который представляет собой двухмерный массив, где первый индекс относится к студентам, а второй индекс относится к экзаменам.
  2. Каждый элемент массива studentGrades содержит оценку студента по определенному экзамену.
  3. Переменная students указывает количество студентов.
  4. Переменная exams указывает количество экзаменов.
  5. Код затем заполняет массив studentGrades оценками студентов по каждому экзамену.
  6. Затем код вычисляет среднюю оценку для каждого студента, суммируя все оценки по каждому студенту и деля на общее количество экзаменов.
  7. Наконец, код выводит результаты на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.2 из 5
Похожие ответы