Використання структур. Використання об’єднань
| Сайт: | Навчально-інформаційний портал НУБіП України |
| Курс: | Програмування (КН). Ч2 ☑️ |
| Книга: | Використання структур. Використання об’єднань |
| Надруковано: | Гість-користувач |
| Дата: | четвер, 9 квітня 2026, 18:58 |
Опис
1. Оголошення та ініціалізація структур
Структура – це сукупність логічно зв'язаних змінних, об'єднаних під одним іменем. На відміну від масиву, який може мати тільки елементи одного типу, структура може складатися зі змінних довільних типів.
Структура – це похідний тип даних. Вона створюється з об'єктів інших типів. Загальний формат об'яви нової структури такий:
struct назва_структури {
елементи_структури
};
Приклад.
struct coord {
char * namePoint;
float X;
float Y;
};
Визначення struct coord складається з трьох елементів: одного елементу типу char* (namePoint) та двох елементів типу float (X, Y).
Елементами структури можуть бути як змінні основних типів даних, так і агрегати, такі, як масиви, структури.
Елемент структури не може бути структурою такого ж типу, як структура, в якій він описаний.
Але такий елемент може бути покажчиком на тип структури, в яку він входить.
Структура, яка містить покажчик, що посилається на структуру такого ж типу, називається структурою, що посилається на саму себе.
Вищенаведене визначення структури не резервує місця в оперативній пам'яті. Воно тільки створює новий тип даних, який можна використати для об'яви змінних.
Наприклад, в об'яві
struct coord myCoord, arrayCoord[52], *cPtr;
myCoord – змінна типу struct coord; arrayCoord – масив, що складається із 52 елементів типу struct coord,
cPtr – покажчик на struct coord.
Ключове слово typedef надає програмістові механізм для створення синонімів (або псевдонімів) для раніш визначених типів даних. Іншими словами, це ключове слово створює нове ім'я без створення нового типу:
typedef struct coord systemCoord;
typedef struct coord Coord;
typedef longint Integer;
Структури можуть бути ініційовані, як і масиви, із використанням списку ініціалізації. Наприклад, об'ява
struct coord myCoord = {“Точка 1”, 5.6, 10};
створює змінну myCoord типу struct coord і присвоює елементу namePoint значення “Точка 1”, елементу X – 5.6, елементу – 10.
Якщо значень у списку ініціації менше кількості елементів у структурі, решті присвоюється 0 (або NULL, якщо елемент – покажчик). Змінним-структурам, якщо вони об'явлені як глобальні, присвоюється значення 0 або NULL. Структури можна ініціювати і за допомогою оператора присвоєння. При цьому можна або присвоїти змінній-структурі змінну того ж типу, або присвоїти значення окремим елементам структури.
2. Використання елементів структур
Для використання в програмі окремого елемента структури використовуються дві операції: операція елемента структури (.), яка ще називається операція-крапка, і операція покажчика структури (->), яка ще називається операція-стрілка. Наступна програма демонструє ці дві операції.
#include <stdio.h>
#include <conio.h>
struct coord
{char * namePoint;
float X;
float Y;
};
int main()
{
struct coord myCoord;
struct coord *cPtr;
myCoord.namePoint="Point 1";
myCoord.X=5;
myCoord.Y=4;
cPtr=&myCoord;
/* Присвоєння адреси структури змінній-покажчику*/
printf("%s%s%f ; %f\n
%s%s%f ; %f\n
%s%s%f ; %f\n",
myCoord.namePoint," has coordinates: ",myCoord.X,myCoord.Y,
/* Використання елементів структури за допомогою операції-крапки*/
cPtr->namePoint, " has coordinates: ", cPtr->X,cPtr->Y,
/* Використання елементів структури за допомогою операції-стрілки */
(*cPtr).namePoint, " has coordinates: ", (*cPtr).X,(*cPtr).Y);
/* Використання елементів структури за допомогою операції-точки та непрямого адресування */
getch();
return 0;
}
Структури можуть передаватися функціям шляхом передачі окремих елементів структури, передачі всієї структури або передачі покажчика на структуру. Коли структури або їхні окремі елементи передаються функціям, вони передаються викликом за значенням. Тому функція, яку викликають, не може змінювати елементи структури у функції, що викликає.
Масиви структур, як і інші структури, викликаються за посиланням. Але, використовуючи структуру, в якій як елемент є масив, можна здійснити виклик масиву за значенням. Викликаючи структуру за значенням, ми і масив викликаємо за значенням.
Приклад програми , яка дозволяє визначити будь-яке комплексне число та вивести це число.
#include <conio.h>
#include <stdio.h>
#include <math.h>
//Створення структури number
typedef struct {
int x;
} number;
//Створення структури complex
typedef struct {
number realValue;
number imagValue;
} complex;
void setComplex (complex *);
void printComplex (complex *);
int main () {
complex dataValue;
printf("Complex number?\n");
setComplex(&dataValue);
printf("Reprezentation of the complex number:\n");
printComplex(&dataValue);
getch();
return 0;
}
//Встановлення значення комплексного числа
void setComplex(complex *c) {
printf("Real part:\n");
scanf("%d", &(c->realValue.x));
printf( "Image part:\n");
scanf("%d", &(c->imagValue.x));
}
//Виведення комплексного числа
void printComplex(complex *c) {
printf("%4d", c->realValue.x);
printf("%c",(c->imagValue.x < 0 ? '-' : '+'));
printf("%4di", abs(c->imagValue.x));
}
3. Передача структур у функції
Структури можуть передаватися функціям шляхом передачі окремих елементів структури, передачі всієї структури або передачі покажчика на структуру. Коли структури або їхні окремі елементи передаються функціям, вони передаються викликом за значенням. Тому функція, яку викликають, не може змінювати елементи структури у функції, що викликає.
Масиви структур, як і інші структури, викликаються за посиланням. Але, використовуючи структуру, в якій як елемент є масив, можна здійснити виклик масиву за значенням. Викликаючи структуру за значенням, ми і масив викликаємо за значенням.
Приклад програми , яка дозволяє визначити будь-яке комплексне число та вивести це число.
#include <conio.h>
#include <stdio.h>
#include <math.h>
//Створення структури number
typedef struct {
int x;
} number;
//Створення структури complex
typedef struct {
number realValue;
number imagValue;
} complex;
void setComplex (complex *);
void printComplex (complex *);
int main () {
complex dataValue;
printf("Complex number?\n");
setComplex(&dataValue);
printf("Reprezentation of the complex number:\n");
printComplex(&dataValue);
getch();
return 0;
}
//Встановлення значення комплексного числа
void setComplex(complex *c) {
printf("Real part:\n");
scanf("%d", &(c->realValue.x));
printf( "Image part:\n");
scanf("%d", &(c->imagValue.x));
}
//Виведення комплексного числа
void printComplex(complex *c) {
printf("%4d", c->realValue.x);
printf("%c",(c->imagValue.x < 0 ? '-' : '+'));
printf("%4di", abs(c->imagValue.x));
}

4. Приклад программи з використанням структур
Приклад
Ввести інформацію про студента (прізвище, ім'я)
3 бали за іспити
дата народження
Вивести цю інформацію та середній бал
#include <stdio.h>
typedef struct {
int Prog;
int Math;
int History;
} markss;
student nubipstudent[10];
typedef struct {
char name [12];
char surname [12];
markss mark;
/*struct {
int Prog;
int Math;
int History;
}mark;*/
struct {
int day;
int month;
int year;}birth;
} student;
student nubipstudent[10];
void printInformation(student any)
{
printf("\n Name\n");
printf("%s\n",any.name);
printf("%s\n",any.surname);
printf("\n 3 marks\n");
printf("%4d ",any.mark.Prog);
printf("%4d",any.mark.Math);
printf("%4d",any.mark.History);
printf("\n birthday\n");
printf("%4d",any.birth.day);
printf("%4d",any.birth.month);
printf("%6d",any.birth.year);
printf("\n rating\n");
printf("%.2f",(any.mark.Prog+any.mark.Math+any.mark.History)/3.0);
}
student getInformation()
{
student any;
printf("\n input name\n");
scanf("%s",&any.name);
printf("\n input surname\n");
scanf("%s",&any.surname);
printf("\n input 3 marks\n");
scanf("%d",&any.mark.Prog);
scanf("%d",&any.mark.Math);
scanf("%d",&any.mark.History);
printf("\n input birthday\n");
scanf("%d",&any.birth.day);
scanf("%d",&any.birth.month);
scanf("%d",&any.birth.year);
return any;
}
int main()
{
int q,k;
printf("Input quantity of person \n");
scanf ("%d",&q);
k=0;
printf("\nInput elenents of struct\n");
while (k<q)
{
nubipstudent[k]=getInformation();
k++;
}
k=0;
while (k<q)
{
printf("\n Person N %d\n",k+1);
printInformation(nubipstudent[k]);
k++;
}
return 0;
}


5. Використання структур (відео)
Шрифти
Розмір шрифта
Колір тексту
Колір тла
Кернінг шрифтів
Видимість картинок
Інтервал між літерами
Висота рядка
Виділити посилання
Вирівнювання тексту
Ширина абзацу