Структуры

Структура - это набор из одной или более переменных, возможно различных типов, сгруппированных под одним именем для удобства обработки. Структуры - это составной объект, в который входят элементы любых типов(за исключением функций в языке С). В отличие от массива, который является однородным объектом, структура может быть неоднородной. Тип структуры определяется записью вида:

struct [Тег] { ТипДанных Описатель1;

………

ТипДанных ОписательN; }[СписокИдентификаторов]

В структуре обязательно должен быть указан хотя бы один компонент. ТипДанных указывает тип структуры для объектов, находящихся в описателях. В простейшей форме описатели представляют собой идентификаторы или массивы. Наличие тега необязательно, тег является идентификатором структуры.

Пример объявления структур:

struct koord{ double x,y; } s1, s2, sm[9];struct { int year;char moth, day; } date1, date2;

Переменные s1, s2 определяются как структуры, каждая из которых состоит из двух компонент х и у. Переменная sm определяется как массив из девяти структур. Каждая из двух переменных date1, date2 состоит из трех компонентов year, moth, day. >p>

Наличие СпискаИдентификаторов в записи типа структуры также необязательно. Объявление СпискаИдентификаторов, как структур, допускается с использованием тега структуры, описанной ранее, в форме:

struct Тег СписокИдентификаторов;

Пример объявления структур:

struct studeut st1,st2;

Использование тегов структуры необходимо для описания рекурсивных структур. Ниже рассматривается использование рекурсивных тегов структуры.

struct node { int data;struct node * next; } st1_node;

Тег структуры node действительно является рекурсивным, так как он используется в своем собственном описании, т.е. в формализации указателя next. Структуры не могут быть прямо рекурсивными, т.е. структура node не может содержать компоненту, являющуюся структурой node, но любая структура может иметь компоненту, являющуюся указателем на свой тип, как и сделано в приведенном примере.

Инициализация структуры осуществляется при помощи заключенного в фигурные скобки списка инициализаторов для компонент структуры. Инициализаторы даются по возрастанию номеров компонентов.

Пример:

struct ft{ int a;

char s[12];

float g;} f={6,”Hello”,5.72};

Доступ к компонентам структуры осуществляется с помощью указания имени структуры и следующего через точку имени выделенного компонента, например:

st1.name=”Иванов”;st2.id=st1.id;st1_node.data=st1.age;

Пример: Дан массив из 5 записей. Каждая запись содержит три поля: первое поле – название продукции; второе поле – количество продукции; третье – год выпуска.

Вывести на экран список и количество продукции, год выпуска которой не меньше 1997 и не больше 1999г. #include<stdio.h>#include<conio.h>void main(){const N=3; //описание размера массива структурstruct tovar{char nazv[10]; // описание типа структуры int kol; int god; };static tovar tv[N]; // описание массива структур tv из N элементовint M;int I,J; //параметры циклов //ввод элементов cтруктурыfor (I=0;I<N;I++) {printf("Bведите [%d] элементы структуры\n",I);scanf("%s %d %d",&tv[I].nazv,&tv[I].kol, &tv[I].god);}printf("Наименование Кол-во Год выпуска:\n"); for (I=0;I<N;I++) if ((tv[I].god>=1997)&&(tv[I].god<=1999)) {printf("%-10s %6d %6d",tv[I].nazv, tv[I].kol,tv[I].god); printf("\n");} getch();}

Пример: Дан массив из 5 записей. Каждая запись содержит три поля: первое поле – название продукции; второе поле – количество продукции; третье – год выпуска.

Вывести на экран название и количество продукции, которой в наличии больше всего и год выпуска которой не превышает 1997г.

#include<stdio.h>

#include<conio.h>

void main()

{

const N=3; //описание размера массива структур

struct tovar{char nazv[10]; // описание типа структуры

int kol;

int god;

};

static tovar tv[N]; // описание массива структур tv из N элементов

int MAX=0,M;

int I,J; //параметры циклов

//ввод элементов cтруктуры

for (I=0;I<N;I++)

{printf("Bведите [%d] элементы структуры\n",I);

scanf("%s %d %d",&tv[I].nazv,&tv[I].kol,

&tv[I].god);}

// нахождение начального значения МАХ

for (I=0;I<N;I++)

if (tv[I].god>=1997)

{ MAX=tv[I].kol;

M=I;

break;

}

//нахождение максимального количества

for (I=M+1;I<N;I++)

if (tv[I].god>=1997)

if (tv[I].kol>MAX)

MAX=tv[I].kol;

//Вывод результатов

printf("В наличии больше всего:\n");

printf("Наименование Кол-во Год выпуска:\n");

for (I=0;I<N;I++)

if (tv[I].god>=1997)

if (tv[I].kol==MAX)

{printf("%-10s %6d %6d",tv[I].nazv,tv[I].kol,tv[I].god);

printf("\n");}

getch();

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: