- •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.7. Доступ к значениям полей структурного типа
Правила работы с полями структуры идентичны работе с переменными соответствующих типов.
Доступ к значениям полей структурного типа осуществляется с помощью операции точка:
Имя_переменной_структурного_типа . имя_поля
или с помощью указателя на структуру:
указатель_на_структуру–>имя_поля
Операция точка в данных конструкциях означает доступ к элементу структуры, у нее самый высокий приоритет операций (см. лабораторную работу № 6).
Примеры обращения к полям:
d[i].year, (*(d+i)).year, (p+i)->year
Пример 14.4
#include <stdio.h>
struct cd_info
{ char titlel[25]; // название
char artist[20]; // исполнитель
int num_songs; // число песен
float price; // стоимость
char date_bought[8]; // дата покупки
};
cd_info cd={"Red Moon Men",
"Sam and the Snuds",
12,
11.95,
"02.13.12"};
void main()
{
// вывод содержимого переменной cd
printf("Название: %s\n",cd.titlel);
printf("Исполнитель: %s\n",cd.artist);
printf("Количество песен: %d\n",cd.num_songs);
printf("Стоимость:%5.2f\n",cd.price);
printf("Дата покупки %s\n", cd.date_bought);
}
Пример 14.41
Задание данных для структуры, задающей дату года:
data.day = 12; // элементу, определяющему день месяца,
//присвоено значение 12
data.month = 9; // элементу, определяющему месяц года
//присвоено значение 9
data.year = 2002; // элементу, определяющему год
//присвоено значение 2002
Пример 14.42
Массив с элементами структурного типа student, задающий информацию о студентах группы из 25 человек:
stud [1].namestud.fam = “Иванов”; // элементу,
//определяющему фамилию студента с номером 1
// в массиве stud присвоено значение строки “Иванов”
stud [1].namestud.name = “Алексей”; // элементу,
//определяющему имя студента с номером 1 в
//массиве stud присвоено значение строки “Алексей”
stud [1].age = 19; // элементу, определяющему возраст
//студента с номером 1 в массиве stud присвоено
//значение 19
stud [1].mark[4] = 5; // элементу, определяющему оценку
//по пятому предмету студента с номером 1 в
// массиве stud присвоено значение 5
Пример 14.43
Следующие операторы присваивают значения различным элементам переменной с именем worker типа employee;
worker.employee_id = 12345;
worker.salary = 25000.00;
worker.оffice_number = 102;
Пример 15.45
Для обращения к элементу структуры укажите имя переменной, за которым следует точка и имя элемента.
Следующая программа иллюстрирует использование структуры типа employee:
#include <iostream.h>
#include <string.h>
void main(void)
{
struct employee
{
char name [64]; //ФИО
long employee_id; //табельный номер
float salary; //оклад
char phone[11]; //номер телефона
int office_number; //номер структурного подразделения
} worker;
// Копировать имя в строку strcpy(worker.name, "Петров Иван Сергеевич");
worker.employee_id = 12345;
worker.salary = 25000.00;
worker.office_number = 102;
// Копировать номер телефона в строку strcpy(worker.phone, "84957691212") ;
cout << "Служащий: " << worker.name << endl;
cout << "Телефон: " << worker.phone << endl;
cout << "Номер служащего: " << worker.employee_id << endl;
cout << "Оклад: " << worker.salary << endl;
cout << "Офис: " << worker.office_number << endl;
}
Как видите, присваивание целому элементу и элементу с плавающей точкой очень просто. Программа использует оператор присваивания, чтобы присвоить значение соответствующему элементу. Однако обратите внимание на использование функции strcpy для копирования символьной строки в элементы name и phone. Если вы не инициализируете элементы при объявлении переменной типа данной структуры, вы должны копировать символьные строки в символьно-строковые элементы.
Доступ к элементам структур может осуществляться и с помощью указателей. Если есть указатель на структуру, то доступ к элементу возможен при помощи операции косвенного выбора:
указатель_на_структуру->имя_элемента.
Стрелка, составленная из двух символов, обозначает оператор косвенного выбора.
Пример 14.122
Описание указателя на структуру и обращение к ее элементам.
data * ptr;
ptr=&d2;
ptr->day=4;
ptr->month=" Декабрь";
ptr->year=1998;
Обращение к элементам структуры можно записать еще следующим образом:
(*ptr).day=4;
(*ptr).month=" Декабрь";
(*ptr).year=1998;