Распечатать данные студентов, получивших в сессию все оценки "5" - C (СИ)
Формулировка задачи:
Задача.
Вывести информацию о K студентах группы. Информация содержит ФИО студента, год рождения, четыре оценки за экзамены последней сессии. Распечатать данные студентов, получивших в сессию все оценки "5"
Решение задачи: «Распечатать данные студентов, получивших в сессию все оценки "5"»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #define MAX_NAME 16 #define MAX_SURNAME 16 #define MAX_GIVENAME 16 struct Date{ int Day ; int Month; int Year ; }; struct StudentInfo{ char Name [MAX_NAME ]; char Surname [MAX_NAME ]; char Givename [MAX_GIVENAME]; Date DateOfBorn ; int Mark1 ; int Mark2 ; int Mark3 ; int Mark4 ; }; int main() { int student_count = 0 ; StudentInfo* student_arr = NULL; int i ; printf("Students count: "); scanf("%d", &student_count); while(student_count < 1){ printf("Student count must be more then unit. Retry input: "); scanf("%d", &student_count); } student_arr = (StudentInfo*)malloc(sizeof(StudentInfo)*student_count); if(student_arr == NULL){ printf("Memory error. Exit..."); system("pause"); return 1; } for(i = 0; i < student_count; ++i){ printf("***Student #%i***\n", i + 1); printf("Surname: "); scanf("%s", student_arr[i].Surname); printf("Name: "); scanf("%s", student_arr[i].Name); printf("Givenname: "); scanf("%s", student_arr[i].Givename); printf("Date of birth (dd/mm/yyyy): "); scanf("%d/%d/%d", &student_arr[i].DateOfBorn.Day, &student_arr[i].DateOfBorn.Month, &student_arr[i].DateOfBorn.Year); printf("Mark 1: "); scanf("%d", &student_arr[i].Mark1); printf("Mark 2: "); scanf("%d", &student_arr[i].Mark2); printf("Mark 3: "); scanf("%d", &student_arr[i].Mark3); printf("Mark 4: "); scanf("%d", &student_arr[i].Mark4); } printf("***Students honours pupils***\n"); for(i = 0; i < student_count; ++i) if(student_arr[i].Mark1 == 5 && student_arr[i].Mark2 == 5 && student_arr[i].Mark3 == 5 && student_arr[i].Mark4 == 5){ printf("***Student #%i***\n", i + 1); printf("Surname: %s\n" , student_arr[i].Surname ); printf("Name: %s\n" , student_arr[i].Name ); printf("Givenname: %s\n", student_arr[i].Givename); printf("Date of birth: %d/%d/%d\n" , student_arr[i].DateOfBorn.Day, student_arr[i].DateOfBorn.Month, student_arr[i].DateOfBorn.Year); } free(student_arr); system("pause"); }
Объяснение кода листинга программы
- Подключаются необходимые библиотеки: stdio.h и stdlib.h.
- Определяются макросы MAX_NAME, MAX_SURNAME и MAX_GIVENAME, которые определяют максимальную длину полей структуры StudentInfo.
- Создается структура Date, которая содержит поля Day, Month и Year для хранения даты рождения студента.
- Создается структура StudentInfo, которая содержит поля Name, Surname, Givename, DateOfBorn и Mark1, Mark2, Mark3, Mark4 для хранения информации о студенте.
- В функции main() инициализируется переменная student_count, которая будет хранить количество студентов.
- С помощью функции scanf() считывается значение student_count.
- Создается пустой массив student_arr типа StudentInfo*.
- С помощью цикла while проверяется корректность введенного значения student_count. Если оно меньше 1, то пользователю предлагается ввести корректное значение.
- Выделяется память под массив student_arr с помощью функции malloc().
- В цикле for считываются данные о каждом студенте: фамилия, имя, отчество, дата рождения и оценки.
- В конце программы выводится список студентов, получивших все оценки
5
. - Выделяется память под массив student_arr с помощью функции free().
- Программа завершается с помощью команды system(
pause
).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д