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