Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Программирование на C++

Покупка
Артикул: 816361.01.99
Доступ онлайн
319 ₽
В корзину
Книга рассчитана на тех, кто нуждается в понятном и доступном введении в язык C++, и может использоваться как самоучитель. Она также рассказывает о компьютерах и алгоритмическом решении задач, поэтому может служить в качестве первого учебника программирования. Авторы убедительно показывают, что темы, когда-то считавшиеся слишком сложными для вводного курса по С++ и объектно-ориентированному программированию, можно успешно объяснять на ранних стадиях обучения. Книга является удачным выбором для первого знакомства с С++. Материал излагается в строгой, но доступной для начинающего программиста форме. Авторы приводят многочисленные откомпилированные и проверенные упражнения с ответами. Издание предназначено для пользователей ПК (от начального до среднего уровня), начинающих программистов, школьников, студентов и преподавателей информатики. Издание предназначено для пользователей ПК (от начального до среднего уровня), начинающих программистов, школьников, студентов и преподавателей информатики.
Дейл, Н. Программирование на C++ : учебник / Н. Дейл, Ч. Уимз, М. Хедингтон ; пер. с англ. А. С. Цемахмана. - 2-е изд. - Москва : ДМК Пресс, 2023. - 674 с. - (Учебник). - ISBN 978-5-89818-342-4. - Текст : электронный. - URL: https://znanium.com/catalog/product/2102629 (дата обращения: 03.06.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Нейл Дейл, Чип Уимз, Марк Хедингтон

Программирование на С++
Programming in C++

Nell Dale

University of Texas, Austin

Chip Weems

University of Massachusetts, Amherst

Mark Headington 
University of Wisconsin – LaCrosse

JONES AND BARTLETT PUBLISHERS 

Sudbury, Massachusetts

Boston toronto London singapore
Программирование на C++

Нелл Дейл

Техасский университет, Остин

Чип Уимз

Массачусетский университет, Амхерст

Марк Хедингтон
Университет ВисконсинаЛа Кросс

Серия «Учебник»

Москва 2023

2-е издание, электронное
ББК 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
©  Перевод на русский язык, 
оформление. ДМК Пресс
Содержание

Предисловие   .........................................................................................................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
Называем элементы программ: идентификаторы .................................................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

Программирование на С++
Пропуск символов с помощью 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

Условный оператор в форме IfThenElse ............................................................ 160
Применение блоков в условном операторе ....................................................... 162
Условный оператор в форме IfThen .................................................................... 163
Одна распространенная ошибка ........................................................................ 165

Вложенные условные операторы   ............................................................... 165

Висячее else ........................................................................................................... 168

Проверка состояния потока вводавывода ............................................... 169
Пример программирования. «Результат экзамена» .............................. 172
Тестирование и отладка ................................................................................... 175

Этап решения задачи: сквозной контроль алгоритма ....................................... 175
Этап реализации .................................................................................................. 178
Автоматическая проверка при компиляции и выполнении ................................ 182

Содержание
Советы по тестированию и отладке .................................................................... 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

Программирование на С++
Документирование направления потока данных ............................................... 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
Оператор DoWhile ............................................................................................ 311
Оператор For ........................................................................................................ 313
Инструкции break и continue ........................................................................... 315
Критерии выбора циклической структуры ................................................ 318
Пример программирования. «Среднемесячное  
количество осадков» ........................................................................................... 318

Содержание
Тестирование и отладка ................................................................................... 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

Программирование на С++
Быстрая самопроверка ........................................................................................ 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

Содержание
Быстрая самопроверка ........................................................................................ 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

Программирование на С++
Глава 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

Содержание
Глава XVI. Рекурсия .......................................................................................... 604

Что такое рекурсия? .......................................................................................... 605
Ханойские башни  .............................................................................................. 609
Рекурсивные алгоритмы и структурированные переменные ............. 613
Рекурсия или итерации? .................................................................................. 616
Тестирование и отладка ................................................................................... 616

Советы по тестированию и отладке .................................................................... 616

Итоги главы ........................................................................................................... 617

Быстрая самопроверка ........................................................................................ 617
Упражнения для подготовки к экзаменам   ......................................................... 618
Упражнения для разминки ................................................................................... 619
Задачи по программированию ........................................................................... 620

ПРИЛОЖЕНИЯ ..................................................................................................... 622

Приложение А. Зарезервированные слова ............................................... 622
Приложение Б. Приоритет операторов ...................................................... 622
Приложение В. Библиотечные функции С++ ............................................ 623
Приложение Г. Символьные таблицы .......................................................... 632
Приложение Д. Форматирование текста программы  ........................... 634

Словарь терминов   ........................................................................................... 638

Ответы на некоторые вопросы  ................................................................. 645

Предметный указатель   ................................................................................ 668

Программирование на С++
Предисловие

Книга «Программирование на C++» рассчитана на тех, кто нуждается в понятном 
и доступном введении в язык C++. Нас, авторов этой книги, порадовала популярность 
нашего предыдущего руководства, “Programming and Problem Solving 
with C++”. Тем не менее многие читатели высказались за его сокращенный вариант, 
более пригодный для первого знакомства с основами программирования.

Наш опыт показал, что темы, когда-то считавшиеся слишком сложными для 

вводного курса, можно объяснять на ранних стадиях обучения программированию. 
Например, входные и выходные условия используются при сквозном контроле 
алгоритмов и выборе стратегии их тестирования, а также для документирования 
интерфейса функций, заданных пользователем. Абстрактное представление и 
абстрактные типы данных объясняются одновременно с механизмом классов C++, 
что является естественным введением в объектно-ориентированное программирование.


В этой книге мы по-прежнему придерживаемся той манеры изложения, кото-

рая делает материал наиболее доступным для начинающего программиста, оставаясь 
при этом достаточно строгой. Главы содержат много откомпилированных 
и проверенных упражнений. Почти каждая глава заканчивается программным 
примером. Такие примеры приводятся после изложения основного материала 
 главы, которое прерывается только короткими упражнениями.

Использование C++
Отдельные специалисты отрицательно относятся к C и C++, считая, что эти языки 
предоставляют программисту слишком много свободы и тем самым потворствуют 
написанию запутанных, трудных для понимания программ. Авторский опыт не 
подтверждает подобную точку зрения – при условии, что использование особенностей 
языка правильно оформлено и документировано. Мы считаем, что при 
грамотном преподавании основ программотехники начинающие программисты 
могут научиться писать на C++ понятный и легко читаемый код.

Предпочтение, отдаваемое нами языку C++ по сравнению с C, объясняет-

ся просто. C++ обеспечивает более тщательный контроль соответствия типов и 
почти полностью устраняет потребность в макрокомандах препроцессора. В этом 
языке вводятся ссылочные типы, так что передача параметра по ссылке может 
быть объяснена без предварительного изучения указателей. Поток ввода-вывода 
C++ более прост для применения, чем функции printf и scanf. C++ поддерживает 
 абстрактное представление данных, сокрытие информации и объектно-ориентированное 
программирование. И, конечно, изучение основ C++ во вводном курсе 
 устраняет необходимость перехода с C на C++ при дальнейшем освоении программирования.


Необходимо подчеркнуть, что эта книга не является учебником языка С++ 

и не претендует на его полное освещение, хотя и использует C++ как средство 
обучения концепциям программирования. Например, в ней не рассматривается 
механизм шаблонов C++. Опущены и некоторые другие элементы языка, такие 
как перегрузка операторов, параметры по умолчанию и механизмы развитых форм 
наследования. Это сделано для того, чтобы не перегружать начинающего программиста 
избыточной информацией.
Подход к разработке
В настоящее время существуют противоположные мнения относительно того, 
когда вводить понятие объектно-ориентированного программирования (ООП). 
Некоторые преподаватели высказываются за изучение OOП с самого начала курса, 
в то время как другие (те, для кого предназначена эта книга) предпочитают 
более разнородный подход, при котором структурный и объектно-ориентированный 
дизайн программ представлены как взаимодополняющие средства для 
разработки проектов.

То, что некоторые преподаватели называют ООП, на самом деле правильнее 

было бы назвать ОБП – объектно-базируемым программированием. ОБП ведет  
к использованию предоставляемых извне классов C++ в том виде, в котором они 
существуют, то есть без изменений. Хотя ОБП позволяет создавать программы 
с содержательными (например, графическими) объектами, для настоящего OOП 
требуется гораздо больше: разработка и реализация абстрактных типов данных, 
анализ и проектирование иерархий наследования, использование полиморфизма 
в форме связывания операций с объектами во время выполнения.

Организация глав книги «Программирование на C++» отражает постепен-

ный подход к OOП. Предварительный обзор объектно-ориентированного дизайна 
программ предлагается вниманию читателя уже в главе 4. Однако последовательность 
тем в главах с 1 по 15 отражает наше твердое мнение, состоящее в том, что 
концепция OOП становится наиболее ясной только после прочного освоения 
 методов разработки алгоритмов и способов абстрактного представления управления 
и данных.

Предисловие
Особенности книги
Ресурсы Web. Отличительной особенностью этой книги является включение 
в нее ссылок на ресурсы World Wide Web, посвященные языку С++. Ключевые 
темы каждой главы помечены пиктограммой Web, которая приглашает читателей 
посетить специальную Web-страницу издательства Jones and Bartlett, содержащую 
ссылки на сетевые ресурсы по C++. Web-страница может быть найдена по адресу 
http://www.jbpub.com/C++links и просмотрена с помощью стандартного браузера 
WWW, такого как Netscape Navigator или Microsoft Internet Explorer. Каждая 
ссылка на сетевой ресурс снабжена кратким описанием. Оно позволяет получить 
представление о данном ресурсе еще до соединения с Web-узлом того или иного 
учреждения или частного лица, предоставляющего дополнительную информацию 
по темам данной книги. Эта особенность руководства дает пользователю быстрый 
доступ к практическим примерам применения понятий и концепций, включенных 
в книгу. Web-страница издательства будет регулярно обновляться, с тем чтобы 
читатели получали из сети наиболее новую информацию по теме.

Перечень задач. Каждая глава начинается со списка задач, поставленых перед 

изучающим программирование. Усвоение материала проверяется и закрепляется 
с помощью упражнений, помещенных в конце главы.

Примеры программирования. Почти все главы содержат программные приме-

ры, включающие постановку задачи и подробный анализ ее решения. Предлагаемое 
решение кодируется на языке C++. К каждому примеру прилагаются типичные 
тестовые данные и результаты работы программы. В завершение обсуждается 
отладка программного примера.

Тестирование и отладка. Этот раздел, также включенный в большинство 

глав, посвящен применению материала главы к тестированию программ. Каждый 
раздел завершается полезными советами по тестированию и отладке.

Быстрая самопроверка. Контрольные вопросы позволяют проверить, на-

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

Упражнения для подготовки к экзамену. Эти упражнения предназначены для 

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


Упражнения для разминки. Выполняя упражнения этого раздела, начинаю-

щий программист может осваивать отдельные синтаксические конструкции языка 
С++ без необходимости писать законченную программу.

Задачи по программированию. Такие задачи требуют от программиста разра-

ботки законченной программы.

Предисловие
Дополнительные материалы
Руководство преподавателя с набором тестов. Руководство «Instructor’s Guide», 
подготовленное теми же соавторами, включает в себя пояснения для преподавателей 
программирования, объяснения к примерам, приведенным без ответов 
в настоящей книге, лекционные диапозитивы, а также избранные экзаменационные 
вопросы.

Преподавательский компакт-диск. Этот компакт-диск содержит конспект 

лекций по каждой главе данной книги в формате презентаций Power Point®. Компьютерный 
конспект может применяться преподавателем для работы с учениками 
в аудитории. Помимо этого, учебный материал может быть установлен на жесткий 
диск для использования слушателями курса в процессе изучения С++. Компакт-
диск также содержит компьютерные версии тестов и экзаменов. Кроме того, для 
многих глав приведены Web-страницы, с помощью которых имитируется работа 
с Internet без необходимости прямого подсоединения к сети.

Исходные тексты программ. Исходные тексты всех программ, приведенных в 

книге, можно найти по адресу http://www.jbpub.com/disks на Web-узле издательства 
Jones and Bartlett. Подробное объяснение того, как загрузить эти исходные 
тексты на свой компьютер, приведено на следующей за предисловием странице.

Благодарности
Мы благодарны людям, которые помогли нам в подготовке этой книги. Авторы 
многим обязаны профессорам и преподавателям факультетов вычислительной 
техники и информатики (Computer Science Departments) Техасского университета (
University of Texas) в Остине, Массачусетского университета (University 
of Massachusetts) в Амхерсте и университета Висконсина-ЛаКросс (University of 
Wisconsin–LaCrosse).

Особую благодарность хочется выразить Джеффу Брумфилду (Jeff Brumfield) 

за разработку метаязыка синтаксических шаблонов и за разрешение использовать 
его в этой книге. Спасибо также Сильвии Соркин (Sylvia Sorkin) из Essex 
Community Colledge, Балтимор, штат Мэриленд, подготовившей спомощью пакета 
Power Point® 7.0 для Windows 95 лекционные диапозитивы, помещенные на преподавательском 
компакт-диске.

Мы благодарим лекторов, ассистентов преподавателя, ответственных за кон-

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

С благодарностью сообщаем, что следующие профессора и преподаватели при-

слали свои ответы на опрос CS1, проведенный издательством Jones and Bartlett: 
Элизабет Алперт (Elizabeth Alpert), Hartnell College; Хамид Р. Арабния (Hamid  
R. Arabnia), University of Georgia; Дон Бейлз (Don Bailes), East Tennessee State 
University; Алберт Л. Бейкер (Albert L. Baker), Iowa State University; Наташа Бо-
зович (Natasha Bozovic), San Jose State University; Джон Чигас (John Cigas), Rock-
hurst College; Беннетт Кларк (Bennett Clark), South Dakota School of Mines and 
Technology; Ли Корнелл (Lee Cornell), Mankato State University; Джон Креншоу 

Предисловие
(John Crenshaw), Western Kentucky University; Дэвид О. Эдвардз (David O. Ed-
wards), Goldey-Beacom College; Энтони Дж. Фарелл (Anthony J. Farrell), Chestnut 
Hill College; Энн Р. Форд (Ann R. Ford), University of Michigan; Сьюзен Гоуч (Su-
san Gauch), University of Kansas; Рэндалл Хок (Randall Hock), Saginaw Valley State 
University; Джек Ходжиз (Jack Hodges), San Francisco State University; Хайки Кох 
(Hikyoo Koh), Lamar University; Памела Лоухед (Pamela Lawhead), The University 
of Mississippi; Стивен П. Лич (Stephen P. Leach), Florida State University; Марк 
ЛеБланк (Mark LeBlanc), Wheaton College; Мей-Линг Л. Ли (Mei-Ling L. Liu), 
California Polytechnic State University, San Luis Obispo; Энди Лопеc (Andy Lopez), 
University of Minnesota, Morris; Мэрилин Лузер (Marilyn Loser), Adams State Co-
llege; Е. Терри Мейджел (E. Terry Magel), Kentucky State University; Патрисия 
Нетнин (Patricia Nettnin), Finger Lakes Community College; Дебора Нунан (Debo-
rah Noonan), College of William and Mary; Линн Олсон (Lynn Olson), Wartburg 
College; Бобби Энн Осмер (Bobbie Ann Othmer), Westminster College of Salt Lake 
City; Парвиc Партоу (Parviz Partow), California State University, Los Angeles; Хол-
ли Паттерсон (Holly Patterson), Texas A&M University, Corpus Christi; Ховард Д. 
Пирон (Howard D. Pyron), University of Missouri, Rolla; Джозеф Т. Риарз (Joseph 
T. Rears), The College of New Jersey; Роберт Страдер (Robert Strader), Stephen F. 
Austin State University; К. Д. Саммерхейз (K. D. Summerhays), University of San 
Francisco.

Мы также благодарим Дэйва Джеггиза (Dave Geggis), нашего редактора в изда-

тельстве Jones and Bartlett, технического редактора Карен Джоули (Karen Jolie), а 
также Джоан Флахерти (Joan Flaherty) и Дженни Баджижьян (Jenny Bagdigian), 
которые руководили производством этой книги.

Тот, кто хоть раз в жизни писал книгу (или состоит в родстве с кем-нибудь 

пишущим), может оценить, сколько времени отнимает это занятие. Огромное 
спасибо нашим семьям – семье Дэйла и всем его родственникам (слишком многочисленным, 
чтобы их перечислить); Лизе, Чарли и Эбби; Энни, Брэди и Кэри – 
спасибо вам всем за ваше неистощимое терпение и снисходительность.

Нелл Дэйл (Nell Dale)

Чип Уимз (Chip Weems)

Марк Хедингтон (Mark Headington)

Предисловие
Программный диск для книги  
«Программирование на С++»
Издательство Jones and Bartlett Publishers предлагает учащимся и преподавателям 
бесплатную копию программного диска с полным текстом программ, содержащихся 
в книге «Программирование на С++». Диск можно найти на Web-узле Jones and 
Bartlett в Internet.1

Как скопировать программный диск:
Подключитесь к Web-странице, на которой размещен программный диск 

(http://www.jbpub.com/disks/).

Выберите «Programming in С++».
Следуйте инструкциям по копированию и сохранению программного диска.

1 Для того чтобы скопировать диск «Программирование на С++» с Web-узла Jones and Bartlett, требуется 
подключение компьютера ко Всемирной сети и наличие на нем Web-браузера, например Netscape 
Navigator или Microsoft Internet Explorer. Издательство Jones and Bartlett разрешает тем, кто установил 
диск «Программирование на С++» на своем компьютере, беспрепятственно копировать этот диск или 
хранить его файлы на любом автономном или сетевом компьютере.

Предисловие
Доступ онлайн
319 ₽
В корзину