Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015

Тут можно читать онлайн Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - бесплатно полную версию книги (целиком) без сокращений. Жанр: Прочая старинная литература, издательство Вильямс, год 0101. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - описание и краткое содержание, автор Стивен Прата, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать книгу онлайн бесплатно, автор Стивен Прата
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

struct book gift= {.value = 18.90,

.author = "Philionna Pestle",

0.25};

Значение 0.25 присваивается члену value, поскольку он находится непосредственно после члена author в объявлении структуры. Новое значение 0.25 заменяет собой указанное ранее значение 18.90. Теперь, располагая базовыми знаниями, вы готовы расширить свой кругозор и ознакомиться с несколькими типами, в которых задействованы структуры. Вы увидите массивы структур, структуры структур, указатели на структуры и функции, которые обрабатывают структуры.

Массивы структур

Давайте расширим программу каталога книг для поддержки большего количества книг Очевидно, что каждая книга может быть описана одной переменной типа book. Чтобы описать две книги, необходимы две такие переменные и т.д. Для поддержки нескольких книг понадобится массив структур подобного рода, и его мы создадим в программе, показанной в листинге 14.2. (Если вы имеете дело с Borland C/C++, ознакомьтесь с врезкой “Borland С и плавающая запятая” далее в главе.)

572 глава 14

Структуры и память

В программе manybook.c применяется массив из 100 структур. Поскольку массив является объектом с автоматическим классом хранения, информация обычно размещается в стеке. Крупный массив такого рода требует области памяти приличного размера, что может вызвать проблемы. Если во время выполнения вы получаете сообщение об ошибке, возможно, уведомляющее о переполнении стека, то ваш компилятор, скорее всего, использует стандартный размер для стека, который слишком мал для этого примера. Чтобы исправить положение, вы можете с помощью опций компилятора установить размер стека в 10000, обеспечив достаточное место для данного массива структур, или же сделать массив статическим либо внешним (тогда он не будет размещаться в стеке); можно также уменьшить размер массива, к примеру, до 16. А почему мы изначально не выбрали массив небольшого размера? Причина в том, что вы должны знать об этой потенциальной проблеме с размером стека и уметь справляться с ней, когда она возникнет в будущей практике.

Листинг 14.2. Программа manybook.c

Структуры и другие формы данных 573 Borland С и плавающая запятая Ранние - фото 429

Структуры и другие формы данных 573

Borland С и плавающая запятая Ранние компиляторы Borland С пытались делать - фото 430

Borland С и плавающая запятая

Ранние компиляторы Borland С пытались делать программы более компактными за счет применения сокращенной версии функции scanf(), если в программах не использовались значения с плавающей запятой. Тем не менее, эти компиляторы (до версии Borland C/C++ 3.1 для DOS, но не Borland C/C++ 4.0) допускают просчет, если значения с плавающей запятой содержатся только внутри массива структур, как в случае листинга 14.2. В результате вы получаете сообщение, подобное следующему:

scanf : floating point formats not linked Abnormal program termination

scanf : форматы с плавающей запятой не подключены Аварийное завершение программы

Это можно обойти путем добавления в программу такого кода:

#include double dummy = sin(0.0);

Данный код приводит к принудительной загрузке версии scanf() с плавающей запятой.

Вот результаты пробного запуска:

Введите название книги.

Нажмите [enter] в начале строки, чтобы закончить ввод.

Му Life as a Budgie Теперь введите ФИО автора.

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

12.95

Введите название следующей книги.

...ввод информации о других, книгах...

Каталог ваших книг:

Му Life as a Budgie авторства Mack Zackles: $12.95

Thought and Unthought Rethought авторства Kindra Schlagmeyer: $43.50 Concerto for Financial Instruments авторства Filmore Walletz: $49.99 The CEO Power Diet авторства Buster Downsize: $19.25

574 глава 14

C++ Primer Plus авторства Stephen Prata: $59.99

Fact Avoidance: Perception as Reality авторства Polly Bull: $19.97

Coping with Coping авторства Dr. Rubin Thonkwacker: $0.02

Diaphanous Frivolity авторства Neda McFey: $29.99

Murder Wore a Bikini авторства Mickey Splats: $18.95

A History of Buvania, Volume 8 авторства Prince Nikoli Buvan: $50.04

Mastering Your Digital Watch, 5nd Edition авторства Miklos Mysz: $28.95

A Foregone Confusion авторства Phalty Reasoner: $5.99

Outsourcing Government: Selection vs. Election авторства Ima Pundit: $33.33

Для начала мы объясним, как объявлять массивы структур и получать доступ к индивидуальным членам. После этого мы проанализируем два аспекта программы.

Объявление массива структур

Объявление массива структур подобно объявлению любого другого вида массива, например:

struct book library[MAXBKS];

Здесь library объявляется как массив, содержащий MAXBKS элементов. Каждый элемент этого массива является структурой типа book. Таким образом, library [0] — одна структура типа book, library [1] — вторая структура типа book и т.д.

На рис. 14.2 приведена иллюстрация, которая способствует лучшему пониманию сказанного. Само имя library не является именем структуры; оно представляет собой имя массива, элементы которого — структуры типа struct book.

Рис 142 Маете структур Идентификация членов в массиве структур Для - фото 431

Рис. 14.2. Маете структур

Идентификация членов в массиве структур

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

Структуры и другие формы данных 575

Например:

library[0].value /*значение value, ассоциированное с первым элементом массива*/ library[4].title /‘значение title, ассоциированное с пятым элементом массива*/

Обратите внимание, что индекс массива указан после library, а не после имени члена:

library.value[2] // НЕПРАВИЛЬНО

library[2].value // ПРАВИЛЬНО

Причина использования конструкции library [2] .value состоит в том, что library [2] является именем переменной типа структуры, точно так же, как library [1] — это имя еще одной переменной типа структуры.

Кстати, что представляет следующая конструкция?

library[2].title[4]

Это пятый символ в названии книги (часть title [4]), которую описывает третья структура (часть library [2]). В приведенном примере это будет символ В. Данный пример показывает, что индексы, находящиеся справа от операции точки, применяются к индивидуальным членам, но индексы, расположенные слева от операции точки, относятся к массиву структур.

В итоге мы допустимы такие операторы:

library // массив структур типа book

library[2] // элемент массива, т.е. структура book

library[2].title // символьный массив (член title элемента library [2])

library[2].ti11е[4] // символ в массиве члена title

Давайте завершим рассмотрение программы.

Анализ программы

Основное отличие этой программы от первой заключается в том, что в ней включен цикл для чтения множества записей. Цикл начинается со следующего условия

while:

while (count < MAXBKS && s_gets(library[count].title, MAXTITL) != NULL && library[count].title[0] != '\n')

Выражение s_gets (library [count] .title, MAXTITL) читает строку для названия книги; это выражение принимает значение NULL, если функция s_gets() пытается прочитать символ, следующий за концом файла. Выражение library [count] . title [0] ! = ‘\0' проверяет, не является ли первый символ строки нулевым (т.е. не пустая ли строка). Если пользователь нажимает клавишу в начале строки, передается пустая строка и цикл завершается. В программе также предусмотрена проверка, которая не позволяет вводить больше записей для книг, чем допускает размер массива.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Стивен Прата читать все книги автора по порядку

Стивен Прата - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Язык программирования C. Лекции и упражнения (6-е изд.) 2015 отзывы


Отзывы читателей о книге Язык программирования C. Лекции и упражнения (6-е изд.) 2015, автор: Стивен Прата. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x