Описать структуру с именем 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"); } } }
Объяснение кода листинга программы
Код представляет собой программу для работы с данными студентов в университете.
- Сначала определяются макросы:
MAX_LENGTH_NAME
- максимальная длина имени студента.NDISCIPLINES
- количество дисциплин, по которым оценивается студент.PROGRESS_TRESHOLD
- пороговый балл, студенты, у которых средний балл выше этого значения, выводятся на экран.
- Затем определяется структура
student_t
, которая содержит следующие поля:char name[MAX_LENGTH_NAME]
- имя студента.int group
- номер группы студента.int marks[NDISCIPLINES]
- массив оценок студента по дисциплинам.
- Далее объявляется переменная
NSTUDENTS
- количество студентов. - В функции
main()
происходит следующий процесс:- Ввод данных о студентах с помощью функций
gets()
иscanf()
. Имя студента считывается до тех пор, пока не будет введен символ новой строки. Номер группы и оценки по дисциплинам считываются с помощью функцииscanf()
. - Выполняется сортировка массива структур
student_t
по номеру группы с помощью алгоритма сортировки пузырьком. - Выводится список студентов, у которых средний балл выше порогового значения. Для каждого студента выводится его имя, номер группы и оценки по дисциплинам, разделенные запятыми. Примечание: в коде не обрабатывается ситуация, когда ввод оценок по одной дисциплине прекращается до ввода оценок по всем дисциплинам. Это может привести к некорректным результатам в дальнейшем.
- Ввод данных о студентах с помощью функций
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д