ББК 32.973-018.1
Д94
Д94
Дейл, Нелл.
Программирование на C++ / Н. Дейл, Ч. Уимз, М. Хедингтон ; пер. с англ.
А. С. Цемахмана. — 2-е изд., эл. — 1 файл pdf : 674 с. — Москва : ДМК Пресс,
2023. — (Учебник). — Систем. требования: Adobe Reader XI либо Adobe Digital
Editions 4.5 ; экран 10". — Текст : электронный.
ISBN 978-5-89818-342-4
Книга рассчитана на тех, кто нуждается в понятном и доступном введении в язык C++,
и может использоваться как самоучитель. Она также рассказывает о компьютерах и алгоритмическом
решении задач, поэтому может служить в качестве первого учебника программирования.
Авторы убедительно показывают, что темы, когда-то считавшиеся слишком
сложными для вводного курса по С++ и объектно-ориентированному программированию,
можно успешно объяснять на ранних стадиях обучения.
Книга является удачным выбором для первого знакомства с С++. Материал излагается
в строгой, но доступной для начинающего программиста форме. Авторы приводят многочисленные
откомпилированные и проверенные упражнения с ответами.
Издание предназначено для пользователей ПК (от начального до среднего уровня),
начинающих программистов, школьников, студентов и преподавателей информатики.
ББК 32.973-018.1
Электронное издание на основе печатного издания: Программирование на C++ / Н. Дейл, Ч. Уимз,
М. Хедингтон ; пер. с англ. А. С. Цемахмана. — Москва : ДМК Пресс, 2007. — 672 с. — (Учебник). —
ISBN 5-93700-008-0. — Текст : непосредственный.
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и
какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических ошибок
все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых
сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием
книги.
В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами защиты авторских
прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации.
ISBN 978-5-89818-342-4
© Перевод на русский язык,
оформление. ДМК Пресс
Стр.5
Содержание
Предисловие .........................................................................................................15
Глава I. Введение в программирование и решение задач ..........21
Введение в программирование .......................................................................22
Как пишутся программы ..........................................................................................22
Что такое язык программирования ...............................................................27
Устройство компьютера .....................................................................................30
Методика решения задач .................................................................................35
Задавайте вопросы .................................................................................................36
Находите привычные ориентиры ............................................................................36
Решайте по аналогии ..............................................................................................36
Анализ цели и средств ............................................................................................37
«Разделяй и властвуй» ............................................................................................38
Метод «строительных плит» ...................................................................................38
Слияние решений ....................................................................................................38
Мысленный барьер: страх сделать первый шаг .....................................................40
Алгоритмическое решение задачи ........................................................................40
Итоги главы ............................................................................................................40
Глава II. Синтаксис, семантика и разработка
программ на C++ ..............................................................................42
Элементы программ на С++ ..............................................................................43
Структура программы .............................................................................................43
Синтаксис и семантика ...........................................................................................45
Синтаксические шаблоны .......................................................................................47
Стр.6
6
Программирование на С++
Называем элементы программ: идентификаторы .................................................49
Данные и их типы.....................................................................................................50
Описываем элементы программы: объявления ......................................................54
Начинаем действовать: выполняемые выражения .................................................58
Сверх минимума: добавляем комментарии к программе .....................................64
Построение программы .....................................................................................65
Блоки или составные выражения ............................................................................67
Препроцессор С++ ..................................................................................................69
Пример программирования. «Автопробег» ................................................70
Советы по тестированию и отладке ...............................................................73
Итоги главы ............................................................................................................73
Быстрая самопроверка ...........................................................................................74
Упражнения для подготовки к экзамену .................................................................76
Упражнения для разминки ......................................................................................80
Задачи по программированию ..............................................................................81
Глава III. Арифметические выражения,
вызов функций и вывод ..............................................................83
Арифметические выражения.............................................................................84
Правила приоритета ...............................................................................................84
Неявное приведение и явное преобразование типов ...........................................85
Вызов функций и библиотечные функции ...................................................88
Функции, возвращающие значение ......................................................................88
Библиотечные функции ...........................................................................................90
Функции типа void ...................................................................................................91
Форматирование вывода ..................................................................................92
Вставка пустых строк ...............................................................................................93
Вставка пробелов внутри строки ............................................................................94
Манипуляторы .........................................................................................................95
Пример программирования. «Измерения по карте» ............................. 100
Советы по тестированию и отладке ............................................................. 103
Итоги главы .......................................................................................................... 103
Быстрая самопроверка ........................................................................................ 104
Упражнения для подготовки к экзамену .............................................................. 105
Упражнения для разминки ................................................................................... 108
Задачи по программированию ........................................................................... 110
Глава IV. Программный ввод и процесс разработки программного
обеспечения .................................................................... 112
Ввод данных в программу ............................................................................. 113
Потоки ввода и операция извлечения ................................................................. 113
Маркер считывания и символ новой строки ....................................................... 116
Считывание символьных данных с помощью get ................................................ 117
Стр.7
Содержание
7
Пропуск символов с помощью ignore .................................................................. 120
Интерактивный вводвывод ............................................................................ 121
Неинтерактивный вводвывод ....................................................................... 122
Файловый вводвывод ..................................................................................... 123
Что такое файл ..................................................................................................... 123
Использование файлов ........................................................................................ 124
Пример программы с использованием файлов .................................................. 127
Ошибка ввода ..................................................................................................... 128
Разработка программного обеспечения ................................................... 130
Функциональная декомпозиция ................................................................. 130
Программные модули........................................................................................... 132
Объектноориентированная разработка ................................................... 133
Пример программирования. «Средневзвешенное значение
экзаменационных оценок» ........................................................................... 136
Тестирование и отладка ................................................................................. 139
Советы по тестированию и отладке .................................................................... 141
Итоги главы ........................................................................................................... 141
Быстрая самопроверка ........................................................................................ 142
Упражнения для подготовки к экзамену .............................................................. 143
Упражнения для разминки ................................................................................... 145
Задачи по программированию ........................................................................... 147
Глава V. Управляющие структуры: условия, логические выражения,
выбор ................................................................................. 149
Поток управления .............................................................................................. 150
Выбор .................................................................................................................... 150
Условия и логические выражения ................................................................. 151
Логические выражения ........................................................................................ 151
Приоритет операций ............................................................................................ 158
Операции сравнения и типы с плавающей точкой ............................................. 160
Условный оператор............................................................................................ 160
Условный оператор в форме IfThenElse ............................................................ 160
Применение блоков в условном операторе ....................................................... 162
Условный оператор в форме IfThen .................................................................... 163
Одна распространенная ошибка ........................................................................ 165
Вложенные условные операторы ............................................................... 165
Висячее else ........................................................................................................... 168
Проверка состояния потока вводавывода ............................................... 169
Пример программирования. «Результат экзамена» .............................. 172
Тестирование и отладка ................................................................................... 175
Этап решения задачи: сквозной контроль алгоритма ....................................... 175
Этап реализации .................................................................................................. 178
Автоматическая проверка при компиляции и выполнении ................................ 182
Стр.8
8
Программирование на С++
Советы по тестированию и отладке .................................................................... 182
Итоги главы ........................................................................................................... 184
Быстрая самопроверка ........................................................................................ 185
Упражнения для подготовки к экзамену .............................................................. 186
Упражнения для разминки ................................................................................... 189
Задачи по программированию ........................................................................... 192
Глава VI. Циклы ................................................................................................... 195
Оператор While ................................................................................................... 196
Этапы выполнения цикла................................................................................. 197
Циклы с While ...................................................................................................... 198
Циклы, управляемые счетчиком ........................................................................... 198
Циклы, управляемые событием............................................................................ 199
Циклические подзадачи ....................................................................................... 202
Как проектировать циклы ............................................................................... 205
Проектирование потока управления ................................................................. 205
Проектирование процесса внутри цикла ........................................................... 206
Выход из цикла .................................................................................................... 207
Вложенная логика ............................................................................................. 207
Проектирование вложенных циклов ................................................................... 209
Пример программирования. «Средний доход мужчин и женщин» .. 210
Тестирование и отладка .................................................................................. 214
Методика проверки циклов ................................................................................. 214
Советы по тестированию и отладке .................................................................... 215
Итоги главы ........................................................................................................... 216
Быстрая самопроверка ........................................................................................ 217
Упражнения для подготовки к экзамену .............................................................. 218
Упражнения для разминки ................................................................................... 221
Задачи по программированию ........................................................................... 222
Глава VII. Функции ............................................................................................ 224
Функциональная декомпозиция и функции типа void .......................... 225
Запись модулей как функций типа void .............................................................. 225
Синтаксис и семантика функций типа void ................................................. 228
Вызов функции ...................................................................................................... 228
Описания и объявления функций ........................................................................ 229
Локальные переменные ....................................................................................... 231
Оператор return .................................................................................................... 232
Файлы заголовков ................................................................................................ 233
Параметры ............................................................................................................ 233
Параметры, передаваемые по значению ........................................................... 235
Параметры, передаваемые по ссылке ................................................................ 235
Разработка функций ......................................................................................... 238
Запись утверждений в виде комментариев ......................................................... 239
Стр.9
Содержание
9
Документирование направления потока данных ............................................... 241
Пример программирования. «Сравнение продаж
в мебельных магазинах» ................................................................................. 244
Тестирование и отладка ................................................................................... 250
Библиотечная функция assert ............................................................................... 251
Советы по тестированию и отладке .................................................................... 253
Итоги главы .......................................................................................................... 254
Быстрая самопроверка ....................................................................................... 255
Упражнения для подготовки к экзамену .............................................................. 256
Упражнения для разминки ................................................................................... 261
Задачи по программированию ........................................................................... 263
Глава VIII. Область и время действия ..................................................... 267
Область действия и время жизни ................................................................... 268
Область действия идентификаторов ................................................................... 268
Правила области действия ................................................................................... 270
Объявления и описания переменных .................................................................. 274
Время жизни переменной .................................................................................... 275
Разработка интерфейса ................................................................................... 278
Побочные эффекты ............................................................................................... 278
Глобальные константы .......................................................................................... 279
Функции, возвращающие значение ........................................................... 280
Логические функции ............................................................................................ 283
Проектирование интерфейса функций, возвращающих значение .................. 284
Когда применяют функции, возвращающие значение ...................................... 285
Пример программирования. «Вес и балансировка самолета» ........... 286
Тестирование и отладка ................................................................................... 294
Заглушки и драйверы ....................................................................................... 294
Советы по тестированию и отладке .................................................................... 295
Итоги главы .......................................................................................................... 296
Быстрая самопроверка ........................................................................................ 297
Упражнения для подготовки к экзамену .............................................................. 299
Упражнения для разминки ................................................................................... 302
Задачи по программированию ........................................................................... 304
Глава IX. Дополнительные управляющие структуры .................. 307
Оператор Switch ................................................................................................. 308
Оператор DoWhile ............................................................................................ 311
Оператор For ........................................................................................................ 313
Инструкции break и continue ........................................................................... 315
Критерии выбора циклической структуры ................................................ 318
Пример программирования. «Среднемесячное
количество осадков» ........................................................................................... 318
Стр.10
10
Программирование на С++
Тестирование и отладка ................................................................................... 322
Советы по тестированию и отладке .................................................................... 323
Итоги главы ........................................................................................................... 323
Быстрая самопроверка ........................................................................................ 323
Упражнения для подготовки к экзамену .............................................................. 324
Упражнения для разминки ................................................................................... 326
Задачи по программированию ........................................................................... 328
Глава X. Простые типы данных ................................................................ 331
Встроенные простые типы ............................................................................... 332
Целые типы ............................................................................................................ 334
Типы с плавающей точкой .................................................................................... 335
Дополнительные операторы С++ .................................................................. 336
Операторы присваивания и инструкция присваивания ..................................... 337
Операторы инкремента и декремента ................................................................ 338
Поразрядные операторы ..................................................................................... 339
Оператор преобразования ................................................................................. 339
Оператор sizeof .................................................................................................... 340
Оператор ?: .......................................................................................................... 340
Приоритет операторов ........................................................................................ 340
Обработка символьных данных .................................................................... 341
Наборы символов ................................................................................................. 342
Константы типа char в языке С++ ................................................................... 343
Методы программирования ................................................................................. 344
Подробнее о числах с плавающей точкой ................................................. 347
Представление чисел с плавающей точкой ........................................................ 347
Арифметика чисел с плавающей точкой ............................................................ 348
Простые типы, определенные пользователем ......................................... 352
Перечисляемые типы ............................................................................................ 352
Именованные и анонимные типы данных ........................................................... 357
Файлы заголовков, написанные пользователем ................................................ 359
Подробнее о приведении типов .................................................................... 359
Приведение типов в арифметических инструкциях
и инструкциях сравнения ..................................................................................... 360
Приведение типов при присваивании, передаче параметров
и возвращении значения функции ...................................................................... 360
Пример програмирования. «Напоминание о дне рождения» ............ 362
Тестирование и отладка .................................................................................. 367
Данные с плавающей точкой ............................................................................... 367
Борьба с ошибками ввода ................................................................................... 367
Советы по тестированию и отладке .................................................................... 368
Итоги главы ........................................................................................................... 369
Стр.11
Содержание
11
Быстрая самопроверка ........................................................................................ 370
Упражнения для подготовки к экзамену .............................................................. 371
Упражнения для разминки ................................................................................... 374
Задачи по программированию ........................................................................... 376
Глава XI. Одномерные массивы ............................................................... 377
Сравнение простых и составных типов данных ........................................ 378
Одномерные массивы ....................................................................................... 379
Объявление массивов .......................................................................................... 381
Обращение к отдельным компонентам............................................................... 382
Индексы массивов за пределами границ ............................................................ 384
Инициализация массивов при объявлении ......................................................... 385
Примеры объявления и обращения к массивам ................................................. 386
Передача массивов в качестве параметров ....................................................... 389
Обработка массивов ......................................................................................... 391
Обработка подмассивов ..................................................................................... 391
Параллельные массивы ........................................................................................ 392
Смысловое значение индексов ............................................................................ 392
Пример програмирования. «Сравнение двух списков» ........................ 392
Тестирование и отладка ................................................................................... 397
Советы по тестированию и отладке .................................................................... 398
Итоги главы ........................................................................................................... 399
Быстрая самопроверка ........................................................................................ 399
Упражнения для подготовки к экзамену .............................................................. 401
Упражнения для разминки ................................................................................... 403
Задачи по программированию ........................................................................... 404
Глава XII. Применение массивов: списки и строки
Cписки и списочные алгоритмы ..................................................................... 410
Последовательный поиск в неупорядоченном списке ........................................ 411
Сортировка ........................................................................................................... 413
Последовательный поиск в упорядоченном списке ............................................ 416
Вставка в упорядоченный список ........................................................................ 417
Бинарный поиск в упорядоченном списке .......................................................... 421
Обработка строк ................................................................................................. 425
Инициализация строк .......................................................................................... 427
Ввод и вывод строк ............................................................................................... 428
Ввод имен файлов при выполнении программы ................................... 431
Библиотечные функции для работы со строками ............................................... 432
Использование typedef с массивами................................................................... 434
Пример программирования. «Напоминание о дне рождения – 2» ...435
Тестирование и отладка ................................................................................... 439
Советы по тестированию и отладке .................................................................... 440
Итоги главы ........................................................................................................... 441
Стр.12
12
Программирование на С++
Быстрая самопроверка ........................................................................................ 441
Упражнения для подготовки к экзамену .............................................................. 442
Упражнения для разминки ................................................................................... 445
Задачи по программированию ........................................................................... 447
Глава XIII. Многомерные массивы ......................................................... 449
Двумерные массивы ........................................................................................ 450
Обработка двумерных массивов .................................................................. 454
Сложение по строкам ........................................................................................... 455
Сложение по столбцам ........................................................................................ 457
Инициализация таблицы ...................................................................................... 458
Вывод таблицы ...................................................................................................... 459
Передача двумерных массивов в качестве параметров ....................... 460
Другой способ задания двумерных массивов ........................................... 462
Многомерные массивы .................................................................................... 464
Пример программирования. «Муниципальные выборы» .................... 468
Тестирование и отладка ................................................................................... 476
Советы по тестированию и отладке .................................................................... 478
Итоги главы .......................................................................................................... 478
Быстрая самопроверка ........................................................................................ 479
Упражнения для подготовки к экзамену .............................................................. 480
Упражнения для разминки ................................................................................... 484
Задачи по программированию ........................................................................... 486
Глава XIV. Записи .............................................................................................. 489
Записи ................................................................................................................... 490
Массивы записей .............................................................................497
Иерархические записи ....................................................................498
Союзы .............................................................................................501
Подробнее о выборе структуры данных .................................................... 502
Представление логической организации объекта с помощью
иерархических записей ....................................................................................... 502
Пример программирования. «Кампания
в поддержку кандидата» ................................................................................. 504
Тестирование и отладка ................................................................................... 514
Советы по тестированию и отладке .................................................................... 516
Итоги главы .......................................................................................................... 516
Быстрая самопроверка ........................................................................................ 517
Упражнения для подготовки к экзамену .............................................................. 518
Упражнения для разминки ................................................................................... 521
Задачи по программированию ........................................................................... 524
Стр.13
Содержание
13
Глава XV. Классы, абстракция данных и ООП .................................... 529
Абстрактные типы данных ............................................................................... 530
Классы С++ ............................................................................................................ 532
Класс, объекты класса и члены класса ................................................................ 535
Встроенные операции над классами ................................................................... 535
Область действия классов .................................................................................... 538
Сокрытие информации ........................................................................................ 539
Файлы спецификации и реализации ........................................................... 541
Файл спецификации ............................................................................................ 541
Файл реализации ................................................................................................. 543
Компиляция и компоновка программы, состоящей
из нескольких файлов .......................................................................................... 547
Инициализации классов с использованием конструкторов ................. 550
Вызов конструктора ............................................................................................. 552
Измененные файлы спецификации и реализации для TimeType ....................... 552
Рекомендации по использованию конструкторов классов ................................ 554
Объектноориентированное программирование .................................. 556
Объекты ................................................................................................................. 557
Наследование ..................................................................................................... 559
Создание одного класса из другого ............................................................. 559
Спецификация класса ExtTime ............................................................................. 563
Реализация класса ExtTime .................................................................................. 566
Композиция .......................................................................................................... 569
Разработка класса TimeCard ............................................................................... 569
Реализация класса TimeCard ............................................................................... 570
Динамическое связывание и виртуальные функции .............................. 573
Проблема разделения ......................................................................................... 574
Виртуальные функции .......................................................................................... 575
Объектноориентрованная разработка ..................................................... 578
Шаг 1: Определение объектов и операций ........................................................ 578
Шаг 2: Определение взаимоотношений между объектами .............................. 579
Шаг 3: Разработка драйвера .............................................................................. 580
Реализация проекта .......................................................................................... 581
Тестирование и отладка ................................................................................... 582
Советы по тестированию и отладке .................................................................... 585
Итоги главы ......................................................................................................... 587
Быстрая самопроверка ........................................................................................ 588
Упражнения для подготовки к экзамену .............................................................. 591
Упражнения для разминки ................................................................................... 596
Задачи по программированию ........................................................................... 599
Стр.14
14
Программирование на С++
Глава XVI. Рекурсия .......................................................................................... 604
Что такое рекурсия? .......................................................................................... 605
Ханойские башни .............................................................................................. 609
Рекурсивные алгоритмы и структурированные переменные ............. 613
Рекурсия или итерации? .................................................................................. 616
Тестирование и отладка ................................................................................... 616
Советы по тестированию и отладке .................................................................... 616
Итоги главы ........................................................................................................... 617
Быстрая самопроверка ........................................................................................ 617
Упражнения для подготовки к экзаменам ......................................................... 618
Упражнения для разминки ................................................................................... 619
Задачи по программированию ........................................................................... 620
ПРИЛОЖЕНИЯ ..................................................................................................... 622
Приложение А. Зарезервированные слова ............................................... 622
Приложение Б. Приоритет операторов ...................................................... 622
Приложение В. Библиотечные функции С++ ............................................ 623
Приложение Г. Символьные таблицы .......................................................... 632
Приложение Д. Форматирование текста программы ........................... 634
Словарь терминов ........................................................................................... 638
Ответы на некоторые вопросы ................................................................. 645
Предметный указатель ................................................................................ 668
Стр.15