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

Работа 4. Структуры

Цель работы:

– изучить способы задания структур;

– сравнить структуры и объединения;

– сравнить эффективность решения задач с применением структур и массивов;

I. Теоретический раздел работы

Кроме известных типов данных языка С позволяется создавать ещё несколько типов данных:

- структуры;

- объединения;

- перечисляемый тип (см. лаб. раб. № 3);

- поля битов;

- использование оператора typedef с целью создания нового имени для уже существующих типов.

1.1. Структура

Часто в программировании необходимо объединить разнородные, но логически связанные данные. Например, наш домашний адрес состоит из целых чисел: номеров квартиры, дома, почтового индекса, а также из названий: улицы, города, страны. В языке С для представления разнородных данных служит структурированный тип, который так и называется структурой или комбинированным типом данных.

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

Пример определения структуры:

struct student {

char name[30];

int kurs;

char group[3];

int stp;

}

Объявление структуры является оператором, и поэтому в конце должна стоять точка с запятой. При этом пока никакая переменная не объявлена. Выделения памяти под переменную не произошло. Под именем student задан частный вид структуры; говорят, что задан шаблон структуры и определен новый тип struct student. Для того чтобы объявить конкретные переменные типа struct student, можно написать

struct sudent studl, stud2;

Теперь объявлены две переменные - studl и stud2. Компилятор автоматически выделит под них место в памяти компьютера. Под каждую из переменных типа структуры выделяется непрерывный участок памяти. Задание шаблона структуры и объявление переменных может производиться и в одном операторе:

struct student {

char name[30];

char kurs;

char group[3];

int stip;

} stud1, stud2;

Здесь одновременно задается структура с именем student и объявляются переменные stud1 и stud2.

Доступ к конкретному элементу структуры осуществляется с помощью операции "точка". Например, stud1.name="Иванов М. С.";

Структуры, как и переменные другого типа, могут объединяться в массивы структур. Чтобы объявить массив структур, надо сначала задать шаблон структуры (у нас уже есть шаблон student), а затем объявить массив:

struct student studlkurs[200];

Этот оператор создаст в памяти 200 переменных типа структуры с шаблоном студент и именами studlkurs[0], studlkurs[l] и т. д.

Для доступа к полю kurs 25-го элемента массива используем studlkurs[24].kurs

Если объявлены две переменные типа структуры с одним шаблоном, можно сделать присваивание

studl=stud2; при этом произойдет побитовое копирование каждого поля одной переменной в соответствующее поле другой структуры. В то же время нельзя использовать операцию присваивания переменных типа структуры, шаблоны которых описаны под разными именами, пусть даже совсем идентично:

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

Чтобы завершить разговор о структурах, надо добавить, что в качестве элементов структуры можно использовать массивы, структуры и массивы структур.

Пусть объявления переменных имеют вид

struct addr {

char city[30];

char street[30];

int house;

}

struct fulladdr {

struct addr addres;

int room;

char name[30];

} f,g;

Здесь addr - шаблон структуры, определенный перед объявлением структуры fulladdr и объявлением переменной f типа структуры fulladdr. Для присвоения значения элементу house структуры addres переменной f используем

a.addres.house=101;

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