Оглавление Предисловие 1
Введение 3
Составные части компьютера 4
Логическое строение памяти компьютера 5
Машинные команды 6
Поколения языков программирования 7
Алгоритмические языки 9
Функциональные языки 10
Логические языки 10
Языки низкого и высокого уровня 11
Компилируемые и интерпретируемые языки 11
Глава 1. Алгоритмы и их запись 15
Понятие алгоритма 16
Массовость 17
Конечность 18
Однозначность 18
Исполнитель алгоритма 18
Алгоритм Евклида 19
Определение алгоритма 20
Способы записи алгоритма 20
Псевдокод 22
Блок-схема 24
Контрольный вопрос 25
Применение блок-схем 25
Алгоритмические языки 26
Структурные части алгоритма 27
Линейный алгоритм 27
Разветвление 29
Циклы 30
Упражнения 32
Стандартные алгоритмы 32
Действия с целыми числами 33
Упражнения 35
Суммирование и умножение 35
Упражнения 38
Вычисление многочлена по схеме Горнера 38
Работа с текстом 39
Упражнения 42
Перевод десятичного числа в двоичную форму 42
Упражнение 43
Упражнение 44
Контрольные вопросы 44
Глава 2. Простые типы данных 47
Числовые типы данных 48
Целые типы 48
Вещественные типы 50
Символьный тип 51
Шестнадцатеричная система счисления 52
Упражнения 53
Стандартные кодировки символов 53
Упражнения 60
Unicode 60
Упражнение 60
Символьный тип в языке С 60
Константы 61
Целые константы 61
Упражнение 61
Вещественные константы 62
Символы 62
Упражнения 63
Строковые константы 63
Имена объектов 64
Определение переменных 64
Операции 66
Арифметические операции 66
Приведение типов 67
Сравнения 69
Логические операции 69
Побитовые операции 70
Сдвиги 71
Операции присваивания 72
Условная операция 73
Операция "запятая" 73
Выражения 73
Приоритет операций 74
Упражнения 75
Контрольные вопросы 75
Глава 3. Основные структуры управления 77
Операторы 77
Блок 78
Операторы присваивания 79
Условный оператор 79
Упражнения 84
Первая программа на языке С 85
Функция вывода printf() 87
Упражнения 90
Функция ввода scanf() 90
Упражнение 91
Нахождение корней квадратного уравнения 91
Операторы цикла 93
Упражнения 96
Упражнения 99
Оператор continue 99
Оператор break 100
Оператор варианта switch 100
Оператор перехода goto 102
Упражнения 103
Контрольные вопросы 103
Глава 4. Массивы и указатели 105
Массивы 106
Упражнения 108
Многомерные массивы 108
Упражнения 110
Указатели 111
Адресная арифметика 113
Связь массивов и указателей 115
Работа со строками 118
Упражнения 120
Функции обработки строк 121
Работа с отдельными символами 123
Динамическое выделение памяти 124
Бинарный поиск в массиве 125
Упражнения 127
Методы сортировки массива 127
Сортировка вставкой 128
Сортировка выбором 130
Сортировка методом "пузырька" 130
Метод просеивания 133
Метод Шелла 134
Обзор методов сортировки 135
Контрольные вопросы 136
Глава 5. Процедурное программирование 137
Парадигмы программирования 137
Функции языка С 140
Оператор return 141
Передача аргументов функции 143
Упражнения 145
Передача массивов в функцию 145
Упражнения 146
Аргументы функции main() 147
Функции преобразования строк в числа 148
Процедуры 149
Указатели на функцию 150
Упражнения 152
Локальные и внешние переменные 152
Прототипы функций 156
Рекурсия 157
Быстрая сортировка 158
Контрольные вопросы 160
Глава 6. Работа с файлами 161
Функции буферизованного ввода-вывода 162
Упражнения 166
Потоки ввода-вывода 167
Форматированный ввод-вывод 168
Прочие функции ввода-вывода 169
Упражнения 174
Интерактивный ввод-вывод 174
Работа с каталогом 175
Контрольные вопросы 176
Глава 7. Типы данных, определяемые пользователем 177
Перечислимые типы 177
Упражнения 180
Структуры 180
Структуры как аргументы и возвращаемые значения функций 185
Упражнения 188
Объединения 189
Упражнения 191
Битовые поля 191
Упражнения 193
Контрольные вопросы 193
Глава 8. Препроцессор 195
Включение файла директивой #include 196
Подстановка #define и #undef 196
Макросы 197
Переменные препроцессора 198
Условная компиляция #ifdef 199
Нумерация строк #line 201
Сообщение #error 201
Прагма #pragma 201
Упражнения 202
Контрольные вопросы 202
Глава 9. Расширения языка С в языке С++ 203
Комментарии 203
Строгая типизация 204
Логический тип 204
Объявление переменных внутри блока 205
Операция разрешения видимости :: 206
Определение констант 206
Ссылки 208
Упражнение 210
Прототипы функций 210
Функции с переменным числом аргументов 211
Встраиваемые функции 212
Явное приведение типов 212
Типы перечислений, структур, объединений 213
Операции выделения памяти 213
Упражнение 214
Перегрузка функций 214
Шаблоны функций 215
Перегрузка операций 217
Упражнения 221
Контрольные вопросы 222
Глава 10. Принципы ООП 223
Принципы объектно-ориентированного программирования 224
Абстракция 224
Иерархия 232
Полиморфизм 235
Ответственность 236
Модульность и инкапсуляция 237
Принцип KISS 240
Наследование или вложение 241
Упражнения 243
Контрольные вопросы 243
Глава 11. Реализация ООП в языке С++ 245
Описание класса 253
Упражнение 253
Указатель на себя this 254
Описание полей класса 254
Упражнение 254
Описание методов класса 255
Упражнение 256
Пример класса 256
Упражнение 258
Класс комплексных чисел 258
Упражнение 263
Класс с деструктором 263
Упражнение 267
Наследование классов 267
Инициализация полей классов 270
Конструкторы, деструкторы и наследование 271
Обращение к переопределенному методу суперкласса 272
Доступ к членам суперкласса 272
Реализация полиморфизма 273
Абстрактные классы 275
Множественное наследование 277
Друзья класса 280
Пространства имен 282
Уточнение имени 282
Директива using namespace 283
Вложение пространств имен 283
Объявление using 284
Неименованное пространство имен 284
Псевдонимы пространства имен 285
Упражнения 285
Контрольные вопросы 285
Глава 12. Обработка исключительных ситуаций 287
Блоки перехвата исключения 289
Часть throw заголовка функции 293
Оператор throw 296
Порядок обработки исключений 296
Создание собственных исключений 298
Упражнения 299
Контрольные вопросы 299
Глава 13. Дополнительные конструкции языка С++ 301
Шаблоны классов 301
Упражнения 305
Друзья шаблона 306
Члены класса — реализации шаблонов 307
Наследование шаблонов 308
Упражнение 310
Специализированные версии шаблона 310
Упражнение 311
Информация о типе на этапе выполнения 311
Контрольные вопросы 313
Глава 14. Динамические структуры данных 315
Стек 315
Упражнения 328
Дек 328
Упражнения 329
Очередь 329
Упражнения 330
Кольцо 330
Упражнение 331
Линейный список 331
Двунаправленный список 335
Упражнение 336
Бинарное дерево 336
Обход бинарного дерева 341
Упражнение 343
B-дерево 343
Упражнения 345
Контейнеры и итераторы 345
Контрольные вопросы 347
Глава 15. Работа со строками 349
Типы отдельных символов 350
Шаблон класса basic_string 351
Классы string и wstring 352
Как создать строку 352
Сцепление строк 354
Действия со строками 354
Как узнать длину строки 354
Как выбрать символы из строки 355
Как просмотреть строку 356
Как выбрать подстроку 356
Как сравнить строки 357
Как найти символ или подстроку в строке 358
Как заменить подстроку 360
Как заменить символ 360
Как добавить подстроку 360
Как вставить подстроку 361
Как удалить подстроку 362
Как удалить символ 363
Как переставить строки 363
Ввод и вывод строк 363
Упражнения 363
Контрольные вопросы 364
Глава 16. Потоки ввода-вывода 365
Консольный ввод-вывод 368
Особенности ввода 369
Перегрузка операций >> и