Структура – это фиксированное число элементов одного или нескольких типов. Т.е. в отличие от массивов, в которых содержатся элементы одного типа, в структурах могут содержаться элементы как одного, так и разных типов. Элементами структуры могут быть базовые типы, массивы, указатели, структуры и т.д. Элементы структуры вместе с их описанием называются полями. Над полями можно выполнять действия, допустимые для данных этого типа.
Все структуры должны быть описаны до использования. Все идентификаторы полей в структуре должны быть различными.
Например, структуру Воок можно описать следующим образом:
struct card {char аuthor [15]; char title[20]; int year ; float cena;} Book;
или
struct card { char аuthor [15]; char title[20]; int year ; float cena;};
stuct card Book;
Тип структуры (например, card) вводит только шаблон и с его именем не связан никакой конкретный объект. Объект (например, структура Book) должен быть также объявлен. Обращение к полю структуры выполняется с помощью составного имени, которое состоит из имени_структуры . имени_поля. Например ввод данных с клавиатуры :
scanf (“%s,%s,%f”, Book.author, Book.title, &Book.cena);
Можно создавать массив структур:
Struct card bibl[100];
Обращение к полю элемента массива:
bibl[i].title;
Пример: Дана информация о 10 товарах: название, цена, количество. Вычислить общую стоимость товара, название которого вводится с клавиатуры.
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define n 10
main()
{
int i,k; float sum; //k-количество искомых товаров, sum- их общая стоимость.
struct tov {char name[10]; float c; int kol;} t; //Объявление структуры t
struct tov mag[n]; //объявление массива структур mag[n]
char nazv[10]; //Наименование искомого товара
clrscr();
printf(“\n Введите информацию о товарах \n“);
for (i=0; i<n; i++)
{ printf("\n наименование , цена, количество : ");
scanf("%s%f%d",t.name,&t.c,&t.kol);//Заполнение информацией структуры t
mag[i]=t; //Присвоение i-му элементу массива структуры t целиком
}
printf("\n введите искомый товар: ");
scanf("%s", nazv);
for (i=0,sum=0,k=0; i<n; i++)
if (strcmp(mag[i].name, nazv)==0)
{sum+=mag[i].c*mag[i].kol;
k++;
}
printf("Товаров %s %d, их стоимость %5.2f ", nazv, k, sum);
getch();
}
1. Какие типы данных относятся к простым, какие к составным?
2. Как объявляются структуры и чем отличается структура от массива?
3 Как обращаться к полям структуры?
4. Какие операции допустимы над структурой в целом?