Язык Си - руководство для начинающих.

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

     Гвен Гленн хочет напечатать опись своих книг. Она хотела бы занести в нее различную информацию о каждой книге: ее название, фамилию автора, издательство, год издания, число страниц, тираж и цену. Теперь некоторые из этих элементов, такие, как название, можно записать в массив строк. Другие элементы требуют массив целого типа или массив типа 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(" Введите, пожалуйста, название книги.\n");

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

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

Gets(libry.author);

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

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

Printf("%s, %s: %p.2f \n", libry.title, libry.autor,

                                        libry.value);

Printf("%s: \" %s \" \(%p.2f\)\n", libry.author,

                            libry.title, libry.value);

}

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

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

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

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

Д. Кнут.

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

5р.67.

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

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

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

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

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

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