Распечатать данные студентов, получивших в сессию все оценки "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");
}

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

  1. Подключаются необходимые библиотеки: stdio.h и stdlib.h.
  2. Определяются макросы MAX_NAME, MAX_SURNAME и MAX_GIVENAME, которые определяют максимальную длину полей структуры StudentInfo.
  3. Создается структура Date, которая содержит поля Day, Month и Year для хранения даты рождения студента.
  4. Создается структура StudentInfo, которая содержит поля Name, Surname, Givename, DateOfBorn и Mark1, Mark2, Mark3, Mark4 для хранения информации о студенте.
  5. В функции main() инициализируется переменная student_count, которая будет хранить количество студентов.
  6. С помощью функции scanf() считывается значение student_count.
  7. Создается пустой массив student_arr типа StudentInfo*.
  8. С помощью цикла while проверяется корректность введенного значения student_count. Если оно меньше 1, то пользователю предлагается ввести корректное значение.
  9. Выделяется память под массив student_arr с помощью функции malloc().
  10. В цикле for считываются данные о каждом студенте: фамилия, имя, отчество, дата рождения и оценки.
  11. В конце программы выводится список студентов, получивших все оценки 5.
  12. Выделяется память под массив student_arr с помощью функции free().
  13. Программа завершается с помощью команды system(pause).

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


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

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

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