Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КУРС Программирование на Си.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
606.21 Кб
Скачать

Структуры

Структуры (struct) в Си являются аналогом записей (record) в Паскале. Типичный пример описания структуры:

struct point {int x,y;} /* точка на плоскости с целочисленными координатами; х и у являются полями структуры point*/

Приведенный пример является именно описанием самой структуры, описание соответствующей переменной выглядит следующим образом:

struct point a;

Обратите внимание, что переменная описывается не как просто point а, а именно как struct point а.

Переменные можно описывать и при описании самой структуры:

struct point {int x,y;} a,b,c; /* описание структуры point и трех переменных a, b и с*/

Доступ к элементам структуры производится так же, как и в Паскале, с указанием имени переменной и имени поля. Пример: а.х , поле х

переменной а.

При описании указателя на структуру (такие указатели часто используются для организации списков, деревьев и других динамических структур данных, о которых будет рассказано далее) доступ к полю можно осуществлять посредством операции ?>. Приведем соответствующий пример. Пусть у нас уже имеется описание структуры point (см, выше), и мы описываем указатель на эту структуру: struct point *р. Для доступа к полю х в этом случае необходимо использовать запись (*р).х,но то же самое можно записать и короче: р?>х.

Структуры могут "вкладываться" друг в друга, это обычно делается для более точного описания объекта. Так, можно описать окружность посредством одной структуры struct circl {int x,y,r; }, но запись struct circl {struct point centre; int r; } изящнее. Хотя за это придется "платить" усложнением доступа к полям структуры. В первом случае при описании переменной struct circl о для доступа к полю х достаточно написать просто о.х, а во втором требуется запись о.centre.х. Впрочем, в случае более сложных примеров (а мы приводим совсем простые) такие "усложнения" описания типов обычно оправданны, ибо улучшают читабельность программы. В заключение этого раздела приведем пример описания массива структур. Ничего особенного и нового в этом описании нет, но массивы структур приходится использовать часто, и мы хотим, чтобы соответствующий пример был у вас перед глазами. Итак, если у нас уже имеется описание структуры point, то описание массива из десяти точек выглядит следующим образом: struct point m[10]. Доступ к элементам массива и их полям производится следующим образом: m [ i ].х.

# include <stdio.h>

main()

{

int i;

struct tel {char s[10];int num;} t;

FILE *f;

f=fopen("1.txt", "wb");

for (i=0;i<3;i++)

{

scanf("%s",&t.s);

scanf("%d",&t.num);

fwrite(&t, sizeof(t),1,f);

}

fclose(f);

}

Бинарные файлы. Структуры.

1. Дан файл f, компоненты которого являются действительными числами. Найти: а) сумму компонент

файла f; б) последнюю компоненту файла.

2. Дан файл f, компоненты которого являются действительными числами. Найти: а) наибольшее из

значений компонент; б) наименьшее из значений компонент с четными номерами; в) наибольшее из

значений модулей компонент с нечетными номерами; г) разность первой и последней компонент

файла.

3. Дан файл f, компоненты которого являются целыми числами. Найти количество квадратов простых чисел среди компонент.

4. Дано натуральное n. Записать в файл g целые числа При i=1,2,...,n значение равно: а) i; б) i!;

5. Описать, используя структуру данных запись, телефонную книгу. Составить программу, выдающую список абонентов, имеющих телефонный номер, начинающийся на 331.

6. Описать, используя структуру данных запись, таблицу дат и событий русской истории. Составить программу, выдающую список событий 19 века.

7. Описать, используя структуру данных запись, школьный класс (Фамилия и инициалы, дата рождения, месяц рождения, год рождения). Составить программу, выдающую список учеников, рожденных в мае месяце.

8. Описать, используя структуру данных запись, выборы (фамилия кандидата и количество

набранных голосов). Всего избирателей 2000. Составить программу, определяющую кто из делегатов прошел или необходимо проводить повторные выборы (должно быть набрано 1/3 голосов от общего количества).

.