Массив типа "запись" - 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();
}

Объяснение кода листинга программы

  1. В этом коде определен массив типа запись с именем Student, который содержит поля для фамилии студента и оценок по четырем предметам.
  2. Функция getData заполняет этот массив случайными данными.
  3. Функция getTotl вычисляет сумму оценок для каждого студента и сохраняет эти значения в отдельном массиве total.
  4. Функция showAll выводит на экран фамилию каждого студента и сумму его оценок.
  5. Функция charLine выводит на экран строку из звездочек для украшения таблицы.
  6. Функция getBest находит студента с наибольшей суммой оценок и возвращает его индекс.
  7. Функция showBest выводит на экран данные о лучшем студенте.
  8. В функции main создается массив group и total, заполняются данными, вычисляются суммы оценок и выводится на экран таблица с оценками всех студентов и лучшим студентом.
  9. Код использует функцию srand для инициализации генератора случайных чисел, чтобы каждый раз получать разные случайные оценки.
  10. Код использует функцию printf для вывода текста и значений переменных на экран.
  11. Код использует функцию getchar для ожидания нажатия клавиши после вывода последнего значения на экран.
  12. Код возвращает 0, чтобы указать, что программа успешно завершилась.

Оцени полезность:

11   голосов , оценка 4.364 из 5
Похожие ответы