Условие задачи:
Задан массив из 6 данных типа структура. Структура включает: фамилию студента и три оценки. Упорядочить массив структур по возрастанию сумм баллов по всем 3-м дисциплинам.
Решение задачи на языке Си
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
#include <stdio.h> #include <Windows.h> #include <conio.h> // количество элементов в массиве структур #define N 6 // структура, описывающая студента. содержит фамилию и массив из трех оценок struct Student { char lastName[25]; int marks[3]; }; // функция возвращает сумму оценок студента по структуре int getMarksSum(Student student) { return student.marks[0] + student.marks[1] + student.marks[2]; } // функция сортирует массив структур по возрастанию суммы оценок студента void sortAndPrint(Student students[]) { // сортировка пузырьком Student tmp; for (int i = N - 1; i >= 0; i--) { for (int j = 0; j < i; j++) { // сравниваем элементы массива структур по сумме баллов студента if (getMarksSum(students[j]) > getMarksSum(students[j + 1])) { tmp = students[j]; students[j] = students[j + 1]; students[j + 1] = tmp; } } } // в цикле выводим в консоль отсортированный массив структур for (int i = 0; i < N; i++) { printf("%s %d %d %d sum = %d\n", students[i].lastName, students[i].marks[0], students[i].marks[1], students[i].marks[2], getMarksSum(students[i])); } } int main() { // включаем русский язык в консоли Си SetConsoleCP(1251); // установка кодовой страницы win-cp 1251 в поток ввода SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода // создаем массив структур из N элементов Student students[N]; // читаем данные для массива из консоли for (int i = 0; i < N; i++) { printf("Input the last name[%d]: ", i + 1); gets_s(students[i].lastName); printf("Input his mark[1]: "); scanf_s("%d", &students[i].marks[0]); printf("Input his mark[2]: "); scanf_s("%d", &students[i].marks[1]); printf("Input his mark[3]: "); scanf_s("%d", &students[i].marks[2]); getchar(); } printf("\n"); // сортируем массив структур и выводим его в консоль sortAndPrint(students); } |
В программе использована сортировка пузырьком.
Демонстрация работы программы
Поделиться в соц. сетях:
Подскажите, а если количество оценок разное у каждого студента, то как можно сделать в этом случае?
Массив с оценками должен быть большего размера (если статический), либо вообще динамический. Также в структуру стоит добавить целое число — длину данного массива с оценками. И в функции getMarksSum находить сумму оценок с помощью цикла. Ввод оценок также, естественно, нужно переосмыслить.