Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 711; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.227.48.131 (0.01 с.) |