Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Лекция 15. Структуры. 1. Понятие структуры. 2. Определение нового имени типа




Лекция 15

Структуры

 

Цели:

ü получить представление о понятиях «структурный тип», «структура»;

ü освоить методику написания алгоритмов с использованием динамических и статических массивов структур, перевода таких алгоритмов на язык программирования С++ и разработки соответствующего проекта в среде Visual C++ 6. 0.

 

1. Понятие структуры

 

При решении практических задач очень часто приходится сталкиваться с объектами, которые невозможно описать переменной одного типа. Для описания такого рода объектов требуется несколько переменных различного типа. Для решения этой проблемы в языке С++ используют понятие «структура» – это совокупность переменных различных типов, объединённых в одну переменную. Элементы структуры называются полями. В качестве полей структуры могут выступать скалярные величины, массивы, а также другие структуры. Таким образом, структурный тип задает внутреннее строение определяемых с его помощью структур-переменных. В отличие от массива, всегда состоящего из однотипных элементов, компоненты структуры-переменной могут быть разных типов и все должны иметь различные имена. Из определения структуры понятно, что заполнение и обработка структур производится только поэлементно – операции над структурами в языке С++ не определены, т. е. ввод-вывод элементов структуры-переменной осуществляется при помощи стандартных функций printf() и scanf(). Становится ясно, что объём оперативной памяти, которую занимает структура-переменная, будет равен суммарному объёму памяти, который занимают все элементы такой структуры.

Описание структуры производится при помощи спецификатора объявления структур: struct. Описание структуры:

struct < имя_структурного_типа>

{

  < имя_типа_данных_1> < поле_1>;

  < имя_типа_данных_2> < поле_2>;

                      …

  < имя_типа_данных_N> < поле_N>;

};

Объявление структуры-переменной:

struct < имя_структурного_типа> < имя_структуры–переменной>;

 

Например, структура «товар» содержит поля:

название товара

закупочная цена

торговая наценка в процентах

объем партии товара

дата поступления партии товара

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

struct tovar

{

char name[50]; // Наименование

float price;       // Цена оптовая

float percent;       // Наценка в %

int vol;             // 06ъем партии

char date[9]; // Дата поставки партии

};

struct tovar tv;

В данном примере struct – спецификатор структурного типа; tovar – имя структурного типа; tv – структура-переменная.

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

Для того чтобы получить доступ к полю структуры, необходимо записать имя структуры-переменной, после имени поставить точку, а затем написать имя этого поля:

gets(tv. name);              // ввод с клавиатуры поля name

tv. price = 1234. 56;       // присваивание полю price значения 1234. 56

scanf(" %f", & tv. percent); // ввод с клавиатуры вещественного значения

                                    // по адресу поля percent

 

2. Определение нового имени типа

 

При решении прикладных задач на компьютере часто возникает необходимость в типах данных, которые не определены в языке программирования. В языке С++ можно создавать новые имена типов данных – пользовательские типы данных. Эта возможность реализуется при помощи спецификатора typedef или директивы задания макроопределений #define.  Ключевое слово typedef позволяет заменить имя заранее созданного пользовательского или стандартного типа данных на имя, которое задает программист. Это очень удобно при работе со структурами. Пример определения нового (пользовательского) имени структурного типа данных приведен в табл. 10.

 

 

Таблица 10

Определение tovar с помощью typedef Определение tovar с помощью #define
typedef struct { char name[50]; // Наименование float price; // Цена оптовая float percent; // Наценка в % int vol;        // 06ъем партии char date[9]; // Дата поставки партии } tovar; tovar tv; #define tovar struct tvr tovar { char name[50]; // Наименование float price;   // Цена оптовая float percent;   // Наценка в % int vol;          // 06ъем партии char date[9]; // Дата поставки                     //партии }; tovar tv;

В обоих примерах именем нового типа пользователя будет tovar, а tv – это структура-переменная типа tovar. Надо заметить, что такие определения записываются в разделе программы: директивы препроцессора, т. е. перед заголовком главной функции main().

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

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...