Выполнить сортировку массива - 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.