Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_C_нова.doc
Скачиваний:
79
Добавлен:
12.02.2016
Размер:
1.95 Mб
Скачать

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

РОБОТА З СТРУКТУРАМИ В С++

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

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

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

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

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

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

id_nom – ідентифікаційний номер;

pib – прізвище, ім’я, по-батькові;

st - стать;

summa - зарплата;

Всі ці поняття можна об'єднати в таку, наприклад, структуру:

struct anketa

{

int id_nom;

char pib[30];

char data[10];

int st;

char adres[40];

float summa;

};

Цей запис називається описом структури. Вона починається з ключового слова struct і складається з укладеного у фігурні дужки списку описів. За словом struct може слідувати необов'язкове ім'я, яке називається іменем типу структури (іноді його називають тегом або ярликом структури). Цей ярлик іменує структуру і надалі може використовуватися для скорочення докладного опису. Змінні, згадувані в запису, називаються елементами. Слідом за правою фігурною дужкою, що закінчує список елементів, може слідувати список змінних, так само, як і у випадку базисних типів. Ось чому в наведеному вище описі структури після закриваючої фігурної дужки стоїть крапка з комою; вона завершує порожній список. Опис struct {....} p1, p2, p3; синтаксично аналогічний int p1, p2, p3 в тому сенсі, що кожен з операторів описує p1, p2, p3 як змінні відповідного типу і призводить до виділення для них пам'яті. Опис ж структури без наступного списку змінних не виділяє жодної пам'яті. Він тільки визначає форму структури і діє як шаблон. Якщо такий опис забезпечений ярликом (ім'ям типу), то його можна пізніше використовувати під час визначення фактичних екземплярів структури. Наприклад, використовуючи створений вище опис anketa, можна за допомогою рядка

struct anketa a0, a1, a2;

описати структурні змінні a0, a1, a2, кожна з яких будується за шаблоном, введеним структурою anketa. Будь-яка змінна a0, a1, a2 містить в строго визначеному порядку елементи id_nom, pib, data, st, adres, summa. Всі змінні, як і всі інші змінні мови С, отримують місця в пам'яті.

Структура може містити структури іншого типу в якості полів:

struct XYS_Z {

struct XYS xys;

int z;

} A1;

a1.xys.x = 71;

a1.z = 12;

Структура того ж самого типу не може міститися в якості поля - рекурсивні визначення заборонені. Зате нерідко використовуються поля - посилання на структури такого ж типу (або іншого). Це дозволяє організовувати списки структур:

struct node {

int value;

struct node * next;

};

Дуже часто використовуються масиви структур:

struct XYS array [20];

int i = 5, j;

array [i] .x = 12;

j = array [i] .x;

Зовнішні та статичні структури можна ініціалізувати, поміщаючи слідом за визначенням список початкових значень елементів:

struct anketa a0 = {1024230089, "Петрів В.М", "10.01.1973", 0, "Львів, Виговського, 23/99", 1750.00};

Кожній структурній змінній в нашому випадку можуть бути присвоєні шість значень, що мають відповідні базові типи.

Структури однакового типу можна присвоювати повністю (що відповідає присвоюванню кожного з полів):

     struct XYS s1, s2; ...

     s2 = s1;

Доступ до значень здійснюється за допомогою наступної конструкції:

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

Або

покажчик _на_структуру -> ім'я_поля

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

a0.data = "10.01.43"; a1.summa = 0.0;

if (a2.pol == 1) man = man + 1;

Приклад звертання до полів структури

struct _Point {

short x, y; /* координати точки */

char *s; /* мітка точки */

} Point;

Point p; Point *pptr; short *iptr;

struct _Curve {

Point points[25]; /* вершини ламаної */

int color; /* колір лінії */

} aLine[10], *linePtr = & aLine[0];

...

pptr = &p; /* покажчик на структуру p */

p.x = 1;

p.y = 2;

p.s = "Grue";

linePtr->points[2].x = 54;

aLine[5].points[0].y = 17;

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