8.1. Определение структуры

Структура – это фиксированное число элементов одного или нескольких типов. Т.е. в отличие от массивов, в которых содержатся элементы одного типа, в структурах могут содержаться элементы как одного, так и разных типов. Элементами структуры могут быть базовые типы, массивы, указатели, структуры и т.д. Элементы структуры вместе с их описанием называются полями. Над полями можно выполнять действия, допустимые для данных этого типа.

Все структуры должны быть описаны до использования. Все идентификаторы полей в структуре должны быть различными.

Например, структуру Воок можно описать следующим образом:

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();

}

 

8.2. Контрольные вопросы

1. Какие типы данных относятся к простым, какие к составным?

2. Как объявляются структуры и чем отличается структура от массива?

3 Как обращаться к полям структуры?

4. Какие операции допустимы над структурой в целом?