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

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

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

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

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

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

Интервал:

Закладка:

Сделать

11. Напишите и протестируйте функцию Fibonacci(), в которой для вычисления чисел Фибоначчи вместо рекурсии применяется цикл.

10

Массивы и указатели

В ЭТОЙ ГЛАВЕ...

• Ключевое слово: static

• Операции: &* (унарная)

• Создание и инициализация массивов

• Указатели (на основе сведений, которые вам уже известны) и их отношение к массивам

• Написание функций, обрабатывающих массивы

• Двумерные массивы

368 Глава 10

Л

юди обращаются к компьютерам для решения таких задач, как отслеживание ежемесячных расходов, ежедневного количества осадков, ежеквартальных продаж и еженедельного веса. Предприятия применяют компьютеры для управления платежными ведомостями, складом и транзакциями от заказчиков. Будучи программистом, вы неизбежно вынуждены иметь дело с большими объемами связанных данных. Часто массивы предлагают нанлучщнй способ обработки таких данных в эффективной и удобной манере. Вводные сведения о массивах были представлены в главе 6, а в этой главе массивы рассматриваются более подробно. В частности, мы исследуем приемы написания функций для обработки массивов. Такие функции позволяют распространить на массивы преимущества модульного программирования. По ходу дела вы сможете увидеть тесную связь между массивами и указателями.

Массивы

Вспомните, что массив состоит из последовательности элементов одного типа данных. Для сообщения компилятору о том, что нужен массив, используется объявление В объявлении массива указывается, сколько элементов содержит массив и какого типа эти элементы. Располагая такой информацией, компилятор может подходящим образом создать массив. Элементы массива могут иметь те же самые типы, что и обычные переменные. Рассмотрим следующие примеры объявлений массивов:

Квадратные скобки идентифицируют candy и другие имена в качестве массивов - фото 268

Квадратные скобки ([]) идентифицируют candy и другие имена в качестве массивов, а число в квадратных скобках задает количество элементов в массиве.

При доступе к элементам в массиве вы указываете отдельный элемент с применением его номера, который также называется индексом. Нумерация элементов начинается с 0. Следовательно, candy [0] — это первый элемент массива candy, a candy [364] - 365-й, и последний, элемент массива.

Это довольно хорошо знакомо, так что давайте ознакомимся с чем-нибудь новым.

Инициализация

Массивы часто используются для хранения данных, необходимых для программы. Например, 12-элементный массив может хранить количество дней в каждом месяце. В случаях подобного рода удобно инициализировать массив в начале программы. Посмотрим, как это делается.

Вы знаете, как можно инициализировать однозначные переменные (иногда называемые молярными) в объявлениях с помощью таких выражений, как показанные ниже:

int fix = 1; float flax = PI * 2;

Здесь предполагается, что макрос PI был определен ранее. Язык С расширяет инициализацию на массивы посредством нового синтаксиса:

Массивы и указатели 369

Нетрудно заметить что массив инициализируется с применением списка значений - фото 269

Нетрудно заметить, что массив инициализируется с применением списка значений, разделяемых запятыми, который заключен в квадратные скобки. При желании между запятыми и значениями можно помещать пробелы. Первому элементу (powers [0]) присваивается значение 1, второму (powers [1]) — значение 2 и т.д. (Если ваш компилятор отклоняет такую форму инициализации как синтаксически некорректную, значит, он был разработан до выхода стандарта ANSI. Проблему должно решить помещение перед объявлением массива ключевого слова static, которое более подробно обсуждается в главе 12.)

В листинге 10.1 приведена короткая программа, которая выводит количество дней в каждом месяце.

Листинг 10.1. Программа day mon1.c

Вывод выглядит следующим образом Месяц 1 имеет 31 день дней Месяц 2 имеет - фото 270

Вывод выглядит следующим образом:

Месяц 1 имеет 31 день (дней) .

Месяц 2 имеет 2 8 день (дней) .

Месяц 3 имеет 31 день (дней) .

Месяц 4 имеет 30 день (дней).

Месяц 5 имеет 31 день (дней) .

Месяц 6 имеет 3 0 день (дней) .

Месяц 7 имеет 31 день (дней).

Месяц 8 имеет 31 день (дней) .

Месяц 9 имеет 30 день (дней) .

Месяц 10 имеет 31 день (дней) .

Месяц 11 имеет 31 день (дней) .

Месяц 12 имеет 31 день (дней) .

Не особо впечатляющая программа, но она сообщает некорректные сведения только для одного месяца раз в четыре года. Программа инициализирует массив days[] списком разделенных запятыми значений, заключенным в квадратные скобки.

Обратите внимание, что в этом примере для представления размера массива используется символическая константа MONTHS. Это распространенная и рекомендованная практика. Например, если вдруг мир перейдет на 13-месячный календарь, понадобится только модифицировать оператор #define, но не отслеживать все места в программе, где задействован размер массива.

370 Глава 10

НА ЗАМЕТКУ! Использование констант в массивах

Иногда приходится применять массив, предназначенный только для чтения. То есть программа будет извлекать из него значения, но не пытаться записывать новые значения в этот массив. В подобных случаях вы можете, да и должны, использовать ключевое слово const во время объявления и инициализации массива. Таким образом, в листинге 10.1 лучше указать следующее объявление:

const int days [MONTHS] = { 31, 28, 31,30, 31, 30, 31, 31,30, 31,30, 31};

Это заставляет программу трактовать каждый элемент массива как константу. Как и в случае обычных переменных, для инициализации данных const вы должны применять объявление, поскольку из-за наличия const присвоить им значения позже не получится. Теперь, когда это известно, мы можем использовать константы в последующих примерах.

А что, если вы забудете инициализировать массив? В листинге 10.2 показано, что произойдет.

Листинг 10.2. Программа no data.с

Ниже приведен результирующий вывод одного пробного запуска ваши результаты - фото 271

Ниже приведен результирующий вывод одного пробного запуска (ваши результаты могут отличаться):

i no_data[i]

0 0

1 4204937

2 4219854

3 2147348480

Элементы массива похожи на обычные переменные — если вы не инициализируете их, они могут иметь любые значения. Компилятору разрешено просто брать значения, которые уже находятся в соответствующих ячейках памяти; именно по этой причине ваши результаты могут отличаться от показанных выше.

НА ЗАМЕТКУ! Пояснение по поводу классов хранения

Массивы, как и другие переменные, могут быть созданы с применением различных классов хранения. Эта тема исследуется в главе 12, но пока достаточно знать, что в текущей главе описаны массивы, которые принадлежат к автоматическому классу хранения. Это означает, что они объявлены внутри функции без указания ключевого слова static. Все переменные и массивы, использованные до сих пор в книге, относятся к автоматическому классу хранения. Причина упоминания здесь классов хранения заключается в том, что иногда разные классы хранения обладают отличающимися свойствами, поэтому вы не должны распространять все сказанное в настоящей главе на другие классы хранения. В частности, переменные и массивы с некоторыми другими классами хранения, не будучи инициализированными, имеют содержимое, установленное в 0.

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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