Складні типи даних у Сі Мова програмування ССтруктура – це об'єднання кількох об'єктів, можливо, різного типу під одним ім'ям, яке є типом структури. Структура. Як об’єкти можуть виступати: змінні, масиви, покажчики та інші структури.
Номер слайду 2
Складні типи даних у Сі Мова програмування ССтруктури дозволяють трактувати групу зв'язаних між собою об'єктів не як множину окремих елементів, а як єдине ціле. Структура є складним типом даних, складеним з простих типів. Загальна форма оголошення структури: struct Імя. Структури{ тип Ім’я. Елемента1; тип Ім’я. Елемента2; . . . тип Ім’я. Елементаn;};Після закриття фігурної дужки } в оголошенні структури обов'язково ставиться крапка з комою.
Номер слайду 3
Складні типи даних у Сі Мова програмування Сstruct date{ int day; // 4 байта char *month; // 4 байта int year; // 4 байта};Приклад оголошення структури
Номер слайду 4
Складні типи даних у Сі Мова програмування СПоля структури розміщуються у пам'яті в порядку оголошення struct date{ int day; // 4 байта char *month; // 4 байта int year; // 4 байта};У цьому прикладі структура date займає у пам'яті 12 байт. Крім того, покажчик *month під час ініціалізації буде початком текстового рядка з назвою місяця, розміщеного в пам'яті.
Номер слайду 5
Складні типи даних у Сі Мова програмування СПри оголошенні структур їх дозволяється вкладати одну в іншу. struct date{ int day; // 4 байта char *month; // 4 байта int year; // 4 байта};struct persone{ char lastname[20]; // прізвище char firstname[20]; // ім’я struct date bd; // дата нарождення};
Номер слайду 6
Складні типи даних у Сі Мова програмування СІніціалізація полів структури Ініціалізація полів структури може здійснюватися двома способами: присвоєння значень елементам структури в процесі оголошення змінної, що відноситься до типу структури; отримання початкових значень структур елементів за допомогою функцій введення-виведення (наприклад, printf() і scanf()).
Номер слайду 7
Складні типи даних у Сі Мова програмування СУ першому способі ініціалізація здійснюється за наступною формою: struct Ім’я. Структури Ім’я. Змінної={Значення. Елемента1, Значение. Элемента2, . . . , Значение. Элементаn};Приклад: struct date bd={24,"лютого", 2022};Назва елемента структури є складним. Для звернення до елементу структури необхідно вказати ім'я структури і ім'я самого елемента. Вони розділяються крапкою: Ім’я. Змінної.Ім’я. Елемента. Структуриprintf("%d %s %d",bd.day, bd.month, bd.year);
Номер слайду 8
Складні типи даних у Сі Мова програмування СДругий спосіб ініціалізації об'єктів мови Сі з використанням функцій введення-виведення. Приклад
Номер слайду 9
Складні типи даних у Сі Мова програмування С#include #include struct date { int day; char month[20]; int year;};struct persone { char firstname[20]; char lastname[20]; struct date bd;}; int main() {struct persone p; printf(" Введiть ім’я : "); scanf("%s", p.firstname); printf("Введiть прiзвище : "); scanf("%s", p.lastname); printf("Введіть дату народження\n. Число: "); scanf("%d", &p.bd.day); printf("Мiсяць: "); scanf("%s", p.bd.month); printf(«Рiк: "); scanf("%d", &p.bd.year); printf("\n. Ви ввели : %s %s, дата народження %d %s %d року", p.firstname, p.lastname, p.bd.day, p.bd.month, p.bd.year); getchar(); getchar(); return 0;}Результат роботи
Номер слайду 10
Складні типи даних у Сі Мова програмування СІм'я структурної змінної може бути зазначено при оголошенні структури. В цьому випадку воно розміщується після закриває фігурної дужки }. Область видимості такої структурної змінної визначатиметься місцем опису структури. struct complex_type // ім’я структури{ double real; double imag;} number; // ім’я структурної змінноїПоля наведеної структурної змінної: number.real, number.imag.
Номер слайду 11
Складні типи даних у Сі Мова програмування СОб'єднання Об'єднаннями називають складний тип даних, що дозволяє розміщувати в тому самому місці оперативної пам'яті дані різних типів. Коли використовується елемент меншої довжини, ніж найдовший елемент об'єднання, цей елемент використовує лише частина відведеної пам'яті. Всі елементи об'єднання зберігаються в одній області пам'яті, починаючи з однієї адреси.
Номер слайду 12
Складні типи даних у Сі Мова програмування СЗагальна форма оголошення об'єднання union Ім’я. Об’єднання{ тип Ім’я. Об’єкта1; тип Ім’я. Об’єкта2; . . . тип Ім’я. Об’єктаn;};Ім’я 1Ім’я 2Ім’я 3 Об'єднання застосовуються для таких цілей: для ініціалізації об'єкта, якщо у кожний момент часу лише один із багатьох об'єктів є активним; для інтерпретації подання одного типу даних як іншого типу.
Номер слайду 13
Складні типи даних у Сі Мова програмування СНаприклад, зручно використовувати об'єднання, коли необхідно дійсне число типу float подати у вигляді сукупності байтів (N = 15.3)#include #include union types{ float f; unsigned char b[4];};int main(){ union types value; printf("N = "); scanf("%f", &value.f); printf("%f = %x %x %x %x", value.f, value.b[0], value.b[1], value.b[2], value.b[3]); getchar(); getchar(); return 0;}Результат виконання:
Номер слайду 14
Складні типи даних у Сі Мова програмування СПоміняти місцями два молодші байти у введеному числі (Введiть число : 450) #include #include int main() { char temp; union { unsigned char p[2]; unsigned int t; } type; printf("Введiть число : "); scanf("%d", &type.t); printf("%d = %x шiстн.\n", type.t, type.t); // Заміна байтів temp = type.p[0]; type.p[0] = type.p[1]; type.p[1] = temp; printf("Помiняли мiсцями байти, одержали\n"); printf("%d = %x шiстн.\n", type.t, type.t); getchar(); getchar(); return 0;}Результат виконання:
Номер слайду 15
Складні типи даних у Сі Мова програмування СБітові поля. Використовуючи структури, можна запакувати цілі компоненти ще більш щільно, ніж це було зроблено з використанням масиву. Набір розрядів цілого числа можна розбити на бітові поля, кожне з яких виділяється для певної змінної. При роботі з бітовими полями кількість бітів, що виділяється для зберігання кожного поля, відокремлюється від імені двокрапкою. тип ім’я: Кількість. Біт. Працюючи з бітовими полями потрібно уважно стежити, щоб значення змінної не зажадало пам'яті більше, ніж під неї виділено. Приклад Розробити програму, яка здійснює упаковку дати у формат Рік. Місяць
Номер слайду 16
Складні типи даних у Сі Мова програмування С#include #include #define YEAR0 1980struct date{ unsigned short day : 5; unsigned short month : 4; unsigned short year : 7;};int main() { struct date today; today.day = 16; today.month = 12; today.year = 2013 - YEAR0; //today.year = 33 printf("\n Сьогодні %u.%u.%u \n", today.day, today.month, today.year + YEAR0); printf("\n Розмір структури today : %d байт", sizeof(today)); printf("\n Значення елемента today = %hu = %hx шістн.", today, today); getchar(); return 0;}Результат роботи
Номер слайду 17
Складні типи даних у Сі Мова програмування СМасиви структур Робота з масивами структур аналогічна роботі зі статичними масивами інших типів даних. Приклад
Номер слайду 18
Складні типи даних у Сі Мова програмування С#include #include struct book{ char title[15]; char author[15]; int value;};int main(){ struct book libry[3]; int i; for (i = 0; i<3; i++) { printf("Введiть назву %d книги : ", i + 1); gets(libry[i].title); printf("Введiть автора %d книги : ", i + 1); gets(libry[i].author); printf("Введiть цiну %d книги : ", i + 1); scanf_s("%d", &libry[i].value); getchar(); } for (i = 0; i<3; i++) { printf("\n %d. %s ", i + 1, libry[i].author); printf("%s %d", libry[i].title, libry[i].value); } getchar(); return 0;}Результат виконання:
Номер слайду 19
Складні типи даних у Сі Мова програмування СПокажчики на структури Доступ до елементів структури чи об'єднання можна здійснити за допомогою покажчиків. І тому необхідно ініціалізувати покажчик адресою структури чи об'єднання.
Номер слайду 20
Складні типи даних у Сі Мова програмування СДля роботи з масивом можна використовувати покажчик. При цьому звернення до полів структури через покажчик виглядатиме як: покажчик -> полеабо(*покажчик).полепокажчик - покажчик на структуру чи об'єднання; поле - поле структури чи об'єднання;
Номер слайду 21
Складні типи даних у Сі Мова програмування СДинамічне виділення пам'яті для структур Динамічно виділяти пам'ять під масив структур необхідно, якщо заздалегідь невідомий розмір масиву. Для визначення розміру структури в байтах використовується операція sizeof(ім'я структури). Приклад
Номер слайду 22
Складні типи даних у Сі Мова програмування СПриклад Бібліотека із 3 книг#include #include #include struct book{ char title[15]; char author[15]; int value;};int main(){ struct book *lib; int i; lib = (struct book*)malloc(3 * sizeof(struct book)); for (i = 0; i<3; i++) { printf("Введіть назву %d книги : ", i + 1); gets_s((lib + i)->title); printf("Введіть автора %d книги : ", i + 1); gets_s((lib + i)->author); printf("Введіть ціну %d книги : ", i + 1); scanf_s("%d", &(lib + i)->value); getchar(); } for (i = 0; i<3; i++) { printf("\n %d. %s ", i + 1, (lib + i)->author); printf("%s %d", (lib + i)->title, (lib + i)->value); } getchar(); return 0;}Результат виконання:
Номер слайду 23
Складні типи даних у Сі Мова програмування СДЯКУЄМО ЗА УВАГУ