
- •Int num_songs; // число песен
- •Int num_songs; // число песен
- •Int num_songs; // число песен
- •Вложенные структурные типы
- •Массивы структурного типа
- •Примеры выполнения работы
- •Текст программы:
- •Задание на лабораторную работу Вариант 1
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •Вариант 9
- •Вариант 10
- •Вариант 11
- •Вариант 12
- •Вариант 13
- •Вариант 14
- •Вариант 15
- •Вариант 16
- •Вариант 17
- •Вариант 18
- •Вариант 19
- •Вариант 20
- •Требования к отчету
- •Контрольные вопросы
Лабораторная работа №7
Структурный тип данных на языке C++
Цель лабораторной работы
Целью лабораторной работы является получить практические навыки решения задач с использованием структурного типа данных.
Список литературы
Основная литература:
1. Громов Ю.Ю., Татаренко С.И. Языки С и С++ для решения инженерных и экономических задач. – Тамбов: ТГТУ, 2001. – 150с.
2. Павловская Т.А. С/С++. Программирование на языке высокого уровня. СПб.: Питер, 2009. – 464с.
Дополнительная литература
3. Культин Н. С/С++ в задачах и примерах СПб.: BHV-СПб, 2005. - 288 с.
4. Шилдт Г. C/C++. Справочник программиста. М.: Вильямс, 2000. - 448 с.
Вопросы для предварительного изучения
1. Изучить материал [1, стр. 15-16].
3. Изучить материал [2, стр. 65-72]
4. Изучить материал [4, стр. 29, 116-117]
6. Изучить содержание и порядок оформления лабораторной работы.
Теоретический материал
Иногда удобно иметь набор значений различного типа, с которыми можно обращаться как с одним элементом.
Рассмотрим, например, музыкальную коллекцию на компакт-дисках (CD). Такая коллекция может включать следующую информацию:
название CD;
имя исполнителя;
число песен;
стоимость CD;
дату покупки.
Эта структура имеет пять полей. Определим тип для поля структуры:
Имя элемента |
Тип данных |
Название CD |
Символьный массив из 25 символов |
Имя исполнителя |
Символьный массив из 20 символов |
Число песен |
Целый |
Стоимость CD |
С плавающей точкой |
Дата покупки |
Символьный массив из 8 символов |
Для определения структурного типа используется ключевое слово struct:
struct имя_структурного_типа
{ описание поля_1;
. . .
описание поля_n;
} [одна или более переменных];
Поле описывается как переменная стандартного типа или типа, определенного пользователем.
Пример: Структура с информацией о CD:
struct cd_info
{
char titlel[25]; // название CD
char artist[20]; // исполнитель
int num_songs; // число песен
float price; // стоимость CD
char date_bought[8];// дата покупки
}col1,col2,col3;
Переменные структурного типа можно объявлять так же, как и переменные стандартных типов.
Пример: Cтруктура с информацией о CD:
struct cd_info
{ char titlel[25]; // название CD
char artist[20]; // исполнитель
Int num_songs; // число песен
float price; // стоимость CD
char date_bought[8]; // дата покупки
};
cd_info cd1, cd2, cd3; /*определение переменных cd1, cd2, cd3 */
При определении структурной переменной язык C++ резервирует для нее место в памяти. Если же был описан только структурный тип, а ни одной переменной данного типа определено не было, то место в памяти не выделяется.
Инициализация переменной структурного типа
Переменную структурного типа можно инициализировать одновременно с объявлением. Инициализация переменной структурного типа производится, если после имени типа следуют знак "=" и список значений полей структурного типа в фигурных скобках разделенные запятой.
Пример: Инициализация структуры, содержащей информацию о музыкальной коллекции на 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.97"};
Значения переменным-полям присваиваются в порядке их объявления при определении структурного типа.
Доступ к значениям полей структурного типа
Доступ к значениям полей структурного типа осуществляется с помощью операции точка.
Общий вид:
Имя_переменной_структурного_типа . имя_поля
Пример:
#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.97"};
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);
}
Вложенные структурные типы
Язык C++ позволяет определять один структурный тип в рамках другого. Например, структурный тип PersonInfo для записи роста, веса и даты рождения человека может быть определен, как показано в примере:
struct Date
{
int month; //месяц
int day; //число
int year; //год
};
struct PersonInfo
{
float height; // рост
float weight; // вес
Date birthday; // дата рождения
};
Пример объявления переменной person типа PersonInfo:
PersonInfo person;
Чтобы получить доступ к значению поля birthday - переменной структурного типа PersonInfo, нужно использовать операцию точка: person.birthday, но так как birthday в свою очередь является полем структурного типа Date, то доступ, например, к году рождения осуществляется добавлением операции точка с именем year: person.birthday.year
Массивы структурного типа
Массивы структурного типа определяются так же, как и массивы стандартных типов.
Общий вид:
Имя_структурного_типа имя_переменной [количество_элементов_массива];
Например: PersonInfo personal[20];
Нумерация элементов массива начинается с нулевой компоненты и заканчивается индексом, равным количеству элементов массива минус 1.
Доступ к элементам массива структурного типа также осуществляется с использованием операции точка, например: personal[5].weight, personal[3].birthday.day и т. п.