Сортировка массива структур по разным полям - C (СИ)

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

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

Имеется массив студентов. Подскажите, пожалуйста, как сортировать их по полю "курс" и полю "фамилия" .
Листинг программы
  1. #include <stdio.h>
  2. struct student
  3. {char surname[20];
  4. char name[10];
  5. char fathername[10];
  6. char pol[1];
  7. int vozrast;
  8. char cyrs[2];};
  9. int main()
  10. {struct student A[5]
  11. printf("Введите информацию о cтудентах\n");
  12. printf("Фамилия имя отчество пол возраст курс\n");
  13. for (i=0;i<5;i++)
  14. {scanf(%s%s%s%s%d%d",&A[i].surname,&A[i].name,&A[i].fathername,&A[i].pol,&A[i].vozrast,&A[i].cyrs;
  15. printf(%s%s%d,&A[i].surname,&A[i].name,&A[i].cyrs)}
Заранее благодарна.

Решение задачи: «Сортировка массива структур по разным полям»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. const int n=3;
  5. struct student
  6. {
  7. char surname[20];
  8. char name[10];
  9. char fathername[10];
  10. char pol[1];
  11. int vozrast;
  12. int cyrs;
  13. };
  14. int cmp(const void * a, const void *b) {
  15.     struct student * pa = (struct student *)a;
  16.     struct student * pb = (struct student *)b;
  17.  
  18.      return ( pa->cyrs == pb->cyrs ) ? pa->surname - pb->surname : pa->cyrs - pb->cyrs;
  19. }
  20. int main()
  21. {
  22. struct student a[n];
  23. for(int i=0;i<n;i++)
  24. {
  25.     scanf("%s%s%s%s%d%d",a[i].surname,a[i].name,a[i].fathername,a[i].pol,&a[i].vozrast,&a[i].cyrs);
  26. }
  27. puts("Ne Otsortirovaniy");
  28.     puts("\n");
  29. for(int i=0;i<n;i++)
  30. {
  31.     printf(" %s %s %s %s %d %d ",a[i].surname,a[i].name,a[i].fathername,a[i].pol,a[i].vozrast,a[i].cyrs);
  32.     puts("\n");
  33. }
  34. qsort(a, n, sizeof(struct student), cmp);
  35. puts("Otsortirovaniy");
  36.     puts("\n");
  37. for(int i=0;i<n;i++)
  38. {
  39.     printf(" %s %s %s %s %d %d ",a[i].surname,a[i].name,a[i].fathername,a[i].pol,a[i].vozrast,a[i].cyrs);
  40.     puts("\n");
  41. }
  42. return 0;
  43. }

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

  1. #include Включает в программу функции для работы с консолью (stdio).
  2. #include Включает в программу функции для работы с клавиатурой и мышью (conio). Сейчас этот заголовочный файл считается устаревшим и удалён в новых версиях C.
  3. #include Включает в программу функции для работы с памятью (stdlib).
  4. const int n=3; Объявляет константу n типа int со значением 3.
  5. struct student Объявляет структуру с именем student.
  6. int cmp(const void a, const void b) Функция сравнения двух структур типа student с использованием операторов строгого сравнения и меньшего оператора. Возвращает значение типа int.
  7. int main() Функция main() является точкой входа в программу.
  8. struct student a[n]; Объявляет массив структур типа student с именем a и размером n.
  9. for(int i=0;i<n;i++) Цикл for для обхода всех элементов массива a.
  10. scanf(%s%s%s%s%d%d,a[i].surname,a[i].name,a[i].fathername,a[i].pol,&a[i].vozrast,&a[i].cyrs); Заполняет поля структуры student с помощью функции scanf().
  11. puts(Ne Otsortirovaniy); Выводит на экран строку Ne Otsortirovaniy.
  12. for(int i=0;i<n;i++) Цикл for для обхода всех элементов массива a.
  13. printf(%s %s %s %s %d %d,a[i].surname,a[i].name,a[i].fathername,a[i].pol,a[i].vozrast,a[i].cyrs); Выводит на экран значения полей структуры student.
  14. puts(\n); Выводит на экран символ новой строки.
  15. qsort(a, n, sizeof(struct student), cmp); Сортирует массив структур a с помощью функции qsort().
  16. puts(Otsortirovaniy); Выводит на экран строку Otsortirovaniy.
  17. for(int i=0;i<n;i++) Цикл for для обхода всех элементов массива a.
  18. printf(%s %s %s %s %d %d,a[i].surname,a[i].name,a[i].fathername,a[i].pol,a[i].vozrast,a[i].cyrs); Выводит на экран значения полей структуры student.
  19. puts(\n); Выводит на экран символ новой строки.
  20. return 0; Возвращает 0, что означает успешное завершение программы.

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы