Вы находитесь на странице: 1из 1002

Харви Дейтел, Пол Дейтел

КАК ПРОГРАММИРОВАТЬ НА С

Книга предлагает читателю курс программирования, ориентированный на


языки С/С++, и рассчитана как на начинающих, не владеющих никакими языками
программирования, так и на опытных программистов, которые могут просто
пропустить не интересующие их главы. Помимо достаточно полного и глубокого
изложения языка С дается весьма серьезное введение в C++, одного из наиболее
перспективных на настоящий момент языков; ему посвящена значительная часть
книги. Особое внимание уделяется методикам структурного и объектно-
ориентированного программирования больших программных систем. Примеры и
многочисленные упражнения знакомят читателя с часто применяемыми
алгоритмами и фундаментальными структурами данных, показывая технические
приемы их реализации. Приводится также масса полезных советов.
Книга адресована широкому кругу читателей, от новичков до студентов,
изучающих программирование в рамках своей специальности.
Содержание
Предисловие 17
Об этой книге 18
Обзор книги 20
Глава 1. Принципы машинной обработки данных 29
1.1. Введение 30
1.2. Что такое компьютер? 32
1.3. Внутренняя организация компьютера 33
1.4. Пакетная обработка, мультипрограммирование и разделение времени 34
1.5. Персональные вычисления, распределенные вычисления и вычисления в 34
модели клиент/сервер
1.6. Машинные языки, языки ассемблера и языки высокого уровня 35
1.7. История языка С 36
1.8. Стандартная библиотека С 37
1.9. Другие языки высокого уровня 38
1.10. Структурное программирование 38
1.11. Основные принципы среды С 39
1.12. Общие замечания о С и этой книге 41
1.13. Concurrent С (Параллельный С) 42
1.14. Объектно-ориентированное программирование и C++ 43
Резюме Хороший стиль программирования Советы по переносимости
программ Советы по повышению эффективности Упражнения для
самоконтроля Ответы к упражнениям для самоконтроля Упражнения
Рекомендуемая литература
Глава 2. Введение в программирование на С 53
2.1. Введение 54
2.2. Простая программа на С: печать строки текста 54
2.3. Еще одна простая программа на С; сложение двух целых чисел 58
2.4. Общие понятия о памяти компьютера 63
2.5. Арифметика в С 64
2.6. Принятие решений: операции равенства и отношения 67
Резюме Распространенные ошибки программирования Хороший стиль
программирования Советы по переносимости программ Упражнения
для самоконтроля Ответы на упражнения для самоконтроля
Упражнения
Глава 3. Структурная разработка программ 87
3.1. Введение 88
3.2. Алгоритмы 88
3.3. Псевдокод 89
3.4. Управляющие структуры 90
3.5. Структура выбора if 92
3.6. Структура выбора if/else 94
3.7. Структура повторения while 98
3.8. Формулирование алгоритмов: пример 1 (повторение, управляемое 99
счетчиком)
3.9. Формулирование алгоритмов на основе нисходящего пошагового 102
уточнения: пример 2 (повторение, управляемое контрольным
значением)
3.10. Формулирование алгоритмов на основе нисходящего пошагового 108
уточнения: пример 3 (вложенные управляющие структуры)
3.11. Операции присваивания 113
3.12. Операции инкремента и декремента 114
Резюме Распространенные ошибки программирования Хороший стиль
программирования Советы, по повышению эффективности Общие
методические замечания Упражнения для самоконтроля Ответы к
упражнениям для самоконтроля Упражнения
Глава 4. Управление программой 137
4.1. Введение 138
4.2. Основы структур повторения 139
4.3. Повторение, управляемое счетчиком 139
4.4. Структура повторения for 141
4.5. Структура for: замечания и рекомендации 144
4.6. Примеры структур for 145
4.7. Структура со множественным выбором switch 148
4.8. Структура повторения do/while 154
4.9. Операторы break и continue 156
4.10. Логические операции 158
4.11. Смешивание операций равенства (==) и присваивания (=) 161
4.12. Краткая сводка по структурному программированию 163
Резюме Распространенные ошибки программирования Хороший стиль
программирования Советы по повышению эффективности Советы по
переносимости программ Общие методические замечания Упражнения
для самоконтроля Ответы к упражнениям для самоконтроля
Упражнения
Глава 5. Функции 185
5.1. Введение 186
5.2. Программные модули в С 187
5.3. Функции математической библиотеки 188
5.4. Функции 189
5.5. Определения функций 190
5.6. Прототипы функций 194
5.7. Заголовочные файлы 197
5.8. Вызов функций: вызов по значению и по ссылке 198
5.9. Генерация случайных чисел 199
5.10. Пример: стохастическая игра 203
5.11. Классы памяти 206
5.12. Правила области действия 209
5.13. Рекурсия 210
5.14. Пример применения рекурсии: числа Фибоначчи 215
5.15. Рекурсия в сравнении с итерацией 219
Резюме Распространенные ошибки программирования Хороший стиль
программирования Советы по переносимости программ Советы по
повышению эффективности Общие методические замечания
Упражнения для самоконтроля Ответы на упражнения для
самоконтроля Упражнения
Глава 6. Массивы 247
6.1. Введение 248
6.2. Массивы 249
6.3. Объявление массивов 251
6.4. Примеры работы с массивами 251
6.5. Передача массивов в функции 263
6.6. Сортировка массивов 267
6.7. Пример: вычисление среднего значения, медианы и наиболее вероятного 269
значения с использованием массивов
6.8. Поиск в массивах 273
6.9. Многомерные массивы 277
Резюме Распространенные ошибки программирования Хороший стиль
программирования Советы по повышению эффективности Общие
методические замечания Упражнения для самоконтроля Ответы к
упражнениям для самоконтроля Упражнения Упражнения на рекурсию
Глава 7. Указатели 307
7.1. Введение 308
7.2. Объявление и инициализация переменной-указателя 309
7.3. Операции над указателями 310
7.4. Передача параметра по ссылке 312
7.5. Использование модификатора const с указателями 316
7.6. Программа пузырьковой сортировки, использующая вызов по ссылке 322
7.7. Выражения и арифметические операции с указателями 326
7.8. Связь между указателями и массивами 329
7.9. Массивы указателей 333
7.10. Пример: программа тасовки и сдачи колоды карт 334
7.11. Указатели на функции 339
Резюме Распространенные ошибки программирования Хороший стиль
программирования Советы по повышению эффективности Советы по
переносимости программ Общие методические замечания Упражнения
для самоконтроля Ответы на упражнения для самоконтроля
Упражнения Специальный раздел: как самому построить компьютер
Глава 8. Символы и строки 369
8.1. Введение 370
8.2. Строки и символы 370
8.3. Библиотека обработки символов 372
8.4. Функции преобразования строк 377
8,5. Функции стандартной библиотеки ввода/вывода 382
8,6. Функции операций над строками из библиотеки обработки строк 385
8.7. Функции сравнения из библиотеки обработки строк 388
8.8. Функции поиска из библиотеки обработки строк 390
8.9. Функции памяти библиотеки обработки строк 395
8.10. Другие функции из библиотеки обработки строк 399
Резюме Распространенные ошибки программирования Хороший стиль
программирования Советы по переносимости программ Упражнения
для самоконтроля Ответы к упражнениям для самоконтроля
Упражнения Специальный раздел: более сложные упражнения по
работе со строками
Глава 9. Форматированный ввод/вывод 419
9.1. Введение 420
9.2. Потоки 421
9.3. Форматированный вывод с применением printf 421
9.4. Печать целых чисел 422
9.5. Печать чисел с плавающей точкой 423
9.6. Печать строк и символов 425
9.7. Другие спецификаторы преобразования 426
9.8. Печать с заданием ширины поля и точности представления 428
9.9. Использование флагов в строке управления форматом printf 430
9.10. Печать литералов и Esc-последовательностей 433
9.11. Форматированный ввод с применением scanf 434
Резюме Распространенные ошибки программирования Хороший стиль
программирования Советы по переносимости программ Упражнения
для самоконтроля Ответы на упражнения для самоконтроля
Упражнения
Глава 10. Структуры, объединения, операции с битами и перечисления. 451
10.1. Введение 452
10.2. Описания структур 453
10.3. Инициализация структур 455
10.4. Доступ к элементам структур 455
10.5. Использование структур с функциями 457
10.6. Typedef 458
10.7. Пример: моделирование высокоэффективной тасовки и раздачи карт 459
10.8. Объединения 461
10.9. Поразрядные операции 463
10.10. Битовые поля 471
10.11. Перечислимые константы 474
Резюме Распространенные ошибки программирования Хороший стиль
программирования Советы по переносимости программ Советы по
повышению эффективности Общие методические замечания
Упражнения для самоконтроля Ответы на упражнения для
самоконтроля Упражнения
Глава 11. Работа с файлами 489
11.1. Введение 490
11.2. Иерархия данных 490
11.3. Файлы и потоки 493
11.4. Создание файла последовательного доступа 493
11.5. Чтение данных из файла последовательного доступа 499
11.6. Файлы произвольного доступа 503
11.7. Создание файла произвольного доступа 504
11.8. Произвольная запись данных в файл произвольного доступа 506
11.9. Последовательное чтение данных из файла произвольного доступа 508
11.10. Пример: программа обработки транзакций 508
Резюме Распространенные ошибки программирования Хороший стиль
программирования Советы, по переносимости программ Советы по
повышению эффективности Упражнения для самоконтроля Ответы на
упражнения для самоконтроля Упражнения
Глава 12. Структуры данных 527
12.1. Введение 528
12.2. Структуры, ссылающиеся на себя 529
12.3. Динамическое распределение памяти 530
12.4. Связанные списки 531
12.5. Стеки 539
12.6. Очереди 545
12.7. Деревья 550
Резюме Распространенные ошибки программирования Хороший стиль
программирования Советы по повышению эффективности Советы по
переносимости программ Упражнения для самоконтроля Ответы на
упражнения для самоконтроля Упражнения
Глава 13. Препроцессор 587
13.1. Введение 588
13.2. Директива препроцессора #include 588
13.3. Директива препроцессора #define: символические константы 589
13.4. Директива препроцессора #define: макросы 590
13.5. Условная компиляция 592
13.6. Директивы препроцессора #error и #pragma 593
13.7. Операции # и ## 593
13.8. Нумерация строк 594
13.9. Предопределенные символические константы 594
13.10. Макрос подтверждения 594
Резюме Распространенные ошибки программирования Хороший стиль
программирования Советы по повышению эффективности
Упражнения для самоконтроля Ответы на упражнения для
самоконтроля Упражнения
Глава 14. Специальные вопросы 601
14.1. Введение 602
14.2. Переадресация ввода/вывода в системах UNIX и DOS 602
14.3. Списки аргументов переменной длины 603
14.4. Аргументы командной строки 606
14.5. Замечания относительно компиляции программ из нескольких 607
исходных файлов
14.6. Выход из программы с помощью exit и atexit 609
14.7. Модификатор типа volatile 609
14.8. Суффиксы для целых констант и констант с плавающей точкой 610
14.9. Еще раз о файлах 611
14.10. Обработка сигналов 613
14.11. Динамическое выделение памяти: функции calloc и realloc 615
14.12. Безусловный переход: goto 616
Резюме Распространенные ошибки программирования Советы по
переносимости программ Советы по повышению эффективности
Общие методические замечания Упражнения для самоконтроля
Ответы, на упражнения для самоконтроля Упражнения
Глава 15. C++ как “улучшенный” С 625
15.1. Введение 626
15.2. Однострочные комментарии C++ 627
15.3. Потоковый ввод/вывод C++ 628
15.4. Объявления в C++ 630
15.5. Создание новых типов данных в C++ 630
15.6. Прототипы функций и контроль соответствия типов 631
15.7. Встроенные функции 633
15.8. Параметры-ссылки 637
15.9. Модификатор const 641
15.10. Динамическое распределение памяти с помощью new и delete 643
15.11. Параметры, используемые по умолчанию 644
15.12. Унарная операция разрешения области действия 646
15.13. Перегрузка функций 647
15.14. Спецификации внешней связи 649
15.15. Шаблоны функций 649
Резюме Распространенные ошибки программирования Хороший стиль
программирования Советы по переносимости программ Советы по
повышению эффективности Общие методические замечания
Упражнения для самоконтроля Ответы к упражнениям для
самоконтроля Упражнения Рекомендуемая литература Приложение:
ресурсы C++
Глава16. Классы и абстракция данных. 663
16.1. Введение 664
16.2. Определение структур 666
16.3. Доступ к элементам структур 667
16.4. Реализация пользовательского типа Time с помощью структуры 668
16.5. Реализация абстрактного типа данных Time с помощью класса 670
16.6. Область действия класса и доступ к элементам класса 676
16.7. Отделение интерфейса от реализации 677
16.8. Управление доступом к элементам класса 681
16.9. Функции доступа и сервисные функции 684
16.10. Инициализация объектов класса: конструкторы 687
16.11. Использование с конструкторами аргументов по умолчанию 688
16.12. Деструкторы 691
16.13. Когда вызываются конструкторы и деструкторы 691
16.14. Использование элементов данных и элементов-функций 694
16.15. Скрытая ловушка: возвращение ссылки на закрытый элемент данных 699
16.16. Присваивание по умолчанию путем поэлементного копирования 701
16.17. Повторное использование программного обеспечения 701
Резюме Распространенные ошибки программирования Хороший стиль
программирования Советы, по повышению эффективности Общие
методические замечания Упражнения для самоконтроля Ответы, к
упражнениям для самоконтроля Упражнения
Глава 17. Классы: часть II 715
17.1. Введение 716
17.2. Константные объекты и константные элементы-функции 717
17.3. Композиция: классы в качестве элементов других классов 723
17.4. Дружественные функции и дружественные классы 727
17.5. Указатель this 729
17.6. Динамическое распределение памяти с помощью операций new и delete 734
17.7. Статические элементы класса 735
17.8. Абстракция данных и сокрытие информации 739
17.9. Контейнерные классы и итераторы 743
17.10. Шаблоны классов 743
Резюме Распространенные ошибки программирования Хороший стиль
программирования Советы по повышению эффективности Советы, по
переносимости программ Общие методические замечания Упражнения
для самоконтроля Ответы к упражнениям для самоконтроля
Упражнения
Глава 18. Перегрузка операций 755
18.1. Введение 756
18.2. Основные принципы перегрузки операций 757
18.3. Запреты на перегрузку операций 759
18.4. Функции-операции как элементы класса и как дружественные функции 760
18.5. Перегрузка операций передачи в поток и извлечения из потока 762
18.6. Перегрузка одноместных операций 764
18.7. Перегрузка двухместных операций 765
18.8. Пример: класс Array 765
18.9. Преобразование типов 776
18.10. Пример: класс String 777
18.11. Перегрузка ++ и -- 786
18.12. Пример: класс Date 788
Резюме Распространенные ошибки программирования Хороший стиль
программирования Советы по повышению эффективности Общие
методические замечания Упражнения для самоконтроля Ответы к
упражнениям для самоконтроля Упражнения
Глава 19. Наследование 805
19.1. Введение 806
19.2. Базовые и производные классы 808
19.3. Защищенные элементы 810
19.4. Приведение указателей базового класса к указателям на производный 811
класс
19.5. Применение функций-элементов 815
19.6. Переопределение элементов базового класса в производном классе 816
19.7. Открытые, защищенные и закрытые базовые классы 820
19.8. Непосредственные и косвенные базовые классы 820
19.9. Применение конструкторов и деструкторов в производном классе 821
19.10. Неявное преобразование объектов производного класса к базовому 824
19.11. Наследование в конструировании программного обеспечения 825
19.12. Композиция в сравнении с наследованием 827
19.13. Отношения “использует” и “знает” 828
19.14. Пример: Point, Circle, Cylinder 828
19.15. Сложное наследование 833
Резюме Распространенные ошибки программирования Хороший стиль
программирования Совет по повышению эффективности Общие
методические замечания Упражнения для самоконтроля Ответы на
упражнения для самоконтроля Упражнения
Глава 20. Виртуальные функции и полиморфизм 847
20.1. Введение 848
20.2. Обработка различных типов данных при помощи операторов switch 849
20.3. Виртуальные функции 849
20.4. Абстрактные базовые классы и конкретные классы 850
20.5. Полиморфизм 851
20.6. Пример: программа начисления заработной платы, использующая 853
возможности полиморфизма
20.7. Новые классы и динамическое связывание 862
20.8. Виртуальные деструкторы 864
20.9. Пример: наследование интерфейса и реализации 864
Резюме Распространенные ошибки программирования Хороший стиль
программирования Советы по повышению эффективности Общие,
методические замечания Упражнения для самоконтроля. Ответы на
упражнения для самоконтроля Упражнения
Глава 21. Потоки ввода/вывода в C++ 877
21.1. Введение 879
21.2. Потоки 879
21.3. Потоковый вывод 882
21.4. Потоковый ввод 886
21.5. Функции неформатируемого ввода/вывода read, gcount и write 892
21.6. Манипуляторы потоков 893
21.7. Флаги форматирования потока 896
21.8. Состояния ошибки потоков 906
21.9. Ввод/вывод определяемых пользователем типов 907
21.10. Привязка потока вывода к потоку ввода 910
Резюме Распространенные ошибки программирования Хороший стиль
программирования Советы, по повышению эффективности Общие
методические замечания Упражнения для самоконтроля Ответы на
упражнения для самоконтроля Упражнения
Приложение А. Синтаксис С 929
Приложение Б. Стандартная библиотека 941
Приложение В. Таблица приоритета операций 978
Приложение Г. Набор символов ASCII 980
Приложение Д. Системы счисления 981
Д.1. Введение 982
Д.2. Запись двоичных чисел в виде восьмеричных и шестнадцатеричных 985
Д.З. Преобразование восьмеричных и шестнадцатеричных чисел в двоичные 987
Д.4. Преобразование числа из двоичной, восьмеричной или 987
шестнадцатеричной форм в десятичную
Д.5. Преобразование десятичного числа в двоичное, восьмеричное или 988
шестнадцатеричное
Д.6. Отрицательные двоичные числа: дополнение до двух 990
Резюме Упражнения для самоконтроля Ответы на упражнения для
самоконтроля Упражнения

Предметный указатель
#define 589, 590 ASCII 389
#define asm 636
NDEBUG 594 assert 594
#elif 592 assert.h 594
#else 592 atexit 609
#endif 592 atof 378
#error 593 atoi 378
#if 592 atol 379
#ifdef 592 badbit 886, 906
#ifndef 592 break 151, 156
#ftinclude "filename" 588 C—D
#include <filename> 588 С 36
#line 594 C++ 43, 626
#pragma 593 calloc 615
#undef 591 catch 636
# в качестве точности 430 cerr 880, 882
# в качестве ширины поля 430 \ char 154, 196
(обратная дробная черта, символ cin (входной поток) 628, 880, 881
продолжения) 591 class 630, 636, 670
_DATE_ 595 clog 880, 882
_FILE_ 595 COBOL 38
_LINE_ 595 Concurrent C 42
_STDC_ 595 const 316, 609, 641
_TIME_ 595 continue 156
<ctrl-z> 151 cout (выходной поток) 628, 880, 882
<return><ctrl-d> 151 CPU (ЦПУ) 33
А—В ctype.h 373
a.out в UNIX 589 dequeue 545
a[i] 249 double 147, 196
a[i][j] 277 E
abort 594 EBCDIC 389
argc 606 endl 884
argv 606 enqueue 545
eofbit 906 inline — встроенная функция 633, 675
escape-код 56, 433 int 59, 154
- - \' 433 ios::adjustfield 900
- - \" 433 ios::basefield 901
- - \? 433 ios::fixed 903
- -\\ 433 ios::floatfield 903
- - \a 433 ios::internal 900
- -\b 433 ios::scientific 903
- - \f 433 ios::showbase 900, 902
- - \n 433 ios::showpoint 899
- - \r 433 ios::showpos 901
- - \t 433 isalnum 373
- - \v 433 isalpha 373
escape-последовательность 433 iscntrl 373, 376
esc-символ 55 isdigit 373
exit 609 isgraph 373, 376
EXIT_FAILURE 609 islower 373, 375
EXIT_SUCCESS 609 isprint 373, 376
F—G ispunct 373, 376
failbit 886 isspace 373, 376
false 68 isupper 373, 375
fclose 496
feof 495 isxdigit 373
fgetc 493 L—R
fgets 493 left 899
FIFO (первым пришел —первым LIFO (последним пришел —
ушел) 545 первым ушел) 539
float 105, 107, 196 Long 154, 196
fopen 495 lvalue ("значение слева") 162, 699
FORTRAN 38 main 55
fprintf 496 make 609
fputc 493 makefile 609
fputs 493 malloc (выделить память) 530
fread 504 memchr 396, 398
free 530 memcinp 396, 398
friend 636 memcpy 396
fscanf 499 memmove 396, 397
fseek 506 memset 396, 399
fwrite 504 Pascal 31, 38, 39
getchar 382, 383 pop 540
gets 382 printf 421
get-функция 684 private: 671, 681
I protected: 681
public: 671, 681 strpbrk 390, 392
push 540 strrchr 390, 392
putchar 382 strspn 390, 393
puts 382, 383 strstr 390, 394
raise 613 strtod 378, 379
rand 199 strtok 391, 394
RAND_MAX 199 strtol 378, 380
realloc 616 strtoul 378, 381
return 190, 193 struct 453
rewind 499 T— W
rvalue ("значение справа") 162 template 636, 650
S this 636
scant 434 throw 636
SEEK_CUR 507 time 203
SEEK_END 507
SEEK_SET 507 tmpfile 611
set-функция 684 tolower 373, 375
short 154 toupper 373, 375
signal 613 true 68
signal.h 613 try 636
size_t 390 typedef 458
sizeof 324, 530 union 461
skipws 898 UNIX 36, 39, 41, 151
sprintf 382, 384 unsigned 202
srand 201 uppercase 902
sscanf 382, 385 va_arg 604
stdarg.h 604 va_end 604
stderr (стандартная ошибка) 493 va_list 604
stdin (стандартный ввод) 493 va_start 604
stdio.h 382, 420 virtual 636
stdlib.h 378 void 191
stdout (стандартный вывод) 493 void * (указатель на void) 328
strcat 386 volatile 609
strchr 390, 391 width 894, 896
strcmp 388 A
strcpy 386 абстрактный базовый класс 850
strcspn 390, 391 - класс 850
strerror 399 - тип данных (ADT) 670, 739
string.h 385 абстракция 190, 807
strlen 399 - данных 665,739
strncat 386, 387 автоматическая переменная 207
strncmp 388 автоматический класс памяти 206
strncpy 386 - локальный объект 691
автоматическое приведение блок памяти 33
аргументов 195 блок-схема 90
агрегаты 452 блочный метод построения программ
активация функции 190 37
алгоритм 89 буква 491
альтернатива операторам switch 849, буквенное поле 491
863 В
амперсанд (&) 61 ввод/вывод (I/O) 34
анализ данных опроса 269 вершина 539
аппаратная платформа 37 виртуальная функция 849
аппаратная часть 31 - - базового класса 849
аргумент 55, 188 виртуальный деструктор 864
аргументы командной строки 606 вложенные скобки 66
- функции по умолчанию 644 - структуры 453
арифметика указателей 326 - - if/else 95
арифметические операции 64 - управляющие структуры 92, 108
- операции присваивания: вложенный класс 723
+=,-=,*=,/= и %= 113 внешняя компоновка 608
ассоциативность операций 71 внутренняя компоновка 608
- слева направо 66 возведение 107, 195
- справа налево 71 восьмеричные числа (начинаются с
атрибут 665 О) 893,901
Б восьмеричный формат 421, 422, 434
база данных 492 временная область для обмена
базовый класс 807 значений 269
байт 491 временный файл 611
безопасная по типу компоновка 647 вставка отображаемых символов 421
безопасный по типу ввод/вывод 879 - узла 537, 551
бесконечная отсрочка 355 встроенная функция-элемент 679
бесконечный цикл 98, 155 встроенный тип 758, 760
библиотека классов потоков 880 второе уточнение 103,111
- обработки сигналов 613 входной блок 33
- потоков 629 вхождение в область действия 691
- утилит общего назначения 378 выбор между быстродействием и
библиотеки классов 808 компактностью 474
бинарная операция разрешения выбор 91
областидействия ( :: ) 675 вызов по значению 198, 312
бит 491 - - ссылке 198, 313
битовое поле 472 - функции 187
- - нулевой ширины 471 вызываемая функция 187
блок 55, 98, 192 вызывающая функция 187
блок default в структуре switch 148, выравнивание 421
152 - по левому краю 148, 430
- - правому краю 148, 430 дополнение 464
выражение в качестве индекса 249 - до единицы 469
- с указателями 326 доступ к элементам структуры 455
- со смешанными типами 196 дружественная функция 727
выход за пределы массива 257 дружественный класс 727
- из области действия 691 друзья базового класса 829
выходной блок 33 - производного класса 814
вычитание двух указателей 326, 327 естественный язык компьютера 35
- целого из указателя 326, 328 З
Г— Е заголовочные файлы стандартной
генерация вызова по ссылке 312 библиотеки 197, 589
- случайных чисел 199 заголовочный файл 197, 588, 679
гистограмма 257, 258 загрузчик 41
глобальная переменная 208, 607 задача 34
глобальный объект 691 закрытие файла 496
голова очереди 545 закрытое наследование 809
данные 32 закрытый базовый класс 820
двоичная цифра 491 заменяющий текст 253, 589
двоичное дерево 550 запись 452, 491
- - поиска 550 - в строчку 65
двойная косвенная адресация 537 заполнение 901
двумерный массив 277 заполнитель структуры 472
двухместные операции 61, 65 запуск программы 39
действие 55, 67, 88 зарезервированные слова 71
декремент 139 защищенное наследование 809
- указателя 326, 327 защищенный базовый класс 820
деление на 0 65, 104 - элемент класса 810, 811
- нацело 65 звездочка (*) 64
дерево 550 знак минуса для выравнивания по
деструктор 674, 691 левому краю 148
- базового класса 821 - процента % (esc-символ) 61
- производного класса 821 - равенства = (операция
десятичная цифра 491 присваивания) 61
диалоговое вычисление 61 значение 61
- динамические массивы 615 - переменной 63
- объекты 644, 734 - элемента 250
- структуры данных 528 И
динамическое распределение памяти идентификатор 59
308 иерархическое отношение 809
- связывание 850, 862 иерархия возведения 196
директива препроцессора 588 - данных 491
-#define 253 - классов 810, 851, 852
длина строки 399
именованная константа 641 имя 59, - fstream 882
63 - if'stream 882
- массива 249 - ios 881
- структуры 455 - iostream 881
- файла 495 - istream 881
- элемента 453 - ofstream 882
имя-этикетка 453 - ostream 881
- - класса 667 - String 777
инвертированный набор - элемента 827
сканирования 437 классы памяти 206
индекс 249 клиент 35
- столбца 277 - класса 674, 676
- строки 277 ключ записи 492
индексация указателя 330 - поиска 273
индикатор конца файла 495 ключевое слово operator 636, 758
инициализатор 644 - - protected 681
- базового класса 821 - - virtual 849
- элемента 687 ключевые слова 71, 636
инициализация 100 код символа 389
- массива 252, 258, 278 команда ее в UNIX 589
- объекта класса 687 комментарий 55, 627
- структур 455 компилятор 36, 39,40
- указателей 309 композиция 723
инкапсуляция 666 компоновщик 41
инкремент указателя 326, 327 компьютер 32
интерактивное вычисление 61 компьютерная программа 32
интерфейс класса 674, 677 конвейер 603
исключение goto 90 "конец ввода данных" 102
исключительная ситуация с конец файла 151, 496, 889, 906
плавающей точкой 613 конечное значение управляющей
исполнение программы 39 переменной 142
исполняемый образ 41 конечный символ 118
истинность 68 конкатенация вызовов функций 762
итератор 743 - - элементов-функций 731
итерация 213, 219 - строк 386
итоговая сумма 100 конкретные классы 850 константная
К элемент-функция 717, 718
квадратные скобки 249 константный объект 717
клавиша enter 61 константный указатель 320, 321
- return 61 - - на константные данные 321
класс 666, 670 - - на не-константные данные 320
- Array 765 конструирование программного
- Date 788 обеспечения 825
конструктор 671, 687, 734 - - dec 893
- базового класса 821, 827 - - Hush 884
- копии 773, 774 - - hex 893
- объекта-элемента 727 - - oct 893
- по умолчанию 690, 727 - - resetiosflags 898
- - - базового класса 821 - - setbase 893
- преобразования 777 - - setfill 901
- производного класса 821 - - setprecision 894
контейнерные классы 743 - - setw 894
контрольное значение 102,139 - - ws 898 маска 465
копирование строк 386 маскирование битов 465
копия значения 198 массив 248
корневой узел 550 - п на m 277
косвенная адресация 309 - строк 333
- ссылка на переменную 309 - структур 458
косвенный базовый класс 820 - указателей 333
крах программы 104 масштабирование 199
круглые скобки () 65, 66 масштабируемость 253
Л машинно-зависимый 35
левое выравнивание 899 машинно-независимый 37
- поддерево 550 машинный язык 35
левый потомок 550 медиана 269
лексема 391, 394 метка case 148
линейная структура данных 550 метод 670
линейный поиск 273 многозадачность 39
линии перехода 90 многомерный массив 277
листовой узел 550 множественный выбор 91, 148
литерал 55, 371 моделирование 199, 204
литеральные символы 421,433 модель действие/решение 56
логика switch 849 модель клиент/сервер 35
логическая ошибка 97 модульная программа 186
логические блоки 33 мультипликативные операции 107
- операции 158 мультипрограммирование 34
логическое И (&&) 158, 159 мультипроцессор 43
- ИЛИ (||) 158, 159 "мусор" 100
- отрицание (!) 158, 160 Н
ложность 68 набор символов 389,491
локальная переменная 207, 209 - - ASCII 150
М - сканирования 435
макроопределение 590 надкласс 809
макрос 589 наиболее вероятное значение 272
- с аргументами 590 направленный ациклический граф
манипулятор потока 893 840
нарушение сегментации 613 - текстов 370
наследование 806, 807, 849 обратная косая черта \ (esc-символ)
настройка программного 55
обеспечения 825 обход 551
научная нотация 423 - с отложенной выборкой 551, 555
начальное значение управляющей - с порядковой выборкой 551, 554
переменной 139, 142 - с предварительной выборкой 551,
не равное нулю (true) 68 554
недопустимая инструкция 613 общая сумма элементов массива 255,
неименованное битовое поле 472 280
не-константный указатель на объединение строк с другими
константные данные 318 строками 386
- - на не-константные данные 317 объект 43, 665
не-фатальная ошибка 65, 97 объект - элемент данных 723, 727
нелинейная структура данных 550 объектно-ориентированное
неоднозначность в сложном программирование (OOP)
наследовании 834, 838 43,665,807, 826,849
неопределенное повторение 102, 139 объектный код 40
неперегружаемые операции 759 объявление 59
непосредственный базовый класс - класса 670
820, 849 - массива 251
неразрушающее чтение из ячейки 64 - структур 453
неформатируемый ввод/вывод 892 - функции 195
неявное преобразование 107 однострочный комментарий (//) 627
неявные преобразования типа 785 окончание оператора (;) 55
нисходящее пошаговое уточнение 33, округление 107, 421, 425
102,109,335 окружение (рабочая среда) 39
номер позиции 249 операнд 61
нотация указатель/смещение 330 оператор 55
нулевой Элемент 249 - goto 90, 616
нули и единицы 490 нуль (false) 68 - присваивания 61
нуль-символ '\0' 258 операции как функции 758
О - отношения 68, 69
область действия 206, 209 - равенства 68, 69
- - блока 209 операция 61
- - класса 676, 735 - delete 643, 734
- - прототипа 209 - delete[] 643
- - символической константы или - new 643, 734
макроса 591 - взятия адреса & 61, 310
- - файла 209, 676 - "взять из" (”) 628
- - функции 209 - взятия по модулю (%) 65
- свободной памяти 643 - выбора элемента - стрелка 730
обработка строк 370, 385 - - - точка (.) 730
- - - класса (.) 667 открытый интерфейс класса 674, 682
- декремента(--) 114 отладчик 592
- дополнения до единицы (-) 469 отношение знает 828
- извлечения из потока (”) 628, 881 - имеет 808, 827
- инкремента(++) 114 - использует 828
- косвенной адресации (*) 309 - является 808, 827
- левого сдвига (“) 464, 469 отображаемый символ 373, 376
- передачи в поток (“) 628, 881 отступ 57
- поразрядного И (&) 464, 465 очередь 545
- - включающего ИЛИ (|) 464, 468 ошибка бесконечной рекурсии 816
- - исключающего ИЛИ (*) 464, 468 - времени компиляции 60'
- "послать в" (“) 628 - смещения индекса 250
- постдекремента 114 - - счетчика 142
- постинкремента 114 П
- правого сдвига (”) 464, 469, 470 память 33, 63
- предекремента 114 параметр в определении функции
- преинкремента 114 189, 192
- преобразования 776 параметр числа записей 506, 508
- приведения 107 параметризованный манипулятор
- присваивания (=) 61 потока 880
- - левого сдвига (“=) 470 параметризованный тип 743
- - поразрядного И (&'=) 470 параметр-ссылка 637
- - - включающего ИЛИ (|=) 470 первичная память 33
- - - исключающего ИЛИ ("=) 470 первое уточнение 103
- - правого сдвига (”=) 470 переадресация ввода/вывода 602
- разрешения области действия :: 675 переадресация потока 421
- разыменования (*) 310 перегружаемые операции 759
- ссылки & 699 перегруженная дружественная
- умножения (*) 64 функция-операция 761
- элемента структуры - стрелка (->) - операция != 766, 775
455 - - [] 771, 775
- - - - точка (.) 455 определение класса - - < 785
671 - - <= 785
- структур 453 - - == 771, 775
- функции 191 - - > 785
определенное повторение 100, 139 - - >= 785
оптимизирующий компилятор 207 - - присваивания (=) 771, 774
основной случай рекурсии 212 - функция-операция - элемент класса
остановка в узле 555 760
отказ программы 104 перегрузка двухместной операции
открытие файла 495, 498 765
открытое наследование 809 - одноместной операции 764
открытый базовый класс 820 - операций 757
- постфиксной операции 787 потоки, определяемые пользователем
- префиксной операции 786 881
- функций 647 потоковый ввод 886
передача массивов в функции 263 - вывод 882
- по ссылке 263 потомки 550
- управления 90 пошаговое уточнение 102
переменная 59 поэлементное копирование 701
- "только для чтения" 641 правила старшинства операций 65, 66
- класса static 206, 208 правило вложения 165
- управления циклом 139, 143 - суперпозиции 163
- -константа 641 правое выравнивание 899
переносимость 37, 42 - поддерево 550
переопределение элемента базового правый потомок 550
класса 816 предикатная функция 536, 684
переопределенная виртуальная предопределенные потоки 881
функция 849,850 символические константы 594
перехват 613 представитель класса 666
перечисление 474 представление символа числовым
перечислимая константа 474 кодом 388
период хранения 206 преобразование объекта
персональный компьютер 34 производного класса в объект
побочные эффекты 198 базового класса 824
поведение 665, 670 - указателя производного класса в
повторение 98 указатель базового класса 825
- управляемое счетчиком 100, 139 определяемое пользователем 776
повторное использование преобразования между встроенными
программного кода 37, 189, типами и классами 776
702,826 - классами различного типа 776
поддерево 550 препроцессор С 40, 58, 588
подкласс 809 препроцессорная операция
позднее связывание 862 конкатенации ## 594
поиск в массиве 273 - - преобразования в строку # 594
поле 491 прерывание 613
полиморфизм 848, 851,853 приглашение 60
пользователь класса 676 принцип минимума привилегий 207,
поразрядные операции 463 316, 320, 679, 717
порядок действий 88 принятие решения 67
последовательная структура 90 приоритет операций 66
последовательное выполнение 90 приращение управляющей
поток 421 переменной 139
- стандартного ввода 420 присваивание структур 454
- - вывода 420 указателя 309, 310, 328
- стандартной ошибки 421 пробельные символы 71, 92, 376, 898
проверка на выход за пределы - - - w+ 498
массива 783 рекурсивная функция 210
программа-транслятор 36 рекурсивный вызов 212
программист 32 рекурсия 210, 219
программное обеспечение 31, 32 решение 67, 93
производный класс 808, 849 родительский узел 551
тип 453 С
произвольный доступ 503 связанный список 308, 531
простое наследование 807 сдвиг 203, 464
условие 158 - влево 464, 469
прототип функции 190, 194 - вправо 464, 470
проход сортировки 268 сервисная функция 684
процедурное программирование сиблинги 550
666 сигнальное значение 102
прямая ссылка на переменную 309 сигнатура 647
псевдокод 89 символ 491
псевдослучайные числа 201 - ^ 437
пузырьковая сортировка 268 - действия 91
пустой оператор (;) 98 - новой строки (\n) 55, 57
Р - овала 91
рабочая станция 35 - переадресации ввода < 603
разбиение на функции 33 - - вывода > 603
разбиение строки на лексемы 394 - подавления присваивания (*) 438
разделение времени 34 - подчеркивания ( ) 59
разделительные символы 394 - присоединения вывода ” 603
"разделяй и властвуй" 186, 189 - прямоугольника 91
различение регистра 59 - решения 91
разрушающее считывание в ячейку - ромба 91
63 - стрелки 90
разыменование указателя 310 символ-заполнитель 901
рандомизация 201 - - по умолчанию (пробел) 901
распределенные вычисления 35 символическая константа 253, 589
расширение макроса 590 символы блок-схемы 90
расширяемость 672, 741, 848, 852, символьная константа 370
910 символьное поле 491
реализация класса 677 синтаксическая ошибка 60, 97
редактор 39 система управления базами данных
режим открытия файла 495 492
- - - а 498 скаляр 264
- - - а+ 498 скалярная величина 264
- - - r 498 сложение указателя с целым 326
- - - r+ 498 сложное наследование 807, 833
- - - w 498 смещение 330, 499
событие 613 - указателей 326, 329
создание экземпляра объекта 666 среднее 269
сокрытие данных 666, 673 ссылка на базовый класс 851
- информации 209 стандартизованные компоненты
сообщение 55, 665, 670 программного обеспечения 808
сортировка 267 стандартная библиотека С 37, 56, 187
- двоичного дерева 554 стандартная ошибка (stderr) 41
- погружением 268 стандартный ввод (stdin) 41
- элементов массива 267 - вывод (stdout) 41
составной оператор 97 - заголовочный файл <iomanip.h> 880
состояния формата 898 - - - ввода/вывода 59 статическая
сохранение программы 39 элемент-функция 736
спецификатор класса памяти 206 статический локальный объект 691
- - - auto 207 - период хранения 206, 208
- - - extern 208, 607 - элемент данных 735
- - - register 207 статическое связывание 850
- - - static 208, 608 стек 539
- преобразования 422 столбцовая диаграмма 257
- - % 426, 427, 435 строка 55, 257, 259
- - с 425, 435 - поиска 394
- - d 62, 422, 434 - символов 55
- - е или Е 423, 434 - управления форматом 421, 434
- - f 423, 434 строковая константа 371
- - g или G 424, 434 строковый литерал 371
- - h 422, 434 структура FILE 493, 495, 497
- - i 422, 434 - выбора if 93
- - L 424, 435 - - if/else 94
- - 1 422, 434 - - switch 148
- - n 426,427, 435 - повторения do/while 154
- - о 422, 434 - - for 141
- - p 263, 426, 427, 435 - - while 98, 154
- - s 201, 425, 435 - с двойным выбором 91
- - u 422, 434 - с единичным выбором 91
- - х или X 422, 434 - со множественным выбором 91
спецификаторы доступа к элементам - ссылающаяся на себя 453, 529
671, 727 структурное программирование 39,
- преобразования целых 422 54
спецификация внешней связи 649 структуры выбора 90
- преобразования 61, 69, 71, 421 - повторения 90, 139
список аргументов переменной суперкомпьютер 32
длины 603 суперпозиция управляющих структур
- инициализации массива 252 92
сравнение строк 388 суффикс float (f или F) 611
- long double (1 или L) 611 - - производный класс 852
- long int (l или L) 610 - - символ 333,337
- unsigned int (u или U) 610 - - структуру 453, 456
- unsigned long (ul или UL) 610 - - указатель 537
- -амперсанд (&) 637 - - функцию 339
счетчик 100 - позиции файла 499
- цикла 139 - производного класса 811
Т - файла 495
таблица виртуальных функций 863 унарная (одноместная) операция 160
- значений 277 - операция разрешения области
- истинности 159 действия ( :: ) 681, 807
табличная форма 251 управление доступом к элементам
тело функции 55 681, 807
- цикла 98, 154 управление, поток управления 72
терминал 34 - программой 89
тернарная операция 95 управляющая строка формата 61, 62
тильда (-) в имени деструктора 674 - структура 90
тип возвращаемого значения 191 - - if 68
- данных 669 управляющие структуры с одним
- компоновки 206 входом / одним выходом 92, 163
- переменной 63 управляющий символ 376
- структуры 453 усечение 107
- определяемый пользователем 666, ускоренная разработка прикладных
757 программ (RAD) 702
типы ссылки 637 условие 68
- указателей 309, 328 - завершения 100
точка с запятой ; (окончание - продолжения цикла 143, 154
оператора) 55 условная компиляция 592
точность 107, 429 - операция (?:) 95
- по умолчанию 107, 423, 894 условное выполнение директив
У препроцессора 588
удаление узла 533, 538, 539 услуги, предоставляемые классом 682
узел 531 устройство ввода 33
узел-потомок 550 - вывода 33
указатель 308 Ф
- NULL 309, 530 фаза завершения 105
- this 729 - инициализации 105
- базового класса 811 - обработки 105
- на void (void *) 328 файл 491
- - абстрактный класс 852 - исходного кода 679
- - базовый класс 850 - последовательного доступа 492
- - объект базового класса 825 - произвольного доступа 503
- - объект производного класса 825 файловый сервер 35
фатальная ошибка 65, 97 - - precision 984
фигурные скобки {} 55, 97 - - put 886
фиктивное значение 102 флаг - - putback 891
421, 430 - - rdstate 906
- пробел 430 - - read 892
- - (минус) 430 - - setf 896, 898
-# 431 - - tie 910
- + (плюс) 430 - - unsetf 896, 898
- 0 (нуль) 431 - - write 892
флаги формата 898 Х—Я
флаговое значение 102 хвост очереди 545
формат целого без знака 422 целое 59
- - со знаком 422 - типа long 422, 434
форматирование в памяти 880 - типа short 422, 434
форматированный ввод/вывод 500, - число 500
880 целочисленное деление 107
функции математической библиотеки целостность (корректность) данных
188 687, 688,694
- преобразования строк 377 центральное процессорное
- сравнения строк 388 устройство (CPU) 33
функция 37, 56,187 цикл 92, 139
- getchar 150 число с плавающей точкой 105, 423,
- pow 147 434
- printf 58, 62 чисто виртуальная функция (=0) 851
- scant 58, 61 шаблон 649
- доступа 684 - класса 743
- факториала 213 - функции 649
- определяемая программистом 187 шестнадцатеричные цифры 373
- -элемент 666, 670 - числа (начинаются с Ох или ОХ)
- - bad 906 901
- - clear 906 шестнадцатеричный формат 421
- - eof 906 ширина битового поля 471
--fail 906 - поля 148, 428
- - fill 901 экран 33, 41
- - flags 896, 898 экспоненциальный формат с
- - gcount 892 плавающей точкой 423
- - get 889 элемент 453,461
- - getline 890 - данных 666, 670
- - good 906 - массива 249
- - ignore 891 - случайности 199
- - operator void* 907 этикетка структуры 453, 667
- - operator! 907 явное преобразование 107
- - peek 891 - - типа (операция приведения) 776
язык высокого уровня 36, 38
- программирования 35
ясность 42
ячейка памяти 63

Оценить