Выполнить сортировку массива - C (СИ)
Формулировка задачи:
Дали задание написать программу, используя массив указателей на структуры и динамическое выделение памяти(с помощью malloc). Выполнить сортировку массива(необходимо описать дополнительный указатель на структуру)
Вроде все работает правильно, но может есть какие-то недочеты.
void n4_2() { struct TStructure { char Name[50]; int CountGames; int Points; int Fund; }; struct TStructure *s; struct TStructure u_s; s = malloc(3 * sizeof(struct TStructure)); printf("%s\n", "Ввод данных"); for (int i = 0; i < 3; i++) { printf("%d команда\n", i + 1); printf("Название команды\n"); scanf("%s", &s[i].Name); printf("Игры\n"); scanf("%d", &s[i].CountGames); printf("Очки\n"); scanf("%d", &s[i].Points); printf("Призовой фонд\n"); scanf("%d", &s[i].Fund); } for (int i = 0; i < 2; i++) for (int j = i+1; j < 3; j++) { if (s[i].Fund > s[j].Fund) { u_s = s[i]; s[i] = s[j]; s[j] = u_s; } } printf("%s\n", "Вывод отсортированных данных по призовому фонду"); for (int i = 0; i < 3; i++) { printf("%d команда\n", i + 1); printf(" Название команды: %s\n", s[i].Name); printf(" Игры: %d\n", s[i].CountGames); printf(" Очки: %d\n", s[i].Points); printf(" Призовой фонд: %d\n", s[i].Fund); } free(s); }
Решение задачи: «Выполнить сортировку массива»
textual
Листинг программы
#include <malloc.h> #include <locale.h> int main(int argc, char** argv) { setlocale( LC_ALL,"Russian" ); struct TStructure { char Name[50]; int CountGames; int Points; int Fund; }; struct TStructure **s; struct TStructure *u_s; s = (struct TStructure**) malloc(3 * sizeof(struct TStructure*)); printf("%s\n", "Ввод данных"); for (int i = 0; i < 3; i++) { s[i] = (struct TStructure*) malloc(sizeof(struct TStructure)); printf("%d команда\n", i + 1); printf("Название команды\n"); scanf("%s", &s[i]->Name); printf("Игры\n"); scanf("%d", &s[i]->CountGames); printf("Очки\n"); scanf("%d", &s[i]->Points); printf("Призовой фонд\n"); scanf("%d", &s[i]->Fund); } for (int i = 0; i < 2; i++) for (int j = i+1; j < 3; j++) { if (s[i]->Fund > s[j]->Fund) { u_s = s[i]; s[i] = s[j]; s[j] = u_s; } } printf("%s\n", "Вывод отсортированных данных по призовому фонду"); for (int i = 0; i < 3; i++) { printf("%d команда\n", i + 1); printf(" Название команды: %s\n", s[i]->Name); printf(" Игры: %d\n", s[i]->CountGames); printf(" Очки: %d\n", s[i]->Points); printf(" Призовой фонд: %d\n", s[i]->Fund); free(s[i]); } free(s); }
Объяснение кода листинга программы
Код выполняет следующие действия:
- Устанавливает локальную среду на русский язык.
- Определяет структуру данных под названием
TStructure
, которая содержит поля:Name
типаchar
с длиной 50 символов,CountGames
,Points
иFund
типаint
. - Максимально выделяет память под массив структур TStructure размером 3 элемента с помощью функции
malloc
. - Выводит приглашение для ввода данных.
- Заполняет массив структур TStructure данными, введенными пользователем, с помощью функции
scanf
. - Сортирует массив структур TStructure по полю
Fund
с помощью циклаfor
и условного оператораif
. - Выводит отсортированные данные на экран с помощью цикла
for
и функцииprintf
. - Освобождает память, выделенную под каждый элемент массива структур TStructure, с помощью функции
free
. - Освобождает память, выделенную под массив указателей на структуры TStructure, с помощью функции
free
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д