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

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

Покупка
Артикул: 615935.01.99
Книга рассчитана на тех, кто нуждается в понятном и доступном введении в язык C++, и может использоваться как самоучитель. Она также рассказывает о компьютерах и алгоритмическом решении задач, поэтому может служить в качестве первого учебника программирования. Авторы убедительно показывают, что темы, когда-то считавшиеся слишком сложными для вводного курса по С++ и объектно-ориентированному программированию, можно успешно объяснять на ранних стадиях обучения. Книга является удачным выбором для первого знакомства с С++. Материал излагается в строгой, но доступной для начинающего программиста форме. Авторы приводят многочисленные откомпилированные и проверенные упражнения с ответами. Все входящие в книгу программы размещены на Web-сайте издательства «ДМК» (www.dmk.ru) и легко доступны читателям. Издание предназначено для пользователей ПК (от начального до среднего уровня), начинающих программистов, школьников, студентов и преподавателей информатики.
Дейл, Н. Программирование на С++ [Электронный ресурс] / Н. Дейл, Ч. Уимз, М. Хедингтон; Пер. с англ. - Москва : ДМК Пресс, 2007. - 672 с.: ил. - (Серия «Учебник»). - ISBN 5-93700-008-0. - Текст : электронный. - URL: https://znanium.com/catalog/product/407353 (дата обращения: 18.05.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++

Нелл Дейл

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

Чип Уимз

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

Марк Хедингтон

Университет ВисконсинаЛа Кросс

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

Москва

Дейл Н., Уимз Ч., Хедингтон М.

Д94
Программирование на С++: Пер. с англ. – М.: ДМК Пресс. – 672 с.: ил., 
(Серия «Учебник»).

ISBN 5-93700-008-0

Книга рассчитана на тех, кто нуждается в понятном и доступном введении 

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

Книга является удачным выбором для первого знакомства с С++. Матери
ал излагается в строгой, но доступной для начинающего программиста форме. 
Авторы приводят многочисленные откомпилированные и проверенные упражнения с ответами. Все входящие в книгу программы размещены на Web-сайте 
издательства «ДМК» (www.dmk.ru) и легко доступны читателям. 

Издание предназначено для пользователей ПК (от начального до среднего 

уровня), начинающих программистов, школьников, студентов и преподавателей информатики.

  ББК 32.973-018.1

Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то 

ни было форме и какими бы то ни было средствами без письменного разрешения владельцев 
авторских прав.

Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность 

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

ISBN 0-7637-0537-3 (англ.)
Copyright © by Jones and Bartlett Publishers

ISBN 5-93700-008-0 (рус.)
© Перевод на русский язык, оформление. ДМК Пресс

ББК 
32.973-018.1
Д94

ORIGINAL ENGLISH LANGUAGE EDITION PUBLISHED BY
Jones and Bartlett Publishers, Inc., 40 Tall Pine Drive, Sudbury, MA  01776
COPYRIGHT Jones and Bartlett Publishers ©
ALL RIGHTS RESERVED

Содержание

Предисловие  .........................................................................................................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), Rockhurst College; Беннетт Кларк (Bennett Clark), South Dakota School of Mines and 
Technology; Ли Корнелл (Lee Cornell), Mankato State University; Джон Креншоу 

Предисловие

(John Crenshaw), Western Kentucky University; Дэвид О. Эдвардз (David O. Edwards), Goldey-Beacom College; Энтони Дж. Фарелл (Anthony J. Farrell), Chestnut 
Hill College; Энн Р. Форд (Ann R. Ford), University of Michigan; Сьюзен Гоуч (Susan 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 College; Е. Терри Мейджел (E. Terry Magel), Kentucky State University; Патрисия 
Нетнин (Patricia Nettnin), Finger Lakes Community College; Дебора Нунан (Deborah 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 разрешает тем, кто установил 
диск «Программирование на С++» на своем компьютере, беспрепятственно копировать этот диск или 
хранить его файлы на любом автономном или сетевом компьютере.

Предисловие