- •Предисловие
- •Глава 1. Основные понятия
- •1.1. Элементы языка программирования
- •1.2. Процесс создания программы
- •1.3. Первая программа
- •1.4. Состав программы
- •Глава 2. Средства разработки на C++
- •2.1. Системы Turbo C++ 3.0/Borland C++ 3.1
- •2.2. Система C++ Builder
- •Глава 3. Работа с числовыми данными
- •3.1. Целые типы
- •3.2. Числа с плавающей точкой
- •3.3. Ввод и вывод чисел
- •3.4. Логический тип и логические операции
- •3.5. Математические функции
- •Глава 4. Операторы. Ключевые слова
- •4.1. Операторы
- •4.2. Приоритеты операторов
- •4.3. Ключевые слова
- •4.4. Структура программы
- •4.5. Константы
- •Задачи - . Простейшие вычисления
- •Глава 5. Управление и циклы
- •5.1. Условный оператор
- •5.2. Операторы цикла
- •5.3. Переключатель
- •5.4. Операторы break и continue
- •Задачи -. Выбор и циклы
- •Глава 6. Массивы
- •6.1. Одномерные массивы
- •6.2. Двумерные массивы
- •Задачи -. Одно- и двумерные массивы
- •Глава 7. Функции
- •7.1. Определение функции
- •7.2. Формальные параметры и фактические аргументы
- •7.3. Автоматические и статические переменные
- •7.4. Прототипы функций
- •7.5. Массивы как аргументы функций
- •7.6. Внешние переменные
- •7.7. Рекурсия
- •7.8. Перегруженные имена функций
- •7.9. Аргументы функций по умолчанию
- •Задачи -. Функции
- •Глава 8. Символы и строки
- •8.1. Символы
- •8.2. Строки символов
- •Задачи -. Символы и строки
- •Глава 9. Препроцессор
- •9.1. Директивы препроцессора
- •9.2. Макросы
- •Задачи -. Макросы
- •Глава 10. Указатели и ссылки
- •10.1. Указатели и адреса
- •10.2. Указатели и массивы
- •10.3. Адресная арифметика
- •10.4. Символьные указатели
- •10.5. Массивы указателей
- •10.6. Указатели на функции
- •10.7. Ссылки
- •10.8. Операторы new и delete
- •Задачи -. Указатели и ссылки
- •Глава 11. О файлах и командной строке
- •11.1. Знакомство с файлами
- •11.2. Командная строка
- •11.3. Перенаправление стандартного ввода и вывода на файл
- •11.4. Аргументы командной строки
- •Задачи -. Файлы и командная строка
- •Глава 12. Работа с экраном дисплея
- •12.1. Текстовый режим
- •12.2. Графический режим
- •Задачи -. Работа с экраном
- •Глава 13. Внутреннее представление чисел
- •13.1. Двоичная система счисления
- •13.2. Беззнаковые целые
- •13.3. Двоичный дополнительный код
- •13.4. Двоичный код с избытком
- •13.5. Побитовые операторы
- •13.6. Дробные числа в двоичной системе
- •13.7. Внутреннее представление плавающих типов
- •13.8. Преобразование типов
- •Задачи -. Побитовые операторы
- •Глава 14. Структуры, перечисления, объединения
- •14.1. Объявление структур
- •14.2. Структуры и функции
- •14.3. Указатели на структуры
- •14.4. Массивы структур
- •14.5. Перечисления
- •14.6. Объединения
- •14.7. Битовые поля
- •14.8. О бинарных файлах
- •Задачи -. Структуры
- •Глава 15. Классы
- •15.1. Структуры в C++. Инкапсуляция
- •15.2. Встроенные функции
- •15.3. Классы. Скрытие данных
- •15.4. Конструкторы
- •15.5. Статические члены класса
- •15.6. Друзья класса
- •15.7. Копирование объектов класса
- •15.8. Управление доступом
- •15.9. Ссылка на себя
- •15.10. Деструкторы
- •Задачи -. Работа с классами
- •Глава 16. Программы из нескольких файлов
- •16.1. Работа с проектами
- •16.2. Область действия имен
- •16.3. Заголовочные файлы
- •16.4. Пространства имен
- •Задачи -. Работа со стеком
- •Глава 17. Перегрузка операторов
- •17.1. Правила перегрузки операторов
- •Задачи -. Перегрузка операторов
- •Глава 18. Конструктор копирования и оператор присваивания
- •18.1. Проблемы при копировании
- •Задачи -. Конструктор копирования
- •Глава 19. Ввод и вывод
- •19.1. Вывод
- •19.2. Ввод
- •19.3. Ввод и вывод определяемых пользователем типов
- •19.4. Работа с файлами
- •Глава 20. Взаимоотношения классов
- •20.1. Объекты как члены класса
- •20.2. Конструкторы встроенных типов
- •20.3. Наследование
- •20.4. Виртуальные функции
- •20.5. Абстрактные классы
- •20.6. Совместимость типов
- •20.7. Множественное наследование
- •Задачи -. Наследование классов
- •Глава 21. Шаблоны, исключения
- •21.1. Шаблоны
- •21.2. Шаблоны функций
- •21.3. Классы и шаблоны
- •21.4. Обработка исключений
- •21.5. Стандартная библиотека шаблонов
- •Литература
- •Предметный указатель
98 7
else
cout.put('A' + r - 10);
}
void main() |
|
|
{ |
|
|
print(31); |
cout.put(' '); |
// По умолчанию base = 10 |
print(31, 10); |
cout.put(' '); |
|
print(31, 16); |
cout.put(' '); |
|
print(31, 2); |
cout.put('\n'); |
|
getch(); |
|
|
} |
|
|
Программа печатает:
31 31 1F 11111
Для формирования цифр, значения которых больше 9, в функции print использовано выражение:
'A' + r – 10.
Для val = 31 и base = 16 значение остатка r = 31 % 16 = 15. Поэтому
'A' + r – 10 = 'A' + 15 – 10 = 'F'.
Аргументы по умолчанию можно задавать только в конце списка аргументов, например,
int f(int, int = 0, char = 0); |
// Правильно |
int g(int = 0, int = 0, char); |
// Ошибка |
Задачи -. Функции
В приводимых ниже задачах надо написать полностью законченную программу, включающую функцию main, которая должна вызывать функцию, о которой речь идет в задаче.
70.В задаче приведена формула для величины ежемесячных выплат по кредиту. Напишите функцию, возвращающую в качестве результата величину x. Используя эту функцию, напечатайте таблицу значений выплат x в зависимости от количества месяцев N при некоторой фиксированной величине кредита P и процентной ставке r.
71.Напишите функцию, возвращающую номер первого элемента массива v, совпадающего с x. Если совпадений нет – возвратить -1.
72.Напишите функцию, возвращающую номер последнего элемента массива v, совпадающего с x, или -1, если совпадений нет.
73.Напишите функцию, возвращающую число совпадений x с элементами массива v.
Функции 99
74. Напишите функцию для нахождения среднего арифметического значения m элементов массива x[] с элементами вещественного типа и функцию для вычисления среднего квадратичного отклонения σ. Формулы следующие:
|
n−1 |
(n −1) |
m = ( x0 + x1 + + xn−1 ) n , σ = å( xi − m)2 |
||
|
i=0 |
|
75.Напишите функцию, аргументом которой является номер года. Функция должна возвращать 1, если год високосный и 0, если год невисокосный. Год является високосным, если его номер делится на 4 и не делится на 100 или делится на 400. В соответствии с этим правилом 1900-й год был невисокосным, а 2000-й – високосным.
76.Напишите функцию lower, преобразующую латинские буквы верхнего регистра (заглавные) в латинские буквы нижнего регистра (строчные). Символ, не являющийся буквой, должен возвращаться без изменения. Указание. Используйте тот факт, что как заглавные, так и строчные буквы в кодовой таблице расположены плотно, без разрывов, поэтому разница между кодами одноименных символов одинакова и равна 'a' - 'A'.
77.Случайные целые числа в диапазоне от -32768 до 32767 можно получить с помощью следующей функции
int casual() |
// rand: получение псевдослучайных чисел |
{ |
// в диапазоне от -32768 до 32767 |
static int randx = 1; |
// Статическая переменная сохраняет свое |
|
// значение между вызовами функции |
randx = (randx * 25173 + 13849) % 65536; return randx;
}
Используя функцию casual(), заполните случайными числами двухмерный массив (квадратную матрицу) размером N * N, где N определите как целую положительную константу. Получите два массива (вектора): вектор, элементы которого равны средним арифметическим значениям строк матрицы, и вектор, элементы которого равны средним арифметическим значениям столбцов матрицы.
78.Решите предыдущую задачу с использованием библиотечной функции rand, заголовочный файл stdlib.h.
79.Пусть имеется упорядоченный по возрастанию массив x. Напишите функцию, возвращающую номер элемента массива, имеющего заданное значение y или -1, если такого элемента нет. Используйте метод двоичного (бинарного) поиска: y сравнивается со средним элементом массива; если числа равны, поиск завершается, если
100 7
y меньше среднего элемента, то y надо искать в левой половине, а иначе
–в правой; к выбранной половине применяется тот же алгоритм.
80.Напишите функцию для вычисления определителя третьего
порядка.
81.Напишите функцию для решения системы линейных уравнений третьего порядка по правилу Крамера.
82.Напишите функцию вычисления определителя четвертого порядка путем разложения определителя по элементам некоторой строки.
83.Напишите функцию вычисления определителя четвертого порядка используя разложение определителя по элементам некоторого столбца.
84.Напишите функцию для решения системы линейных уравнений четвертого порядка по правилу Крамера.
85.Пусть даны матрица a порядка n и n-мерный вектор b. Напишите функцию, заменяющую заданный столбец матрицы a на вектор b.
86.Напишите функцию для вычисления обратной матрицы третьего порядка.
87.Напишите функцию, осуществляющую умножение двух квадратных матриц.
88.Напишите функцию для вычисления обратной матрицы четвертого порядка.
89.Напишите функцию, приводящую квадратную матрицу к треугольному виду методом Гаусса. Функция должна возвращать true при успешном выполнении приведения и false, если в процессе приведения встретилось деление на нуль.
90.Напишите рекурсивную функцию вычисления факториала n!.
91.Напишите рекурсивную функцию вычисления числа Фибоначчи с заданным номером. Числа Фибоначчи определяются формулами:
f0 = f1 = 1; fn =fn-1 + fn-2 при n = 2, 3,…
92.Напишите рекурсивную функцию вычисления целой степени целого числа.
93.Напишите рекурсивную функцию вычисления целой степени вещественного числа.
94.Напишите рекурсивную функцию нахождения наибольшего общего делителя NOD(m, n) двух целых m, n по алгоритму Эвклида:
пусть m > n, тогда, если n = 0 то NOD(m, n) = m, если же n > 0, то NOD(m, n) = NOD(m, m – n). Кроме того, NOD(m, n) = NOD(n, m).
Функции 101
95. Напишите рекурсивную функцию для нахождения биномиальных коэффициентов, пользуясь их определением:
Cnm = 1, если m = 0, n > 0 или m = n³ 0;
Cnm = 0, если m > n ³ 0;
Cnm = Cnm−−11 + Cnm−1 в остальных случаях.
96.Напишите рекурсивную функцию вычисления длины строки.