Вывести список на экран, упорядочив по длине текста сообщений в порядке убывания - C (СИ)
Формулировка задачи:
Вложение 772475
Вложение 772476
Вложение 772477
Решение задачи: «Вывести список на экран, упорядочив по длине текста сообщений в порядке убывания»
textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
#include <time.h>
#include <string.h>
#define MAX 60
struct spis
{
int adr;
char msg[MAX];
int data;
int sz;
};
int main()
{
setlocale(LC_ALL,"rus");
int n,i,j;
puts("Введите размер списка:");
scanf("%d",&n);
struct spis masstr[n],temp;
puts("Теперь обработаем массив:");
for(i=0;i<n;i++) //в этом цикле заполняем массив структур
{
printf("Введите адрес в %d структуре:",i+1);
scanf("%d",&masstr[i].adr);
printf("Введите сообщение в %d структуре:",i+1);
scanf("%s",&masstr[i].msg);
printf("Введите дату в %d структуре:",i+1);
scanf("%d",&masstr[i].data);
masstr[i].sz=strlen(masstr[i].msg);
}
for( i = 0; i < n - 1; i++) //классическая сортировка по убыванию
{
for( j = i + 1; j < n; j++)
{
if (masstr[i].sz < masstr[j].sz)
{
temp = masstr[i];
masstr[i] = masstr[j];
masstr[j] = temp;
}
}
}
for( i = 0; i < n; i++) //выводим
{
printf("адрес - %d\nсообщение -%s\nдата - %d\n\n\n",masstr[i].adr,masstr[i].msg,masstr[i].data);
}
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
- stdlib.h для работы с массивами и сортировкой
- printf.h для использования функции printf
- string.h для работы со строками
- time.h для работы со временем
- locale.h для установки локали
- scanf.h для работы с функцией scanf
- Определяем структуру:
- Создаем структуру spis, которая содержит поля: адрес, сообщение, дата и размер сообщения
- Ввод данных:
- Задаем размер списка
- Заполняем массив структур с помощью scanf
- Сортировка списка:
- Используем классический алгоритм сортировки пузырьком для сортировки списка по убыванию длины сообщений
- Вывод отсортированного списка:
- Выводим отсортированный список на экран с помощью printf
- Завершение программы:
- Возвращаем 0, чтобы указать, что программа успешно завершилась