- •Предисловие
- •Глава 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. Стандартная библиотека шаблонов
- •Литература
- •Предметный указатель
Управление и циклы 71
Ввод исходных данных производится в цикле do … while. Этот цикл повторится, если будет истинным выражение a < 0 || eps <= 0. Оператор || является логическим оператором ИЛИ и все выражение будет истинным, если введено или отрицательное значение для a, или для точности eps. Синтаксис языка требует, чтобы между do и while была единственная инструкция. Здесь четыре инструкции объединены в одну составную инструкцию фигурными скобками { и }.
Вычисления начинаются с присваивания переменной xn1 значения a. Далее вычисления продолжаются в цикле do while.
Важным приемом программирования является присваивание xn = xn1;
которое позволяет обойтись только двумя переменными при вычислении многих последовательных приближений.
Каждое из приближений печатается.
5.3. Переключатель
Для выбора одного из многих вариантов удобно использовать оператор switch, который имеет вид:
switch(выр){
case константа1 : инструкция1
break;
case константа2 : инструкция2
break;
…
case константаN : инструкцияN
break;
default: инструкция
}
Ветвь default может отсутствовать.
Работа переключателя состоит в следующем. Вычисляется выражение выр, затем его значение сравнивается с константами. При совпадении выполняется соответствующая инструкция и работа завершается. Если выр не совпало ни с одной константой, выполняется инструкция ветви default, если она есть.
72 5
Программа 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 до окончания выполнения всех инструкций
Управление и циклы 73
в теле цикла. Использование операторов 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. Напишите программу, которая вводит целое число и проверяет, является оно четным или нечетным.
745
19.Напишите программу, вводящую три числа и печатающую наибольшее из них.
20.Дано трехзначное целое число. Требуется проверить, делится ли оно на 3. Известно, что число делится на 3, если на 3 делится сумма его цифр.
21.Дано трехзначное целое число. Проверить, читается ли оно одинаково слева направо и справа налево. Такие числа называются
палиндромами.
22.Напишите программу, которая запрашивает номер месяца и выводит соответствующее название времени года.
23.Напишите программу, которая спрашивает Ваш возраст в годах и выводит его с правильным использованием слов «год» или «лет», например, 17 лет, 21 год, 22 года.
24.Напишите программу, вводящую номер месяца и выводящую его название.
25.В старояпонском календаре был принят 60–летний цикл, основанный на пяти 12–летних подциклах. Подциклы обозначались названиями цвета: зеленый, красный, желтый, белый и черный. Внутри каждого подцикла годы носили названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. (1984 год – год зеленой крысы – был началом очередного цикла). Напишите программу, которая вводит номер некоторого года, больший чем 1984, и печатает его название по старояпонскому календарю.
26.Даны координаты вершин треугольника и координаты некоторой точки внутри него. Найти расстояние от данной точки до ближайшей стороны треугольника. (При определении расстояний учесть, что площадь треугольника можно вычислить и через три его вершины и через произведение площади основания на высоту.)
При решении следующих задач нужно применить наиболее
подходящий из циклов while, for, do |
while. |
|||||
27. Напишите программу, печатающую таблицу значений |
||||||
функции |
|
|
|
|
|
|
p( x) = |
1 |
|
|
e |
− 1( ln x−1) 2 |
|
|
|
|
|
2 |
x 2π
для x = 0.1, 0.2, ... , 2.
28.Напишите программу, печатающую таблицу умножения для чисел от 0 до 9 в десятичной системе счисления.
29.Дано целое k от 1 до 180. Определить, какая цифра находится в k-й позиции последовательности 10111213…99, в которой выписаны подряд все двузначные числа.
Управление и циклы 75
30.Дано натуральное k. Определить k-ю цифру последовательности 110100100010000100000…, в которой выписаны подряд степени 10.
31.Напишите программу, определяющую k – количество цифр в десятичной записи целого неотрицательного числа n.
32.Напишите программу, подсчитывающую количество двоичных цифр, требуемых для записи целого неотрицательного числа n
33.Числа Фибоначчи fn определяются формулами:
f0 = f1 = 1; fn =fn-1 + fn-2 при n = 2, 3,…
Напишите программу, выводящую число Фибоначчи с заданным номером n > 1.
34.Напишите программу, печатающую таблицу чисел Фибоначчи, номера которых не превышают заданного значения n.
35.Напишите программу, выводящую число Фибоначчи с заданным номером n > 1.
36.Напишите программу, выводящую все числа Фибоначчи, значения которых не превышают некоторого числа N.
37.Вычислить S – сумму всех чисел Фибоначчи, которые не превосходят 1000.
38.Напишите программу, вводящую заданное число n пар вещественных чисел x, y. Рассматривая эти пары как координаты точек на плоскости, определить радиус наименьшего круга (с центром в начале координат), внутрь которого попадают все эти точки.
39.Дана непустая последовательность положительных
вещественных чисел x1, x2, … , xn (n заранее не известно), за которой следует отрицательное число. Вычислить величину
nx1+ (n–1)x2 + … + 2xn-1 +xn.
40.Дана последовательность целых чисел. Определить количество чисел в наиболее длинной подпоследовательности из подряд идущих нулей.
41.Определить, является ли заданное натуральное число n совершенным, то есть равным сумме всех своих положительных делителей, кроме самого этого числа. Например, число 6 – совершенно: 6 = 1 + 2 + 3.
42.Дано целое n > 0. Напечатать все простые числа из диапазона [2, n]. Простым называется число, которое не имеет делителей, кроме 1
исамого себя.
43.Определить, является ли заданное натуральное число палиндромом, то есть таким, запись которого в десятичной системе счисления читается одинаково слева направо и справа налево.
765
44.Дано натуральное k. Определить k – ю цифру последовательности 12345678910111213 …, в которой выписаны подряд все натуральные числа.
45.Найти все целые корни уравнения
x3 + bx2 + cx +d = 0,
где b, c, d – заданные целые числа, причем d ¹ 0.
Замечание. Целыми корнями могут быть только положительные и отрицательные делители коэффициента d.
46.Дано натуральное число n. Напечатать все числа от 1 до n в десятичной и двоичной системах счисления.
47.Напишите программу, вводящую положительные числа x1, x2,.. Признаком окончания ввода является ввод нуля или отрицательного
числа. Вычислить y=x1+x1x2+x1x2x3+…+ x1x2 ××× xm, где m – число введенных положительных чисел.
48.Подсчитать количество «счастливых» шестизначных автобусных билетов, то есть таких, в номерах которых сумма первых трех цифр равна сумме трех последних. (Можно воспользоваться тем,
что количество «счастливых» билетов равно s02+s12+s22+…+s272, где sn, n = 0, 1,…, 27 – количество чисел от 0 до 999, сумма цифр которых равна n.)
49.Напишите программу, вычисляющую факториал заданного
натурального числа n. Факториал |
n – это последовательное |
произведение всех чисел от 1 до n: n! = 1∙2∙3∙…∙(n-1) n. |
|
50. Дано вещественное число x |
и вещественное число e>0. |
Вычислить с точностью e значение следующей функции ex=1 + x/1! + x2/2! + … + xn/n! + …
Вычисления прекратить, когда очередной член суммы xn/n! станет по модулю меньше e.
51. Вычислите с заданной точность e > 0 приближенное значение синуса, используя ряд:
sin x = x - x3/3! + x5/5! -…+(-1)nx2n+1/(2n+1)!+…
52. Не используя стандартные функции, за исключением abs, вычислить с заданной точностью eps>0
y=arctg x = x – x3/3 + x5/5 + … + (-1)nx2n+1/(2n+1) + … (|x| < 1).