Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Название:Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Автор:
- Жанр:
- Издательство:Вильямс
- Год:0101
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание
Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
000090000000589985045200000000
009000000000589985004520000000
000000000000589185000452000000
000000000000589985000045200000
555555555555589985555555555555
888888888888589985888888888888
999909999999999999999939999999
888888888888589985888888888888
Файловый ввод-вывод 563
13. Выполните упражнение 12, используя массивы переменной длины вместо стандартных массивов.
14. Цифровые изображения, особенно передаваемые по радиоканалу космическим аппаратом, могут содержать помехи. Добавьте в программу из упражнения 12 функцию подавления помех. Она должна сравнивать каждое значение с соседними значениями, расположенными слева и справа, снизу и сверху. Если значение отличается более чем на 1 от своих соседей, оно должно быть заменено средним значением всех соседних величин. Среднее значение должно быть округлено до ближайшего целого. Обратите внимание, что точки, находящиеся на границах, имеют меньше четырех соседей, поэтому они требуют специальной обработки.
14
Структуры и другие формы данных
В ЭТОЙ ГЛАВЕ...
• Ключевые слова: struct, union, typedef
• Операции: . ->
• Структуры в языке С и способы создания шаблонов и переменных типа с труктур
• Доступ к членам структуры и написание функций для обработки структур
• Средство typedef в языке С
• Объединения и указатели на функции
566 Глава 14
О
дним из наиболее важиых шагов при проектировании программы является выбор подходящего способа представления данных. Во многих случаях простой переменной или даже массива оказывается недостаточно. Язык С позволяет расширить возможности представления данных с помощью переменных типа структур. В своей базовой форме структура С является достаточно гибким средством, чтобы представлять широкое разнообразие данных, и она позволяет изобретать новые формы. Если вы знакомы с записями в языке Pascal, то вам будет легко освоиться со структурами. Если же нет, то настоящая глава послужит введением в структуры С. Давайте рассмотрим конкретный пример, который покажет, почему могут понадобиться структуры, и продемонстрирует их создание и применение.
Учебная задача: создание каталога книг
Гвен Глен желает сформировать каталог своих книг Она хотела бы располагать разнообразной информацией по каждой книге: название, автор, издательство, дата регистрации авторского права, количество страниц и стоимость книги. Некоторые из этих элементов данных, такие как названия, могут храниться в массивах строк. Другие элементы требуют массива значений типа int или float. При наличии семи разных массивов отслеживание всех данных может стать затруднительным, особенно если учесть, что Гвен заинтересована в генерации нескольких списков книг: с сортировкой по названию, по авторам, по цене и т.д. Самое лучшее решение предусматривает использование одного массива, каждый элемент которого содержит полные сведения об одной книге.
Затем Гвен понадобится форма данных, которая может содержать строки и числа, но каким-то образом разделяя эту информацию. Структура С отвечает таким требованиям. Чтобы посмотреть, как создать структуру подобного рода, и каким образом она работает, мы начнем с ограниченного примера. Для упрощения задачи мы наложим два ограничения. Во-первых, мы будем включать только название, автора и текущую стоимость. Во-вторых, мы ограничим каталог одной книгой. Однако не стоит переживать по поводу этого ограничения, поскольку вскоре мы расширим программу.
Взгляните на программу, показанную в листинге 14.1, и на ее вывод. Затем прочитайте объяснение основных ее особенностей.
Листинг 14.1. Программа book.с
Структуры и другие формы данных 567
Как и в предыдущих главах, мы применяем функцию s_gets() для удаления символа новой строки, который функция fgets() обычно оставляет во входной строке. Ниже приведены результаты пробного запуска:
Введите название книги.
Chicken of the Andes Теперь введите ФИО автора.
Disma Lapoult Теперь введите цену.
2 9.99
Chicken of the Andes авторства Disma Lapoult: $29.99 Disma Lapoult: "Chicken of the Andes" ($29.99)
Готово.
Структура, созданная в листинге 14.1, имеет три части (называемые членами или полями) — для хранения названия книги, для хранения имени автора и для хранения цены. Вы должны овладеть следующими тремя навыками:
• настройка формата или схемы для структуры;
• объявление переменной, соответствующей такой схеме;
• обеспечение доступа к индивидуальным компонентам переменной типа структуры.
Объявление структуры
Объявление структуры представляет собой генеральный план, который описывает способ формирования структуры. Объявление структуры выглядит следующим образом:
568 Глава 14
struct book {
char title[MAXTITL]; char author[MAXAUTL]; float value;
};
Это объявление описывает структуру, образованную из двух символьных массивов и одной переменной типа float. Оно не создает реальный объект данных, но определяет, из чего состоит такой объект. (Иногда мы будем ссылаться на объявление структуры как на шаблон, потому что оно показывает, каким образом будут храниться данные. Если вы слышали о шаблонах C++, то знайте, что они представляют собой другой, более претенциозный случай использования этого понятия.) Давайте обратимся к деталям объявления. Первым идет ключевое слово struct. Оно указывает, что за ним следует структура. Далее находится необязательный дескриптор — слово book — сокращенная метка, которую можно применять для ссылки на эту структуру. Таким образом, позже мы имеем следующее объявление:
struct book library;
Оно объявляет library как переменную типа структуры, которая использует схему структуры book.
После этого в объявлении структуры указан список членов, заключенный в фигурные скобки. Каждый член описан собственным объявлением, которое оканчивается точкой с запятой. Например, порция названия книги (title) представляет собой массив, содержащий MAXTITL элементов типа char. Членом структуры может быть любой тип данных С, в том числе и другая структура.
Точка с запятой после закрывающей фигурной скобки завершает определение шаблона структуры. Это объявление можно разместить за пределами любой функции (внешне), как было сделано в здесь, либо внутри определения функции. Если объявление структуры находится внутри функции, ее дескриптор может применяться только в рамках этой функции. Если объявление является внешним, оно доступно всем функциям, которые следуют за этим объявлением в файле. Например, во второй функции можно было бы определить:
Читать дальшеИнтервал:
Закладка: