Очень часто в задачах нам нужно объявлять много переменных или массивов, чтобы описать свойства одного предмета. Например, нам нужно описать человека: его рост, возраст и вес. Нам для этого нужно три переменных, но все эти свойства можно поместить в структуру, которая будет хранить эти данные. Другими словами структура позволяет сгруппировать данные для их лучшего представления и хранения. Вот так бы выглядела эта структура в программе:
struct human { int height; int age; int weight; }; // точка с запятой обязательна
human - это название структуры. После структуры, в отличие от функции, ставится точка с запятой.
Переменные в структуре инициализировать нельзя. По факту мы создали
свой тип данных. Чтобы с ним работать, его нужно объявить в главной части программы:
1
2
3
4
5
6
7
8
9
10
11
12
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct human { int height; int age; int weight; }; int main() { struct human A; return 0; }
Теперь у нас есть переменная A с типом данных struct human. Чтобы получить доступ к переменным, лежащих в структуре, нам понадобиться оператор точка. Давайте введем данные и прибавим к каждой переменной 2. Результат выведем на экран. Код на Си:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct human { int height; int age; int weight; }; int main() { struct human A; scanf("%i%i%i", &A.height, &A.age, &A.weight); A.height += 2; A.age += 2; A.weight += 2; printf("%i %i %i", A.height, A.age, A.weight); return 0; }
В структурах можно хранить разные типы данных. Давайте к нашей структуре добавим еще и имя человека. Тогда ввод структуры будет выглядеть так:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct human { char name[20]; int height; int age; int weight; }; int main() { struct human A; scanf("%s%i%i%i", &A.name, &A.height, &A.age, &A.weight); return 0; }
Работа с таким массивом никак не отличается от работы с обычными массивами чисел, символов и так далее. Давайте создадим массив структур из предыдущего примера, но оставим только имя и возраст человека. Нам даны данные о n(n ≤ 20) людях, нужно вывести через пробел имена только совершеннолетних людей. Код на Си:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct human { char name[20]; int age; }; int main() { int n, i; struct human A[20]; scanf("%i", &n); for (i = 0; i < n; i++) { scanf("%s%i", &A[i].name, &A[i].age); } for (i = 0; i < n; i++) { if (A[i].age >= 18) { printf("%s ", A[i].name); } } return 0; }
Как мы видим, структуры очень удобны и могут применяться во множестве различных задач.
Code.C
© Copyright Павел Калашников 2021
обратная связь code.c04@mail.ru