- •1. Краткие теоретические сведения
- •1.1. Понятие структуры
- •1.2. Определение (описание) шаблона структуры
- •1.3. Описатель типа
- •1.4. Объявление переменных структурного типа
- •1.5. Инициализация переменной структурного типа
- •1.6. Операции со структурами
- •1.7. Доступ к значениям полей структурного типа
- •1.8. Вложенные структурные типы
- •1.9. Массивы структурного типа
- •1.10. Структурные переменные и указатели
- •1.11. Структуры и функции
- •1.11. Использование синонима типа
- •1.12. Доступ к отдельному биту
- •1.13.Типичные ошибки при разработке структур
- •1.14. Примеры программирования задач на структуры
- •2. Задание
- •2.4. Задания для выполнения на занятиях
- •2.4.1. Задание 1. Вычисление с использованием структур
- •2.4.1.1. Условие задания
- •2.4.1.2. Пример для варианта 30
- •2.4.1.3. Программа
- •2.4.1.4. Тестирование
- •2.4.2. Задание 2. Массив структур
- •2.4.2.1. Условие задания
- •2.4.2.2. Пример выполнения работы
- •2.4.2.3. Программа
- •2.4.2.4. Тестирование
- •2.4.3. Задание 3. Структуры данных
- •2.4.3.1. Условие задания
- •2.4.3.2. Пример для варианта 30
- •2.4.3.3. Программа
- •2.4.3.4. Тестирование
- •2.4.4. Задание 4. Структуры данных
- •2.4.4.1. Условие задания
- •2.4.4.2. Пример для варианта 31
- •2.4.4.3. Программа
- •2.4.4.4. Тестирование
- •2.4.5. Задание 5. Создание и обработка структур
- •2.4.5.1. Условие задания
- •2.4.6.2. Пример для варианта 30
- •2.4.7.2. Пример для варианта 30
- •2.4.7.3. Программа
- •2.4.7.4. Тестирование
- •3. Выводы
- •4. Требование к отчету
- •4. Краткие теоретические сведения.
- •5. Вопросы для самоконтроля
- •Литература
- •1. Краткие теоретические сведения 2
- •1.1. Понятие структуры 2
1.5. Инициализация переменной структурного типа
Переменную структурного типа можно инициализировать одновременно с объявлением. Инициализация переменной структурного типа производится, если после имени типа следуют знак "=" и список значений полей структурного типа в фигурных скобках, разделенных запятой.
Пример 14.3
Инициализация структуры, содержащей информацию о музыкальной коллекции на CD:
struct cd_info
{ char titlel[25]; // название CD
char artist[20]; // исполнитель
int num_songs; // число песен
float price; // стоимость CD
char date_bought[8]; // дата покупки
};
cd_info cd={"Red Moon Men",
"Sam and the Snuds",
12,
11.95,
"02.13.12"};
Значения переменным-полям присваиваются в порядке их объявления при определении структурного типа.
Можно совмещать описание шаблона структуры и структурной переменной в одном предложении. Разрешается выполнять инициализацию полей структурной переменной при ее описании. Для инициализации структурной переменной значения ее полей перечисляются в фигурных скобках в порядке, соответствующему описанию полей.
Пример 14.33
Пример совмещения описания шаблона, описания структурных переменных и инициализации полей переменный в одном предложении:
struct Student // Описание шаблона структуры
{ char *fio; // Фамилия - указатель на char
char Adress[40]; // Адрес - строка
int Age; // Возраст-год рождения - целое
int oc[4]; // Оценки - целочис. массив
float sr; // Средний балл - вещественное
}
S, S1, // Описание переменных S,S1,S2
S2={ "Иванов", // и инициализация полей S2
"г. Москва, ул Цветочная, д.1, кв.43 ",
1991,
{4,3,5,4,5}, //Инициализация поля - массива (int oc[4]; )
0
};
Внешние и статические структуры можно инициировать, помещая следом за определением список начальных значений элементов:
struct anketa a0={ 1024, "Макагон В.М", "10.01.1943",0 , "Москва, Жукова, 23/99", 175.00};
Каждой структурной переменной в нашем случае могут быть присвоены шесть значений, имеющих соответствующие базовые типы.
Ниже определена и инициализирована переменная структура mag.
magazin mag = {"Nature", 3, 1995);
1.6. Операции со структурами
Действия над структурами, в общем, ограничены.
Над структурами возможны следующие операции:
- присваивание значений одной структурной переменной другой структурной переменной, при этом обе переменные должны иметь один и тот же тип;
- получение адреса переменной с помощью операции &;
- осуществление доступа к членам структуры.
–передавать в виде параметров функции, возвращать в виде результата функции.
Для переменных одного и того же структурного типа определена операция присваивания. Например, можно записать
s1=s2;
при условии, что s1, s2 – переменные одного структурного типа созданы на базе одного шаблона student.
При этом происходит поэлементное копирование значений соответствующих полей.
После такого присваивания поля структуры s1 будут содержать ту же информацию, что и поля s2.
Пример 14.78:
struct point pt={105,15},pt1;
pt1=pt;
В результате выполнения этого присваивания в pt1.x будет записано значение 105, а в pt1.y – число 15.
Если мы опишем две структуры с одними и теми же полями, но первая структура будет иметь шаблон student1, а вторая student2, то присваивание s1=s2 недопустимо.
Структуры нельзя сравнивать. Структуры нельзя сравнивать операциями ==, /=, < , > и т.п. Сравнивать можно только значения конкретных полей.
Все, что можно делать со структурой, - это взять ее адрес с помощью операции & и обращаться к ее элементам, как показано выше.
Записи нельзя копировать или присваивать как единое целое; их нельзя передавать в функцию или получить оттуда целиком. Однако, к указателям на структуры это замечание не относится.