Описать структуру с именем STUDENT - C (СИ) (79279)

Узнай цену своей работы

Формулировка задачи:

Описать структуру с именем STUDENT, содержащую следующие поля: фамилия и инициалы, номер группы, успеваемость (массив из пяти элементов). Написать программу, выполняющую след.действия: 1.ввод с клавиатуры данных в массив, состоящий их 10 структур типа STUDENT; записи должны быть упорядочены по возрастанию номера группы; 2.вывод на экран фамилий и номеров групп для всех студентов, включенных в массив, если средний бал студента больше 4.0; 3.если таких студентов нет, вывести соответствующее сообщение;

Решение задачи: «Описать структуру с именем STUDENT»

textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
 
#define MAX_LENGTH_NAME     32
#define NDISCIPLINES         5
#define PROGRESS_TRESHOLD   4.0
 
typedef struct student_tag {
    char name[MAX_LENGTH_NAME];
    int group;
    int marks[NDISCIPLINES];
} student_t;
 
#define NSTUDENTS 10
 
int main()
{
    int i;
    int j;
    float avg;
    student_t tmp;
    student_t students[NSTUDENTS];
    
    // ввод данных
    for(i = 0; i < NSTUDENTS; ++i) {
        printf("Введите фамилию и инициалы: ");
        gets(students[i].name);
        
        printf("Введите номер группы: ");
        if(scanf("%d", &students[i].group) != 1) {
            fprintf(stderr, "data reading error\n");
            return EXIT_FAILURE;
        }
        
        printf("Введите оценки:\n");
        for(j = 0; j < NDISCIPLINES; ++j) {
            if(scanf("%d", &students[i].marks[j]) != 1) {
                fprintf(stderr, "data reading error\n");
                return EXIT_FAILURE;
            }
        }
        
        fflush(stdin);
    }
    
    // Сортировка
    for(i = 0; i < NSTUDENTS; ++i) {
        for(j = NSTUDENTS - 1; j >= i; --j) {
            if(students[j].group < students[j-1].group) {
                tmp = students[j];
                students[j] = students[j-1];
                students[j-1] = tmp;
            }
        }
    }
    
    // Вывод с учетом среднего бала
    printf("\nСписок студентов, средний бал у которых выше %f\n", PROGRESS_TRESHOLD);
    for(i = 0; i < NSTUDENTS; ++i) {
        avg = 0;
        for(j = 0; j < NDISCIPLINES; ++j)
            avg += students[i].marks[j];
        
        avg /= NDISCIPLINES;
        
        if(avg > PROGRESS_TRESHOLD) {
            printf("ФИО: %s\nГРУППА: %d\nОЦЕНКИ: ", students[i].name, students[i].group);
            
            for(j = 0; j < NDISCIPLINES; ++j)
                printf("%d, ", students[i].marks[j]);
            printf("\n\n");
        }
    }
}

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

Код представляет собой программу для работы с данными студентов в университете.

  1. Сначала определяются макросы:
    • MAX_LENGTH_NAME - максимальная длина имени студента.
    • NDISCIPLINES - количество дисциплин, по которым оценивается студент.
    • PROGRESS_TRESHOLD - пороговый балл, студенты, у которых средний балл выше этого значения, выводятся на экран.
  2. Затем определяется структура student_t, которая содержит следующие поля:
    • char name[MAX_LENGTH_NAME] - имя студента.
    • int group - номер группы студента.
    • int marks[NDISCIPLINES] - массив оценок студента по дисциплинам.
  3. Далее объявляется переменная NSTUDENTS - количество студентов.
  4. В функции main() происходит следующий процесс:
    • Ввод данных о студентах с помощью функций gets() и scanf(). Имя студента считывается до тех пор, пока не будет введен символ новой строки. Номер группы и оценки по дисциплинам считываются с помощью функции scanf().
    • Выполняется сортировка массива структур student_t по номеру группы с помощью алгоритма сортировки пузырьком.
    • Выводится список студентов, у которых средний балл выше порогового значения. Для каждого студента выводится его имя, номер группы и оценки по дисциплинам, разделенные запятыми. Примечание: в коде не обрабатывается ситуация, когда ввод оценок по одной дисциплине прекращается до ввода оценок по всем дисциплинам. Это может привести к некорректным результатам в дальнейшем.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

5   голосов , оценка 4.2 из 5