Посчитать среднюю оценку для каждого студента - 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]; // Объявление массива
Объяснение кода листинга программы
- В этом коде объявляется массив studentGrades, который представляет собой двухмерный массив, где первый индекс относится к студентам, а второй индекс относится к экзаменам.
- Каждый элемент массива studentGrades содержит оценку студента по определенному экзамену.
- Переменная students указывает количество студентов.
- Переменная exams указывает количество экзаменов.
- Код затем заполняет массив studentGrades оценками студентов по каждому экзамену.
- Затем код вычисляет среднюю оценку для каждого студента, суммируя все оценки по каждому студенту и деля на общее количество экзаменов.
- Наконец, код выводит результаты на экран.