ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 2) онлайн
Упражнения
Решения к упражнениям, помеченным знаком *, можно найти в приложении Ж.
*1. Считая, что кубический фут равен 7,481 галлона, написать программу, запрашивающую у пользователя число галлонов и выводящую на экран эквивалентный объем в кубических футах.
*2. Напишите программу, выводящую следующую таблицу:
1990 135
1991 7290
1992 11300
1993 16200
В программе использовать только один оператор с cout.
*3. Напишите программу, генерирующую следующий вывод:
10 20 19
Используйте представление числа 10 в виде целой константы. Для выво- да числа 20 воспользуйтесь одной из арифметических операций с при- сваиванием, а для вывода числа 19 — операцией декремента.
4. Напишите программу, выводящую на экран ваше любимое стихотворе- ние. Для разбиения на строчки используйте подходящую управляющую последовательность.
5. Библиотечная функция islower() принимает в качестве аргумента один сим- вол (букву) и возвращает ненулевое целое значение в том случае, если буква является строчной, и нулевое, если буква является заглавной. Опи- сание функции хранится в файле CTYPE.H. Напишите программу, которая принимает букву от пользователя, а затем выводит нулевое или ненуле- вое значение в зависимости от того, является ли буква строчной или нет.
6. На биржевых торгах за 1 фунт стерлингов давали $1.487, за франк — $0.172, за немецкую марку — $0.584, а за японскую йену — $0.00955. Напишите программу, которая запрашивает денежную сумму в долларах, а затем вы- водит эквивалентные суммы в других валютах.
7. Температуру, измеренную в градусах по Цельсию, можно перевести в гра- дусы по Фаренгейту путем умножения на 9/5 и сложения с числом 32. Напишите программу, запрашивающую температуру в градусах по Цель- сию и отображающую ее эквивалент по Фаренгейту.
8. Когда размер величины, выводимой на экран с помощью манипулятора setw(), оказывается меньше размера зарезервированного поля, по умолча- нию незаполненные поля заполняются пробелами. Манипулятор setfill() принимает в качестве аргумента один символ, который замещает все про- белы на незаполненных позициях поля. Модифицируйте пример WIDTH так, чтобы символы, разделяющие пары значений из столбцов, были не пробелами, а точками, например
Москва 8425785
9. Две дроби а/b и c/d можно сложить следующим образом: a/b + c/d = (a*d + b*c)/(b*d)
Например, 1/4 + 2/3 = (1*3 + 4*2)/4*3 = 11/12
Напишите программу, запрашивающую у пользователя значения двух дробей, а затем выводящую результат, также записанный в форме дроби. Взаимодействие программы с пользователем может выглядеть, например, следующим образом:
Введите первую дробь: 1/2 Введите вторую дробь: 2/5 Сумма равна 9/10
Вы можете использовать тот факт, что операция извлечения >>может считывать более одного значения за раз: cin >> а >> dummychar >> b;
10. Устаревшая денежная система Великобритании состояла из фунтов, шил- лингов и пенсов. 1 фунт был равен 20 шиллингам, а 1 шиллинг — 12 пен- сам. Для записи использовалась система, состоящая из знака £ и трех деся- тичных значений, разделенных точками. Например, запись £5.2.8 обозна- чала 5 фунтов, 2 шиллинга и 8 пенсов (пенс — множественное число от пенни). Современная денежная система, принятая в 50-е годы XX века, со- стоит только из фунтов и пенсов, причем один фунт равен 100 пенсам. Такой фунт называют десятичным. Таким образом, в новой денежной системе указанная сумма будет обозначаться как £5.13 (если быть точнее, £5.1333333). Напишите программу, которая будет преобразовывать сум- му, записанную в старом формате (фунты, шиллинги, пенсы), в новый формат (фунты, пенсы). Форматом взаимодействия программы с пользо- вателем может являться следующий:
Введите количество фунтов: 7 Заедите количество шиллингов: 17 Введите количество пенсов: 9 Десятичных фунтов: £7.89
В большинстве компиляторов для представления знака £ используется десятичный код 156. Некоторые компиляторы позволяют скопировать знак фунта прямо из таблицы символов Windows.
11. По умолчанию форматирование вывода производится по правому краю поля. Можно изменить форматирование текста на левостороннее путем использования манипулятора setiosflags(ios::left) (не беспокойтесь о смысле новой формы записи, встретившейся в манипуляторе). Используйте этот манипулятор вместе с setw() для того, чтобы произвести следующий вывод:
Фамилия Имя Адрес Город
-------------------------------------------------------------------
Петров Василий Кленовая 16 Санкт-Петербург Иванов Сергей Осиновая 3 Находка
Сидоров Иван Березовая 21 Калининград
12. Напишите программу, выполняющую действия, обратные тем, которые описаны в упражнении 10, то есть запрашивающую у пользователя сум- му, указанную в десятичных фунтах, и переводящую ее в старую систему
фунтов, шиллингов и пенсов. Пример взаимодействия программы с поль- зователем может выглядеть так:
Введите число десятичных фунтов: 3.51 Эквивалентная сумма в старой форме записи: £3.10.2
Обратите внимание на то, что если вам придется присваивать веществен- ное значение (например, 12,34) переменной целого типа, то его дробная часть (0,34) будет потеряна, а целая переменная получит значение 12. Чтобы избежать предупреждения со стороны компилятора, используйте явное преобразование типов. Можно использовать операторы, подобные приведенным ниже:
float decpounds; // сумма в десятичных фунтах int pounds; // сумма в старых фунтах
float decfrac; // десятичная дробная часть
pounds = static_cast<int>(decpounds); //отбрасывание
//дробной части
decfrac = decpounds - pounds; //прибавление дробной части
Чтобы получить число шиллингов, следует умножить на 20 значение пе- ременной decfrac. Аналогичным образом можно получить число пенсов.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
