Посчитать среднюю оценку для каждого студента - 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 оценками студентов по каждому экзамену.
- Затем код вычисляет среднюю оценку для каждого студента, суммируя все оценки по каждому студенту и деля на общее количество экзаменов.
- Наконец, код выводит результаты на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д