Массив типа "запись" - C (СИ)
Формулировка задачи:
Известны оценки каждого из 22 учеников класса по четырем предметам. Определить фамилию одного из учеников, имеющих максимальную сумму оценок.
Помогите в си,пожалйста
Решение задачи: «Массив типа "запись"»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define FMSIZE 15 #define PEOPLE 22 typedef struct { char family[FMSIZE]; int subject1; int subject2; int subject3; int subject4; }Student; //Заполним данные группы void getData(Student group[], const int people, const int fmsize); //Определим "суммы" оценок каждого "студента" void getTotl(const Student group[], int total[], const int people); //Отобразить сведения о всех (фамилия, сумма оценок) void showAll(const Student group[], const int total[], const int people); //"Звездочки" void charLine(void); //Определим одного из "студентов" имеющих "высший балл" int getBest(const int total[], const int people); //Выведем данные об "объекте" void showBest(const Student group[], const int total[], const int bestStud); int main() { int bestStud; int total[PEOPLE]; Student group[PEOPLE]; srand(time(NULL)); getData(group, PEOPLE, FMSIZE); getTotl(group, total, PEOPLE); showAll(group, total, PEOPLE); bestStud = getBest(total, PEOPLE); showBest(group, total, bestStud); getchar(); return 0; } //Заполним данные группы void getData(Student group[], const int people, const int fmsize) { int i; char tempFamily[] = "Afamily"; for(i = 0; i < people; ++i) { strncpy(group[i].family, tempFamily, fmsize); group[i].subject1 = (int)rand()%5 + 1; group[i].subject2 = (int)rand()%5 + 1; group[i].subject3 = (int)rand()%5 + 1; group[i].subject4 = (int)rand()%5 + 1; //Изменить "Префикс" фамилии: (A)family, (B)family, (C)family tempFamily[0]++; } } //Определим "суммы" оценок каждого "студента" void getTotl(const Student group[], int total[], const int people) { int i; for(i = 0; i < people; ++i) { total[i] = group[i].subject1 + group[i].subject2 + group[i].subject3 + group[i].subject4; } } //Показать сведения о всех (фамилия, сумма оценок) void showAll(const Student group[], const int total[], const int people) { int i; printf("%-25s%s\n", "Student Family", "Total Score"); charLine(); for(i = 0; i < people; ++i) { printf("%-25s%2d\n", group[i].family, total[i]); } charLine(); } //"Звездочки" void charLine(void) { int i; for(i = 0; i < 30; ++i) { putchar('*'); } putchar('\n'); } //Определим одного из "студентов" имеющего "высший балл" int getBest(const int total[], const int people) { int i, index, tempTotal; tempTotal = total[0]; index = 0; for(i = 0; i < people; ++i) { if(total[i] > tempTotal) { tempTotal = total[i]; index = i; } } return index; } //Выведем данные об "объекте" void showBest(const Student group[], const int total[], const int bestStud) { printf("One of the best student\n"); printf("%-25s%2d\n", group[bestStud].family, total[bestStud]); charLine(); }
Объяснение кода листинга программы
- В этом коде определен массив типа
запись
с именемStudent
, который содержит поля для фамилии студента и оценок по четырем предметам. - Функция
getData
заполняет этот массив случайными данными. - Функция
getTotl
вычисляет сумму оценок для каждого студента и сохраняет эти значения в отдельном массивеtotal
. - Функция
showAll
выводит на экран фамилию каждого студента и сумму его оценок. - Функция
charLine
выводит на экран строку из звездочек для украшения таблицы. - Функция
getBest
находит студента с наибольшей суммой оценок и возвращает его индекс. - Функция
showBest
выводит на экран данные о лучшем студенте. - В функции
main
создается массивgroup
иtotal
, заполняются данными, вычисляются суммы оценок и выводится на экран таблица с оценками всех студентов и лучшим студентом. - Код использует функцию
srand
для инициализации генератора случайных чисел, чтобы каждый раз получать разные случайные оценки. - Код использует функцию
printf
для вывода текста и значений переменных на экран. - Код использует функцию
getchar
для ожидания нажатия клавиши после вывода последнего значения на экран. - Код возвращает 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д