Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lexzii_08 / lexs_8_A.doc
Скачиваний:
15
Добавлен:
17.05.2015
Размер:
104.96 Кб
Скачать

ЗАПИСИ

Запис, або структура, – це об'єднання одного або більш об'єктів (змінних, масивів, покажчиків, інших записів і т.п.). Як і масив, вона є сукупністю даних, але відрізняється від нього тим, що до її компонентів (елементам) необхідно звертатися на ім'я і її різні елементи не обов'язково повинні належати одному типу.

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

Оголошення запису здійснюється за допомогою ключового слова struct, за яким йдуть її тип і список елементів, укладених у фігурні дужки. Її можна уявити в такому загальному вигляді:

struct тип{ тип елементу 1 ім'я елементу 1;

………………………………………………….

тип елементу n ім'я елементу n;};

Ім'ям елементу може бути будь-який ідентифікатор. Як і вище, в одному рядку можна записувати через кому декілька ідентифікаторів одного типу. Наприклад:

struct ДАТА { int ДЕНЬ;

int МІСЯЦЬ;

int РІК; };

Нагадаємо, що російські букви використані в ідентифікаторах для кращого сприйняття запису (у мові цього робити не можна).

За фігурною дужкою, що закінчує список елементів, можуть записуватися змінні даного типу, наприклад: struct date{ ...} а, b, с; (при цьому виділяється відповідна пам'ять). При описі без подальшого списку ніякої пам'яті не виділяється, просто задається форма запису. Введене ім'я типу пізніше можна використовувати для оголошення запису, наприклад: struct date day; Тепер змінна day має тип date. При необхідності записи можна ініціалізувати, якщо помістити за оголошенням список початкових значень елементів.

Дозволяється вкладати записи один в інший. Наприклад:

struct УЧЕНЬ { char ПРІЗВИЩЕ [15], ІМ'Я [15];

struct ДАТА ДАТА_НАРОДЖЕННЯ;

Int клас, вік; } ;

Визначений вище тип ДАТА включає три елементи: ДЕНЬ, MECЯЦ, РІК, що містять цілі значення (int). Запис УЧЕНЬ включає елемент ПРІЗВИЩЕ [15], ІМ'Я [15], ДАТА_НАРОДЖЕННЯ, КЛАС, ВІК, ПРІЗВИЩЕ[15] і ІМ'Я[ 15] – це символьні масиви з 15 компонентів кожен (передбачається, що число букв в прізвищі і імені окремо не перевищує 14; при необхідності це число можна легко збільшити). Змінна ДАТА_НАРОДЖЕННЯ представлена складовим елементом (вкладеним записом) ДАТА (кожній даті народження відповідають день місяця, місяць і рік). Елементи КЛАС і ВІК містять значення цілого типу (int). Після введення типів ДАТА і УЧЕНЬ можна оголосити змінні, значення яких належать цим типам. Наприклад:

struct УЧЕНЬ УЧНІ [50];

Тут визначений масив УЧНІ, що складається з 50 елементів УЧЕНЬ.

У мові СІ дозволено використовувати масиви записів; записи можуть складатися з масивів і інших записів,

Щоб звернутися до окремого компоненту запису, необхідно вказати її ім'я, поставити крапку і відразу за нею написати ім'я потрібного елементу (сформоване таким чином ім'я іноді називають складовим). Наприклад:

УЧНІ [I]. КЛАСС=3;

УЧНІ [I]. ДАТА_НАРОДЖЕННЯ . ДЕНЬ=5;

УЧНІ [I]. ДАТА_ НАРОДЖЕННЯ . МІСЯЦЬ=4;

УЧНІ [I]. ДАТА_ НАРОДЖЕННЯ . РІК= 1989;

Тут перший рядок указує, що І-й учень вчиться в третьому класі, а подальші рядки – його дату народження: 5.04.89. При роботі із записами необхідно пам'ятати, що тип елементу визначається відповідним рядком оголошення у фігурних дужках. Наприклад, масив УЧНІ має тип УЧЕНЬ, РІК є цілим числом і т.д. Оскільки кожен елемент запису відноситься до певного типу, його складове ім'я може з'являтися скрізь, де дозволено використовувати значення цього типу.

Розглянемо приклади програм, що показують, як використовувати записи.

У першій програмі оголошуються запис computer і змінна pibm типу computer. Всі описи і визначення дані перед рядком main( ). Далі буде показано, що в цьому випадку змінна pibm є глобальною. Рядки pibm.model, pibm.mem, pibm.sp викликають звернення до відповідних елементів запису pibm типа computer, яким раніше були привласнені певні значення.

/* Демонстрація запису */

# include <stdio.b>

struct computer { int mem;

int sp;

char model[20];}; /* оголошення запису типу computer, що

складається з трьох елементів: mеm, sp, model */

struct computer pibm= { 512, 1,"ПЭВМ ЕС1840.05”};

/* оголошення і ініціалізація змінної pibm типу computer */

main ()

{

printf(“персональна ЕОМ %s\n\n",pibm.model);

printf(“об'єм оперативної пам'яті-%d К байтів\n”, pibm.mem);

printf("продуктивність-%d млн.операцій в секунду\n”, pibm.sp);

/* виведення на екран значення елементів запису */

}

Результати роботи програми мають вигляд:

персональна ЕОМ ПЕВМ ЕС1840.05

об'єм оперативної пам'яті – 5 12 К байт

продуктивність – 1 млн. операцій в секунду

Друга програма показує використання вкладених записів:

/* Демонстрація вкладених записів */

#include <stdio.h>

struct date { int day;

int month;

int year; };

/* оголошення запису типу date */

struct person { cbar fam[20];

char im[20];

char ot[20];

struct date fl; };

/* оголошення запису типу person; одним з елементів

записи person є запис fl типу date */

main()

{ struct person indl; /*оголошення змінної indl типу person */

printf("вкажіть прізвище, ім'я, по батькові, день,\nмісяць і рік

народження громадянина indl\n”);

scanf(“%s%s%s%d%d%d ", indl.fam, indl.im, indl.ot,

&ind1.f1.day, &indl.f1.month, &indl.f1.year);

/* введення відомостей про громадянина indl*/

printf("\nВідомості про громадянина ind1\n");

printf(“Прізвище, ім'я, по батькові: %s %s %s\n",

Соседние файлы в папке lexzii_08