Добавил:
Помощь с лабораторными, контрольными практическими и курсовыми работами по: - Инженерной и компьютерной графике - Прикладной механике Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 сем 1 курс С++ / Экзамен / Lektsii_Kurakina_2_semestr.pdf
Скачиваний:
6
Добавлен:
08.08.2022
Размер:
4.82 Mб
Скачать

Структуры

A.1 Пользовательские типы данных

В реальных задачах информация, которую требуется обрабатывать, может иметь достаточно сложную структуру. Для ее адекватного представления используются типы данных, построенные на основе простых типов данных, массивов и указателей.

Одна из главных особенностей языка С++ – это возможность создавать данные новых типов. Кроме известных основных типов данных С предоставляет пять способов создания своих типов данных:

·Структура - это совокупность переменных, объединенных одним именем. Она называется составным типом данных. (Также часто используется термин «смешанный тип данных»).

·Битовое поле - это разновидность структуры, предоставляющая легкий доступ к отдельным битам.

·Объединение позволяет одному участку памяти содержать два или более различных типов данных.

·Перечисление - это список символов.

·Ключевое слово typedef создает новое имя существующему типу.

11.2 Структура

Структура - это совокупность переменных, объединенных одним именем, предоставляющая общепринятый способ совместного хранения информации. Обычно все члены структуры связаны друг с другом. Например, информация об имени и адресе, находящаяся в списке рассылки, обычно представляется в виде структуры. Для книг это может быть название, автор, количество страниц; для окружности — координаты центра, диаметр, цвет.

Для создания структуры необходимо сначала объявить её, задать шаблон (наполнение), т. е. имена и типы данных, входящих в структуру. Ключевое слово struct сообщает компилятору об объявлении структуры.

Переменные, образующие структуру, называются членами структуры. (Члены структуры также часто называются элементами или полями).

Объявление структуры делается так:

struct имя структуры

{тип и имя элемента структуры 1;

тип и имя элемента структуры 2;

тип и имя элемента структуры n};

Например, определим структуру, описывающую студентов вуза.

struct student {

 

 

char name[30];

//имя

30 байт

int kurs;

//курс

4 байта

char group[5];

//группа

5 байт

int stip };

//стипендия

4 байта

Объявление структуры начинается с ключевого слова struct, дальше следует имя структуры – student. В “{}”указываются элементы структуры. Структура является оператором, поэтому заканчивается “;”.

При объявлении структуры память не выделяется, никакая переменная не создается, а задаётся только новый тип данных.

Объявление переменных типа “структура” осуществляется следующим образом:

struct student st1, st2;

При этом под каждую переменную (st1, st2) выделена память объёмом 39 байт.

Задание шаблона и объявление переменных может производиться в одном операторе.

struct student {…} st1, st2;

Для определения структуры сохраняется понятие области видимости. При размещении шаблона: внутри функции – им можно пользоваться только внутри функции; за пределами функции – можно пользоваться в любом месте программы. Шаблон может быть внешним (глобальным), а переменная – внутренней (локальной).

Сама переменная типа “структура” может быть

·глобальной

·локальной

·параметром функции

А.3 Инициализация элементов структуры.

Переменная-структура позволяет объединить под одним именем ряд разнородных данных. Обычно это нужно для удобства обработки данных. Если нельзя было бы создавать структуры, то пришлось бы создавать множество независимых переменных или ряд массивов, явной взаимосвязи между которыми не было бы. Структуру же позволяют объединять взаимосвязанные данные.

Объявив переменную структурного типа, мы можем получить доступ к каждому ее элементу для присваивания, изменения или получения значения.

Доступ к элементам структуры осуществляется при помощи операции точка (dot). За именем структурной переменной следует точка, а за ней имя члена, к которому происходит обращение. Ко всем членам структуры доступ осуществляется точно таким же способом. Стандартный вид доступа следующий:

имя_структуры.имя_члена

Пример:

strcpy(st1.name, “Иванов”);

st1.kurs=2;

printf(“%s”,st.group);

Значение элементов структуры можно сразу определять при объявлении переменной, что похоже на инициализацию массивов:

Задать начальные значения элементам структуры можно в момент создания переменной типа “структура”.

struct student st={“Петров”,1, “A”, 600};

Массив структур

А.4 Массив структур

Обычно создание в программе одной переменной структурного типа не имеет особого смысла. Чаще структурами пользуются, когда необходимо описать множество похожих объектов, имеющих разные значения признаков. Значения каждого объекта следует объединить вместе (в структуру) и тем самым отделить от значений других объектов. Например, описание ряда книг или множества студентов. Таким образом мы можем организовать массив, где каждый элемент представляет собой отдельную структуру, а все элементы принадлежат одному и тому же структурному типу.

Для объявления массива структур следует задать шаблон структуры, а затем объявить массив.

struct student sgr61[25];

Такой оператор создаёт в памяти 25 переменных типа “структура” с шаблоном student и именами

sgr61[0];

sgr61[1];

. . .

sgr61[24];

Обращение к элементам массива структур будет выглядеть следующим образом:

sgr61[1].stip

sgr61[6].name

Если объявлены две переменные типа структура с одним шаблоном, можно сделать присваивание. При этом произойдёт побитовое копирование каждого поля одной переменной в соответствующее поле другой структуры.

Нельзя использовать операцию присваивания, если шаблоны одинаковы, но описаны под разными именами.

А.5 Пример: заполнение и вывод списка студентов группы

#include <stdio.h> #define MAX 25 struct student { char name[30]; int kurs;

char group[5] int stipi}; main()

{struct student [MAX]; int count=0, i;

printf(“Введите число студентов:\n”); scanf(“%d”,& count);

for (i=0, i<count; i++)

{printf(“введите имя:\n”); scanf(“%s”,stud[i].name); printf(“введите курс:\n”); scanf(“%d”,&stud[i].kurs); printf(“введите группу:\n”); scanf(“%s”,stud[i].group); printf(“введите стипендию:\n”); scanf(“%d”,&stud[i].stip);

}

printf(“ваш список:\n”); for (i=0; i<count; i++)

printf(“%20s%6d%10s%6d\n”,stud[i].name,stud[i].kurs,stud[i].group,stud[i].stip); }

Соседние файлы в папке Экзамен