Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_раб_структуры.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
111.1 Кб
Скачать

Лабораторная работа №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 и т. п.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]