Сортировка телефонного списка по алфавиту с использованием структур - C (СИ)
Формулировка задачи:
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct person_t {
- char * name;
- int phone;
- } person_t;
- int namecmp(const void* a, const void* b);
- int phonecmp(const void* a, const void* b);
- int main(void)
- {
- char name[1000];
- person_t *base;
- int n, i, phone;
- scanf("%d", &n);
- base = malloc(n * sizeof(person_t));
- /* Считываем телефонную базу */
- for(i = 0 ; i < n ; i++)
- {
- scanf("%s%d", name, &phone);
- /* Выделяем память под массив base[i].name,
- учитывая символ конца строки */
- base[i].name = malloc((strlen(name)+1) * sizeof(char));
- strcpy(base[i].name, name);
- base[i].phone = phone;
- }
- qsort(base, n, sizeof(person_t), namecmp);
- /* Напечатаем в алфавитном порядке */
- for(i = 0 ; i < n ; i++)
- {
- printf("%20s %d\n", base[i].name, base[i].phone);
- }
- qsort(base, n, sizeof(person_t), phonecmp);
- /* Напечатаем в порядке возрастания номеров*/
- for(i = 0 ; i < n ; i++)
- {
- printf("%20s %d\n", base[i].name, base[i].phone);
- }
- /* Освобождаем выделенную память */
- for(i = 0 ; i < n ; i++)
- {
- free(base[i].name);
- }
- free(base);
- return 0;
- }
- int namecmp(const void* a, const void* b)
- {
- person_t *pa = a;
- person_t *pb = b;
- return strcmp(pa->name, pb->name);
- }
- int phonecmp(const void* a, const void* b)
- {
- person_t *pa = a;
- person_t *pb = b;
- return pa->phone - pb->phone;
- }
Да, программа сортировки телефонного списка по алфавиту с использованием структур
Решение задачи: «Сортировка телефонного списка по алфавиту с использованием структур»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct person_t {
- char * name;
- int phone;
- } person_t;
- int namecmp(const void* a, const void* b);
- int phonecmp(const void* a, const void* b);
- int main(void)
- {
- char name[1000];
- person_t *base;
- int n, i, phone;
- scanf("%d", &n);
- base = malloc(n * sizeof(person_t));
- /* Считываем телефонную базу */
- for(i = 0 ; i < n ; i++)
- {
- scanf("%s%d", name, &phone);
- /* Выделяем память под массив base[i].name,
- учитывая символ конца строки */
- base[i].name = malloc((strlen(name)+1) * sizeof(char));
- strcpy(base[i].name, name);
- base[i].phone = phone;
- }
- qsort(base, n, sizeof(person_t), namecmp);
- /* Напечатаем в алфавитном порядке */
- for(i = 0 ; i < n ; i++)
- {
- printf("%20s %d\n", base[i].name, base[i].phone);
- }
- qsort(base, n, sizeof(person_t), phonecmp);
- /* Напечатаем в порядке возрастания номеров*/
- for(i = 0 ; i < n ; i++)
- {
- printf("%20s %d\n", base[i].name, base[i].phone);
- }
- /* Освобождаем выделенную память */
- for(i = 0 ; i < n ; i++)
- {
- free(base[i].name);
- }
- // free(base);
- return 0;
- }
- int namecmp(const void* a, const void* b)
- {
- person_t *pa = (person_t*)a;
- person_t *pb = (person_t*)b;
- return strcmp(pa->name, pb->name);
- }
- int phonecmp(const void* a, const void* b)
- {
- person_t *pa = (person_t*)a;
- person_t *pb = (person_t*)b;
- return pa->phone - pb->phone;
- }
Объяснение кода листинга программы
В этом коде используется язык программирования C для сортировки телефонного списка по алфавиту и номеру телефона. Список переменных и их значения:
- n - переменная для хранения количества элементов в списке телефонных номеров.
- i, j - индексы для прохода по списку.
- name - массив для хранения имени.
- phone - переменная для хранения номера телефона.
- base - динамический массив для хранения структуры person_t.
- person_t - структура для хранения имени и номера телефона.
- namecmp, phonecmp - функции сравнения для сортировки по имени и номеру телефона соответственно. Код выполняет следующие действия:
- Запрашивает у пользователя количество элементов в списке.
- Выделяет память под список структур person_t.
- Считывает данные о имени и номере телефона для каждого элемента списка.
- Сортирует список по имени с помощью функции qsort и функции сравнения namecmp.
- Выводит отсортированный список на экран.
- Сортирует список по номеру телефона с помощью функции qsort и функции сравнения phonecmp.
- Выводит отсортированный список на экран.
- Освобождает выделенную память. Пользователь может добавить, изменить или удалить элементы списка, используя функции malloc и free для динамического выделения памяти.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д