- •Издано в рамках Инновационной образовательной программы ннгу: Образовательно-научный центр «Информационно-телекоммуникационные системы: физические основы и математическое обеспечение»
- •Глава 1. Основные понятия 13
- •Глава 3. Работа с числовыми данными 42
- •Глава 4. Операторы. Ключевые слова 52
- •Глава 5. Управление и циклы 64
- •Глава 6. Массивы 77
- •Глава 7. Функции 84
- •Глава 8. Символы и строки 102
- •Глава 9. Препроцессор 113
- •Глава 10. Указатели и ссылки 119
- •Глава 11. О файлах и командной строке 133
- •Глава 12. Работа с экраном дисплея 145
- •Глава 13. Внутреннее представление чисел 157
- •Глава 14. Структуры, перечисления, объединения 179
- •Глава 15. Классы 204
- •Глава 16. Программы из нескольких файлов 233
- •Глава 21. Шаблоны, исключения 321
- •Предисловие
- •Глава 1.Основные понятия
- •1.1.Элементы языка программирования
- •Алфавит
- •Лексемы
- •Выражения
- •Функции
- •Комментарии
- •1.2.Процесс создания программы
- •1.3.Первая программа Программа 1. Приветствие
- •1.4.Состав программы
- •Загрузка
- •Работа с окнами
- •Настройка среды
- •Указание каталогов библиотек
- •Подключение графической библиотеки
- •Назначение текущего каталога
- •Работа с блоками текста в редакторе
- •Выполнение программы
- •Отладка программ
- •Программа 2. Деление чисел
- •Синтаксические ошибки
- •Ошибки в процессе работы программы
- •Трассировка программ
- •Просмотр текущих значений выражений
- •Разработка консольных приложений
- •Программа 3. Hello
- •Выполнение и отладка программы
- •Файлы проекта
- •Автоматическая генерация кода
- •Особенности ввода и вывода
- •Глава 3.Работа с числовыми данными
- •3.1.Целые типы
- •Целые константы
- •Программа 4. Операции над целыми
- •3.2.Числа с плавающей точкой
- •Плавающие константы
- •3.3.Ввод и вывод чисел
- •Программа 5. Точность плавающих чисел
- •3.4.Логический тип и логические операции
- •3.5.Математические функции
- •Глава 4.Операторы. Ключевые слова
- •4.1.Операторы
- •Унарные операторы
- •Бинарные операторы
- •Оператор запятая
- •Условное выражение
- •Операторы присваивания
- •4.2.Приоритеты операторов
- •4.3.Ключевые слова
- •Продолжение таблицы 23. Ключевые слова стандарта языка Cи
- •4.4.Структура программы
- •Объявления переменных
- •Объявления и определения
- •Инструкции и блоки
- •4.5.Константы
- •Задачи 1-17 . Простейшие вычисления
- •Глава 5.Управление и циклы
- •5.1.Условный оператор
- •Программа 6. Максимальное из двух чисел
- •5.2.Операторы цикла
- •Цикл с предусловием while
- •Программа 7. Суммирование цифр целого
- •Цикл for
- •Программа 8. Поиск максимума и минимума
- •Цикл do-while
- •Программа 9. Вычисление квадратного корня
- •5.3.Переключатель
- •Программа 10. День недели
- •5.4.Операторы break и continue
- •Программа 11. Сумма положительных чисел
- •Задачи 18-52. Выбор и циклы
- •Глава 6.Массивы
- •6.1.Одномерные массивы
- •Программа 12. Проверка упорядоченности массива
- •6.2.Двумерные массивы
- •Программа 13. Подсчет выручки
- •Задачи 53-69. Одно- и двумерные массивы
- •Глава 7.Функции
- •7.1.Определение функции
- •7.2.Формальные параметры и фактические аргументы
- •Пpограмма.14. Степени целых чисел
- •7.3.Автоматические и статические переменные
- •Программа 15. Автоматические и статические переменные
- •7.4.Прототипы функций
- •7.5.Массивы как аргументы функций
- •7.6.Внешние переменные
- •Программа 16. Сортировка массива
- •7.7.Рекурсия
- •Программа 17. Рекурсивная печать целого
- •7.8.Перегруженные имена функций
- •Программа 18. Перегрузка функций
- •7.9.Аргументы функций по умолчанию
- •Программа 19. Аргументы по умолчанию
- •Задачи 70-96. Функции
- •Глава 8.Символы и строки
- •8.1.Символы
- •Символьные константы
- •Программа 20. Представления символов
- •Ввод и вывод символов
- •Программа 22. Печать текста по словам
- •8.2.Строки символов
- •Строковые константы
- •Ввод и вывод строк
- •Средства работы со строками
- •Программа 23. Реверсирование строк
- •Задачи 97-121. Символы и строки
- •Глава 9.Препроцессор
- •9.1.Директивы препроцессора
- •9.2.Макросы
- •Программа 24. Возможности препроцессора
- •Задачи 122-124. Макросы
- •Глава 10.Указатели и ссылки
- •10.1.Указатели и адреса
- •Программа 25. Расчет треугольника
- •10.2.Указатели и массивы
- •10.3.Адресная арифметика
- •10.4.Символьные указатели
- •10.5.Массивы указателей
- •Программа 26. Названия месяцев
- •10.6.Указатели на функции
- •Программа 27. Поиск максимума функции
- •10.7.Ссылки
- •Программа 28. Использование ссылок
- •10.8.Операторы new и delete
- •Программа 29. Выделение и освобождение памяти
- •Задачи 125-134. Указатели и ссылки
- •Глава 11.О файлах и командной строке
- •11.1.Знакомство с файлами
- •Программа 30. Копирование файлов
- •11.2.Командная строка
- •11.3.Перенаправление стандартного ввода и вывода на файл
- •11.4.Аргументы командной строки
- •Программа 31. Эхо аргументов командной строки
- •Программа 32. Печать строк, содержащих образец
- •Задачи 135-147. Файлы и командная строка
- •Глава 12.Работа с экраном дисплея
- •12.1.Текстовый режим
- •Программа 33. Российский флаг
- •12.2.Графический режим
- •Графические драйверы и режимы
- •Инициализация графики
- •Функции рисования
- •Программа 34. Звезда
- •Задачи 148-158. Работа с экраном
- •Глава 13.Внутреннее представление чисел
- •13.1.Двоичная система счисления
- •13.2.Беззнаковые целые
- •13.3.Двоичный дополнительный код
- •13.4.Двоичный код с избытком
- •13.5.Побитовые операторы
- •Программа 35. Побитовые операторы
- •13.6.Дробные числа в двоичной системе
- •13.7. Внутреннее представление плавающих типов
- •13.8.Преобразование типов
- •Значения логических выражений
- •Арифметические преобразования
- •Преобразование при присваивании
- •Явное приведение типа
- •Задачи 159-166. Побитовые операторы
- •Глава 14.Структуры, перечисления, объединения
- •14.1.Объявление структур
- •14.2.Структуры и функции
- •14.3.Указатели на структуры
- •Программа 36. Точки и прямоугольники на экране
- •14.4.Массивы структур
- •Программа 37. Подсчет ключевых слов
- •14.5.Перечисления
- •Программа 38. Использование перечислений
- •14.6. Объединения
- •Программа 39. Внутреннее представление float
- •14.7.Битовые поля
- •14.8.О бинарных файлах
- •Программа 40. Анализ успеваемости
- •Задачи 167-174. Структуры
- •Глава 15.Классы
- •Программа 41. Время как структура
- •15.2.Встроенные функции
- •15.3.Классы. Скрытие данных
- •Программа 42. Класс дат
- •15.4.Конструкторы
- •Программа 43. Конструкторы в классе дат
- •15.5.Статические члены класса
- •Программа 44. Размер класса и объектов класса
- •15.6.Друзья класса
- •Программа 45. Статические члены и друзья класса
- •15.7.Копирование объектов класса
- •Программа 46. Копирование объектов
- •15.8.Управление доступом
- •Структуры и классы
- •Правила доступа
- •15.9.Ссылка на себя
- •Программа 47. Модификация дат
- •15.10.Деструкторы
- •Программа 48. Деструктор в классе дат
- •Программа 49. Многоугольники
- •Задачи 175-185. Работа с классами
- •Глава 16.Программы из нескольких файлов
- •16.1.Работа с проектами
- •16.2.Область действия имен
- •Программа 50. Глобальные и локальные имена
- •Статические имена
- •Программа 51. Сумматор чисел
- •16.3.Заголовочные файлы
- •Страж включения
- •Понятие стека
- •Программа 52. Реализация стека в виде массива
- •16.4.Пространства имен
- •Стандартные пространства имен
- •Задачи 186-189. Работа со стеком
- •Глава 17.Перегрузка операторов
- •Программа 53. Обыкновенные дроби
- •17.1.Правила перегрузки операторов
- •Программа 54. Комплексные числа
- •Задачи 190-196. Перегрузка операторов
- •Глава 18.Конструктор копирования и оператор присваивания
- •18.1.Проблемы при копировании
- •Программа 55. Вектора на плоскости
- •Задачи 197-198. Конструктор копирования
- •Глава 19.Ввод и вывод
- •19.1.Вывод
- •19.2.Ввод
- •19.3.Ввод и вывод определяемых пользователем типов
- •Программа 56. Перегрузка операторов ввода/вывода
- •19.4.Работа с файлами
- •Программа 57. Сравнение текстового и бинарного файлов
- •Задачи 199-202. Ввод и вывод
- •Глава 20.Взаимоотношения классов
- •20.1.Объекты как члены класса
- •20.2.Конструкторы встроенных типов
- •Программа 58. Личные данные
- •20.3.Наследование
- •Пример наследования
- •Программа 59. Наследование
- •Управление доступом при наследовании
- •Наследование и конструкторы
- •Программа 60. Производный класс личных данных
- •20.4. Виртуальные функции
- •Программа 61. Невиртуальные функции
- •Программа 62. Виртуальные функции
- •20.5.Абстрактные классы
- •Программа 63. Абстрактный класс фигур
- •Вызов виртуальных функций
- •20.6. Совместимость типов
- •20.7.Множественное наследование
- •Программа 64. Системы уравнений Класс алгебраических векторов Vector
- •Класс прямоугольных матриц
- •Объявление класса Matrix
- •Реализация класса Matrix
- •Класс систем линейных уравнений
- •Пример использования классов
- •Задачи 203-212. Наследование классов
- •Глава 21.Шаблоны, исключения
- •21.1.Шаблоны
- •21.2.Шаблоны функций
- •Программа 65. Объявление и определение шаблона функции
- •21.3.Классы и шаблоны
- •Программа 66. Шаблон классов векторов
- •Программа 67. Шаблон классов динамических массивов
- •21.4.Обработка исключений
- •Программа 68. Расчет нод
- •21.5.Стандартная библиотека шаблонов
- •Программа 69. Использование шаблона векторов
- •Литература
- •Предметный указатель
- •603950, Н. Новгород, пр. Гагарина, 23
- •603000, Н. Новгород, ул. Б. Покровская, 37.
Программа 10. День недели
Программа предлагает ввести номер дня недели и выводит его название.
// Файл DayWeek.cpp
// Программа выводит название дня недели по его номеру
#include <iostream.h>
#include <conio.h>
int main()
{
int n; // Номер дня недели
cout << "\nВведите номер дня недели от 1 до 7 \n";
cin >> n;
cout << "Это ";
switch(n){
case 1: cout << "Понедельник"; break;
case 2: cout << "Вторник"; break;
case 3: cout << "Среда"; break ;
case 4: cout << "Четверг"; break;
case 5: cout << "Пятница"; break;
case 6: cout << "Суббота"; break;
case 7: cout << "Воскресенье"; break;
default: cout << "Неверный номер";
}
getch();
return 0;
}
Ниже приводятся результаты двух запусков программы.
Введите номер дня недели от 1 до 7
5
Это Пятница
Введите номер дня недели от 1 до 7
8
Это Неверный номер
5.4.Операторы break и continue
Оператор break вызывает немедленный выход из циклов for, while, do-while и переключателя switch. Выход осуществляется только из одного самого внутреннего из нескольких охватывающих циклов или переключателей.
Оператор continue вызывает следующую итерацию охватывающего его цикла for, while, do-while до окончания выполнения всех инструкций в теле цикла. Использование операторов break и continue иллюстрируется следующей программой.
Программа 11. Сумма положительных чисел
В программе в бесконечном цикле for вводятся и суммируются положительные числа, отрицательные числа игнорируются, а при поступлении нуля используется break для выхода из цикла.
// Файл SumPos.cpp
// Подсчет суммы положительных чисел и их количества
#include <iostream.h>
#include <conio.h>
int main()
{
int x, sum = 0; // Вводимое число и сумма
int i; // Параметр цикла
int ipos = 0; // Количество введенных положительных чисел
cout << "\nВводите числа:\n";
for(i = 0; ; i++){ // Бесконечный цикл
cin >> x;
if(x < 0) // Если число отрицательное,
continue; // переход к повторению цикла
if(x == 0)
break; // Выход из цикла
sum += x; // Увеличение суммы
ipos++; // Увеличение счетчика положительных чисел
}
cout << "Введено " << i << ” чисел, \n”;
cout << ” из них ” << ipos << ” положительных \n";
cout << "Сумма положительных sum = " << sum << "\n";
getch();
return 0;
}
Результаты работы программы:
Вводите числа:
1 2 3 -1 -4 6 7 -3 -9 0
Введено 9 чисел,
из них 5 положительных
Сумма положительных sum = 19
Задачи 18-52. Выбор и циклы
Напишите программу, которая вводит целое число и проверяет, является оно четным или нечетным.
Напишите программу, вводящую три числа и печатающую наибольшее из них.
Дано трехзначное целое число. Требуется проверить, делится ли оно на 3. Известно, что число делится на 3, если на 3 делится сумма его цифр.
Дано трехзначное целое число. Проверить, читается ли оно одинаково слева направо и справа налево. Такие числа называются палиндромами.
Напишите программу, которая запрашивает номер месяца и выводит соответствующее название времени года.
Напишите программу, которая спрашивает Ваш возраст в годах и выводит его с правильным использованием слов «год» или «лет», например, 17 лет, 21 год, 22 года.
Напишите программу, вводящую номер месяца и выводящую его название.
В старояпонском календаре был принят 60–летний цикл, основанный на пяти 12–летних подциклах. Подциклы обозначались названиями цвета: зеленый, красный, желтый, белый и черный. Внутри каждого подцикла годы носили названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. (1984 год – год зеленой крысы – был началом очередного цикла). Напишите программу, которая вводит номер некоторого года, больший чем 1984, и печатает его название по старояпонскому календарю.
Даны координаты вершин треугольника и координаты некоторой точки внутри него. Найти расстояние от данной точки до ближайшей стороны треугольника. (При определении расстояний учесть, что площадь треугольника можно вычислить и через три его вершины и через произведение площади основания на высоту.)
При решении следующих задач нужно применить наиболее подходящий из циклов while, for, do while.
Напишите программу, печатающую таблицу значений функции
для x = 0.1, 0.2, ... , 2.
Напишите программу, печатающую таблицу умножения для чисел от 0 до 9 в десятичной системе счисления.
Дано целое k от 1 до 180. Определить, какая цифра находится в k-й позиции последовательности 10111213…99, в которой выписаны подряд все двузначные числа.
Дано натуральное k. Определить k-ю цифру последовательности 110100100010000100000…, в которой выписаны подряд степени 10.
Напишите программу, определяющую k – количество цифр в десятичной записи целого неотрицательного числа n.
Напишите программу, подсчитывающую количество двоичных цифр, требуемых для записи целого неотрицательного числа n
Числа Фибоначчи fn определяются формулами:
f0 = f1 = 1; fn =fn-1 + fn-2 при n = 2, 3,…
Напишите программу, выводящую число Фибоначчи с заданным номером n > 1.
Напишите программу, печатающую таблицу чисел Фибоначчи, номера которых не превышают заданного значения n.
Напишите программу, выводящую число Фибоначчи с заданным номером n > 1.
Напишите программу, выводящую все числа Фибоначчи, значения которых не превышают некоторого числа N.
Вычислить S – сумму всех чисел Фибоначчи, которые не превосходят 1000.
Напишите программу, вводящую заданное число n пар вещественных чисел x, y. Рассматривая эти пары как координаты точек на плоскости, определить радиус наименьшего круга (с центром в начале координат), внутрь которого попадают все эти точки.
Дана непустая последовательность положительных вещественных чисел x1, x2, … , xn (n заранее не известно), за которой следует отрицательное число. Вычислить величину
nx1+ (n–1)x2 + … + 2xn-1 +xn.
Дана последовательность целых чисел. Определить количество чисел в наиболее длинной подпоследовательности из подряд идущих нулей.
Определить, является ли заданное натуральное число n совершенным, то есть равным сумме всех своих положительных делителей, кроме самого этого числа. Например, число 6 – совершенно: 6 = 1 + 2 + 3.
Дано целое n > 0. Напечатать все простые числа из диапазона [2, n]. Простым называется число, которое не имеет делителей, кроме 1 и самого себя.
Определить, является ли заданное натуральное число палиндромом, то есть таким, запись которого в десятичной системе счисления читается одинаково слева направо и справа налево.
Дано натуральное k. Определить k – ю цифру последовательности 12345678910111213 …, в которой выписаны подряд все натуральные числа.
Найти все целые корни уравнения
x3 + bx2 + cx +d = 0,
где b, c, d – заданные целые числа, причем d 0.
Замечание. Целыми корнями могут быть только положительные и отрицательные делители коэффициента d.
Дано натуральное число n. Напечатать все числа от 1 до n в десятичной и двоичной системах счисления.
Напишите программу, вводящую положительные числа x1, x2,.. Признаком окончания ввода является ввод нуля или отрицательного числа. Вычислить y=x1+x1x2+x1x2x3+…+ x1x2 xm, где m – число введенных положительных чисел.
Подсчитать количество «счастливых» шестизначных автобусных билетов, то есть таких, в номерах которых сумма первых трех цифр равна сумме трех последних. (Можно воспользоваться тем, что количество «счастливых» билетов равно s02+s12+s22+…+s272, где sn, n = 0, 1,…, 27 – количество чисел от 0 до 999, сумма цифр которых равна n.)
Напишите программу, вычисляющую факториал заданного натурального числа n. Факториал n – это последовательное произведение всех чисел от 1 до n: n! = 1∙2∙3∙…∙(n-1) n.
Дано вещественное число x и вещественное число >0. Вычислить с точностью значение следующей функции
ex=1 + x/1! + x2/2! + … + xn/n! + …
Вычисления прекратить, когда очередной член суммы xn/n! станет по модулю меньше .
Вычислите с заданной точность > 0 приближенное значение синуса, используя ряд:
sin x = x - x3/3! + x5/5! -…+(-1)nx2n+1/(2n+1)!+…
Не используя стандартные функции, за исключением abs, вычислить с заданной точностью eps>0
y=arctg x = x – x3/3 + x5/5 + … + (-1)nx2n+1/(2n+1) + … (|x| < 1).
