![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Ввод и вывод содержимого структурыСодержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Вывод значений полей структуры осуществляется аналогично переменным с учетом их типа:
printf("Имя: %s\n", manager.name); printf("Возраст: %d\n", manager.age); printf("Зарплата: %g\n", manager.salary);
При вводе необходимо ставить амперсанд:
scanf("%d", & manager.age);
Оператор точка имеет более высокий приоритет, поэтому ставить скобки, т.е. писать &(manager.age) не нужно. К строке manager.name применимы функции gets() и puts():
gets(manager.name); puts(manager.name);
Можно также обратиться к отдельным буквам этой строки:
printf("Имя начинается с буквы %c\n", manager.name[0]);
Вложенные структуры Пусть для каждого сотрудника требуется хранить его адрес, который состоит из нескольких полей: улица (street), номер дома (house) и номер квартиры (flat). В таком случае адрес разумно также представить в виде структуры
struct Address { char street[50]; int house; int flat; };
и одним из полей структуры Worker сделать структуру Address
struct Worker { char name[20]; int age; float salary; Address address; };
Обращение к полям вложенной структуры Address происходит через поля структуры Worker; например, задать адрес сотрудника и вывести его на экран можно так:
strcpy(manager.address.street, "Ленина"); manager.address.house = 10; manager.address.flat = 7;
printf("Улица: %s\n", manager.address.street); printf("Дом: %d\n", manager.addrress.house); printf("Квартира: %d\n",manager.address.flat);
Массив структур Как мы отмечали в самом начале, важной причиной введения структур является желание работать со списком записей. Такой список представляется в виде массива структур. Аналогично обычному массиву, где элементами являются числа или символы, в массиве структур элементами являются структуры. Рассмотрим, как объявляется массив структур, в котором будет храниться информация о сотрудниках.
#define SIZE 5 Worker workers[SIZE];
Значения полям элементов массива структур можно задать при его объявлении, перечислив поля в том порядке, который указан при объявлении структуры:
Worker workers[SIZE] = { {"Андрей", 30, 5000}, {"Светлана", 51, 2000}, {"Дмитрий", 45, 3000}, {"Анна", 28, 4000}, {"Василий", 37, 1000} };
а можно и после объявления:
strcpy(workers[0].name, "Игорь"); workers[0].age = 53; workers[0].salary = 2500;
strcpy(workers[1].name, "Демьян"); workers[1].age = 57; workers[1].salary = 1500;
Причем грамотная группировка элементов выглядит именно так, как показано выше, а не так:
//Неправильная группировка! strcpy(workers[0].name, "Игорь"); strcpy(workers[1].name, "Демьян");
workers[0].age = 53; workers[1].age = 57;
workers[0].salary = 2500; workers[1].salary = 1500;
поскольку структура предполагает группировку разнотипных данных, относящихся к одному объекту, а не группировку данных согласно их типу.
Вывод массива структур в виде таблицы Массив структур удобно выводить в виде таблицы, например, как в телефонной книге, экзаменационной ведомости и т.д. Данная задача, несмотря на свою простоту, имеет некоторые тонкости. Очевидный способ вывода таблицы заключается в том, чтобы выводить содержимое каждой структуры на одной строке, разделяя поля пробелами:
for (int i=0; i<SIZE; i++) { printf("%s ", workers[i].name); printf("%d ", workers[i].age); printf("%g\n", workers[i].salary); }
Такой способ отображает весь массив, но колонки оказываются неровными:
Для ровного вывода следует воспользоваться табуляцией – «\t»
for (int i=0; i<SIZE; i++) { printf("%s \t ", workers[i].name); printf("%d \t ", workers[i].age); printf("%g\n", workers[i].salary); }
Однако и в данном случае могут возникнуть проблемы. Например, если одно из имен слишком длинное:
Хорошим способом решения этой проблемы является использование модификатора количества позиций под переменную:
for (int i=0; i<SIZE; i++) { printf(" %10s \t", workers[i].name); printf("%d\t", workers[i].age); printf("%g\n", workers[i].salary); }
И, наконец, для выравнивания по левому краю существует модификатор «-».
for (int i=0; i<SIZE; i++) { printf ("%-10s \t", workers[i].name); printf("%d\t", workers[i].age); printf("%g\n", workers[i].salary); }
Сортировка массива структур Алгоритмы сортировки применимы к любым объектам, в том числе и к структурам. Рассмотрим особенности, которые нужно учитывать при сортировке массива структур. Во-первых, структуры сортируются по какому-то полю, поэтому сравнение нужно указывать это поле:
if (workers[j] .age < workers[j+1] .age) { … }
Во-вторых, в отличие от строк, структуры можно присваивать друг другу напрямую, поэтому перестановка двух структур выглядит следующим образом:
Worker temp = workers[j]; workers[j] = workers[j+1]; workers[j+1] = temp;
Алгоритм пузырьковой сортировки массива структур выглядит следующим образом:
for (int i=1; i<SIZE; i++) { for (int j=SIZE-2; j>=0; j--) { if (workers[j].age < workers[j+1].age) { worker temp = workers[j]; workers[j]=workers[j+1]; workers[j+1]=temp; } } }
Результат сортировки по возрасту:
|
||||||
Последнее изменение этой страницы: 2016-04-23; просмотров: 716; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.11.25 (0.008 с.) |