ТИПОВАЯ ЗАДАЧА: ИНВЕНТАРИЗАЦИЯ КНИГ

ТИПОВАЯ ЗАДАЧА: ИНВЕНТАРИЗАЦИЯ КНИГ

     Гвен Гленн хочет напечатать опись своих книг. Она хотела бы занести в нее различную информацию о каждой книге: ее название, фамилию автора, издательство, год издания, число страниц, тираж и цену. Теперь некоторые из этих элементов, такие, как название, можно записать в массив строк. Другие элементы требуют массив целого типа или массив типа float. Если работать с семью различными массивами и следить за веси содержащейся в них информацией, можно сойти с ума, особенно если Гвен желает иметь несколько списков - список, упорядоченный по названиям, список, упорядоченный по авторам, по цене и т. д. Гораздо лучше было бы использовать один массив, в котором каждый элемент содержал бы всю информацию о книге.

     Но какой тип данных может содержать строки и числа одновременно и как-то хранить эту информацию раздельно? Ответом должна быть, конечно, тема данной главы - структура. Чтобы посмотреть, как создается структура и как она работает, начнем с небольшого примера. Для упрощения задачи введем два ограничения: первое - мы включим в опись только название книги, фамилию автора и цену; второе - ограничим опись до одной книги. Если у вас больше книг, не беспокойтесь; мы покажем, как расширить эту программу.

Сначала посмотрите на программу и ее результат, а потом мы рассмотрим основные вопросы.

/* инвентаризация одной книги */

#include <stdio.h>

#define MAXTIT 41     /* максимальная длина названия + 1 */

#define MAXAUT 31     /* максимальная длина фамилии автора + 1 */

struct book {         /* шаблон первой структуры: book

                            является именем типа структуры */

char title [MAXTIT];  /* символьный массив для названия */

char author [MAXAUT]; /* символьный массив для фамилии автора */

float value;          /* переменная для хранения цены книги */

};                    /* конец шаблона структуры */

main( )

{

struct book libry;    /* описание переменной типа book */

printf(" Введите, пожалуйста, название книги. ");

gets(libry. title); /* доступ к элементу title */

printf(" Теперь введите фамилию автора. ");

gets(libry.author);

printf(" Теперь введите цену. ");

scanf(" %f ", &libry.value);

printf("%s, %s: %p.2f ", libry.title, libry.autor,

                                        libry.value);

printf("%s: " %s " (%p.2f) ", libry.author,

                            libry.title, libry.value);

}

Вот образец работы программы:

Введите, пожалуйста,  название книги.

Искусство программирования для ЭВМ

Теперь введите фамилию автора.

Д. Кнут

Теперь введите цену.

5р.67

Искусство программирования для  ЭВМ,  Д. Кнут: 5р.67

Д. Кнут: "Искусство программирования для ЭВМ"  (5р. 67)

Созданная нами структура состоит из трех частей: одна для названия, другая для фамилии автора и третья для цены. Мы должны изучить три основных вопроса:

1. Как устанавливать формат или "шаблон" для структуры.

2. Как объявлять переменную, соответствующую этому шаблону.

3. Как осуществлять доступ к отдельным компонентам структурной переменной.