Основні теоретичні відомості

Структура - це об’єднання однієї або більше змінних, можливо, різних типів, в одну групу, що для простоти роботи має одне ім’я.

Структури використовують для організації складних даних в великих програмах. Тому що вони в багатьох ситуаціях дозволяють групувати в єдине ціле поріднені між собою змінні та працювати з ними як з єдиним цілим, а не з окремими складовими. Структури також дозволяють створювати нові типи даних.

Використання покажчиків зі структурами бажане по трьом причинам: їх легше використовувати; структура не може використовуватись в якості аргументу функції, а покажчик на структуру може; багато типових структур даних є структурами які містять покажчики на інші структури.

Загальна форма об’явлення структури наступна:

struct ім’я_структури {

тип 1 поле 1;

тип 2 поле 2;

……

тип n поле n;

} список_змінних;

Наприклад. Об’явимо новий тип stud

struct stud {

char name[80];

int age;

double b;

} st1, st2;

stud Ivan,Petr; //Об’являємо змінні Ivan, Petr типа stud

На рис. 8.1 наведена уява змінної st1 у пам’яті.

 
 


st1  
 

 

name       80 байт
age       2 байт
b       8 байт

Рисунок 8.1 – Ділянка пам’яті, що виділена під змінну st1

Отже, під змінну st1 в пам’яті виділяється 86 байт

При визначенні структур можлива їх ініціалізація, тобто задання початкових значень їх елементів. Наприклад:

stud st1={“Ivanov”, 20, 4.6};

Для звертання до елемента структури використовують оператор ‘.’

ім‘я_структури.ім’я_елемента_структури

Наприклад:

st1.name=”Ivan”;

st1.age=20;

gets(st2.name);

for (int t=0; st1.name[t]; t++) cout<<st1.name[t];

В С++ вміст однієї структури можна присвоїти другій, якщо обидві ці структури мають один тип.

Наприклад:

struct tt{

int a, b;} var1, var2;

var1=var2;

В С++ покажчики на структури можна використовувати таким самим чином, як і покажчики на змінні різного типу.

ім‘я_структурного типу *ім’я покажчика_на_структуру;

Наприклад:

stud *pStud;

pStud=&st1;

В С++ для того, щоб отримати доступ до членів структури за допомогою покажчика, використовується оператор „–>”.

pStud–>age;

Інша можливість звернення до елементу структури за допомогою адресуючого її покажчика – це розіменування покажчика та формування уточнюючого ім’я такого виду:

(*ім’я_покажчика).ім’я_елемента_структури

Покажчик на структуру може входити до визначення того ж структурного типу. Саме так у визначенні формата структуру record введені два покажчики:

record *prior – покажчик на попередній елемент у двохзв’язному списку структур;

record *next – покажчик на наступний елемент у двозв’язному списку структур.

Об’єднання.

Об’єднання це тип, де всі змінні розділяють одну ділянку пам’яті. Загальна форма запису об’єднання наступна:

 

union ім’я_типу (

тип 1 поле 1;

тип 2 поле 2;

- - - - - - - - - -

тип N поле N;

} перелік_змінних;

 

Наприклад:

union { long L; int il, i2; char с[4]; } UNI;

 

Відповідно до структур звернення до елемента об’єднання можливо через им’я об’єднання або через покажчик:

 

ім’я_объеднання.ім’я_елемента

покажчик_на_об’єднання->і’мя_елемента

(*покажчик_на_об’єднання).і’мя_елемента

Контрольні запитання

1. Чим відрізняється визначення шаблона структури від визначення структури?

2. Запишіть (у виді прикладів) способи доступу до членів структури, до елементів масиву члена структури, до членів структури, що є елементом масиву.

3. Що означає код (*str).alphaі як його ще можна записати?

4. Як ініціалізувати елементи структури?

5. Напишіть код, що визначає розмір масиву структур.

6. Чи правильний запис struct x{int x,y;double z[2];}x;?

7. Схематично показати розподіл пам'яті для структури

struct{int alfa;

int a : 5;

int b : 3;

char ch;}record;

8. Наведіть приклад використання структури в іншій структурі. Привласніть значення одному елементу цієї структури.

9. Що таке об'єднання (union)? Як створити шаблон об'єднання і саме об'єднання?

10. Схематично показати розподіл пам'яті для об'єднання

union{long word;

char delta;

int number;

char gamma[4];}UN;

11. Як ініціалізувати об'єднання?

12. Чим структура відрізняється від об'єднання?

13. Для чого можна використовувати бітові поля?

14. Як задається розмір бітового поля при описі його в структурі?

15. Запишіть визначення структури для збереження імені, що включає до 40 символів, поля для збереження інформації про родинний стан як одного з чотирьох значень і поля для збереження відділу як одного з восьми значень.

16. Чи може до бітового поля застосовуватися операція "одержати адресу" &?


Література

 

1. Абрамов С.А., Гнездилова Г.Г., Капустина Е.Н., Селюн М.И. Задачи по программированию. – М.:Наука, 1988. – 224с.

2. Павловская Т.А. С/C++. Программирование на языке высокого уровня. – СПб.: Питер, 2003. – 461с.

3. Павловская Т.А. Структурное программирование: Учеб. пособие/ Т.А. Павловская, Ю.А. Щупак. – СПб.: Питер, 2002. – 240с.

4. Керниган Б. Язык программирования С: Пер. с англ./Б. Керниган, Д. Ритчи. – 2-е изд., перераб. И доп. – М.: Вильямс, 2006. – 304с.

5. Крячков А.В., Сухинина И.В., Томшин В.К. Программирование на С и С++: Учеб. Пособие для вузов/ Пер. ред. В.К. Томшина. – 2-е изд., испр. – М.: Горячая линия – Телеком, 2006. – 344с.

6. Глинський Я.М. С++ Builder: Навч. посіб./ Я.М. Глинський, В.Є. Анохін, В.А. Ряжська. – Л.: Дсол., 2003. – 192с.

7. Демидович Е.М. Основы алгоритмизации и программирования. Язык С: Учеб. пособие, - СПб.: БХВ – Петербург, 2006. – 440с.

8. Шилдт Г. Искусство программирования на С++. СПб.: БХВ – Петербург, 2006. – 496с.

9. Шилдт Г. Справочник программиста по С/С++: Пер с анг. – 2-е изд. – М.: ВШ, 2000. – 447с.

10. Культин М.Б. С/С++ в задачах и примерах. – СПб.: БХВ – Петербург, 2005. – 288с.

11. Дейтел Х.М. Дейтел П.Дж. Как программировать на С++: Пер с англ. – М.: Бином, 1999. – 1022с.

12. Либерти Д. Освой самостоятельно С++: 10 минут на урок. 2-е изд. – М.: Издат. Дом «Вильямс», 2004. – 352с.

13. Ишкова Э.А. С++. Начала программирования. 2-е изд. перераб. и доп. – М.: ЗАО «Изд-во Бином», 2001. – 479с.

14. Крупник А. Изучаем С. – СПб: Питер, 2001. – 256с.

15. Лоуден К. С++. Карманный справочник. – СПб.: Питер, 2004. – 220с.


Додаток А
Титульний аркуш

 

Міністерство освіти і науки, молоді та спорту України

Запорізький національний технічний університет

 

 

кафедра програмних засобів

 

Лабораторна робота № 1

Програмування лінійних процесів

 

Викоконав(ла)

ст. гр. ІОТ-312 В.В. Іванов

 

 

Прийняв

 

доцент Е.Н. Сидоров

ст. викл. В.В. Воробьов

ас. В.Д. Петров

 

 

Запоріжжя, 2012