Программирование >>  Структурное программирование 

1 ... 225 226 227 [ 228 ] 229 230 231 ... 342


f) Напечатайте число 1.234 в виде значения с плавающей точкой с точностью 9 разрядов.

g) Прочитайте строку символы из стандартного входного потока. Сохраните строку в символьном массиве s. Удаляйте кавычки из входного потока. Читайте максимум 50 символов (включая заключительный нулевой символ).

11.7. Напишите программу для проверки вводимых целых значений в десятичном, восьмеричном и шестнадцатеричном форматах. Выводите каждое прочитанное целое число во всех трех форматах. Проверьте программу со следующими входными данными: 10, 010, 0x10.

11.8. Напишите программу, которая печатает значения указателей, используя приведение их типа к типу целых чисел. Почему печатаются странные значения? Почему получаются ошибки?

11.9. Напишите программу для проверки результатов вывода на печать целого значения 12345 и значения с плавающей запятой 1.2345 в поля разной ширины. Что происходит, когда значения печатаются в полях, ширина которых меньше указанных значений?

11.10. Напишите программу, которая печатает значение 100.453627, округленное до ближайшего целого, до одной десятой, сотой, тысячной и десятитысячной.

11.11. Напишите программу, которая вводит строку с клавиатуры и определяет длину строки. Напечатайте строку, используя ее удвоенную длину в качестве ширины поля.

11.12. Напишите программу, которая преобразует температуру в целых числах по Фаренгейту от О до 212 градусов к значениям с плавающей запятой температуры по Цельсию с точностью до 3 знаков. Используйте для вычислений формулу

Celsius = 5.0/9.0 * (fahrenheit - 32);

Выходные данные должны быть отпечатаны в две колонки с выравниванием по правой границе поля, причем значения температуры по Цельсию должны содержать знак и перед положительными, и перед отрицательными температурами.

11.13. В некоторых языках программирования вводимые строки заключаются либо в одиночные кавычки (апострофы), либо в двойные кавычки. Напишите программу, которая читает три следующие строки suzy, suzy и suzy. Игнорируются одиночные и двойные кавычки, или они читаются как часть строки?

11.14. На рис. 11.30 операции взять из потока и поместить в поток были перегружены для ввода и вывода объектов класса PhoneNumber. Перепишите операцию взять из потока так, чтобы она контролировала вводимые данные. Функция operator должна быть полностью переписана в соответствии со следующим алгоритмом:

а) Введите телефонный номер целиком в массив. Проверьте, что введено соответствующее число символов. Всего для телефонного номера должно быть прочитано 14 символов вида (800) 555-1212.



Используйте функцию-элемент потока clear для установки флага ios::failbit в случае неправильного ввода.

b) Код местности и коммутатор не должны начинаться с О или 1. Проверьте первую цифру в коде местности и коммутаторе, чтобы быть уверенными, что они не начинаются ни с О, ни с 1. Используйте функцию-элемент потока clear для установки флага ios::fail-bit в случае неправильного ввода.

c) Средняя цифра кода местности всегда О или 1. Проверьте среднюю цифру на О и 1. Используйте функцию-элемент потока clear для установки флага ios::failbit в случае неправильного ввода. Если ни одна из приведенных выше операций не привела к установке флага ios::failbit, скопируйте три части телефонного номера в элементы areaCode, exchange и line объекта класса PhoneNumber. В главной программе прежде чем печатать телефонный номер надо проверить, не установлен ли ios::failbit, свидетельствующий о неправильном вводе. Если установлен, то программа должна напечатать сообщение об ошибке и не печатать номер телефона.

11.15. Напишите следующую программу:

a) Создайте определенный пользователем класс Point, который содержит закрытые данные-элементы xCoordinate и yCoordinate и объявляет перегруженные функции-операции взять из потока и поместить в поток как дружественные функции класса.

b) Опишите функции-операции взять из потока и поместить в поток. Функция-операция взять из потока должна определять, являются ли вводимые данные правильными, и если нет, то она должна устанавливать индикатор неправильного ввода ios::failbit. Операция поместить в поток не должна выводить точку, если произошла ошибка ввода.

c) Напишите функцию main, которая проверяет ввод и вывод определенного пользователем класса Point с помощью перегруженных операций взять из потока и поместить в поток.

11.16. Напишите следующую программу:

a) Создайте определенный пользователем класс Complex, который содержит закрытые данные-элементы real и imaginary и объявляет перегруженные функции-операции взять из потока и поместить в поток как дружественные функции класса.

b) Опишите функции-операции взять из потока и поместить в поток. Функция-операция взять из потока должна определять, являются ли вводимые данные правильными, и если нет, то она должна устанавливать индикатор неправильного ввода ios::failbit. Входные данные должны иметь форму:

3 -Ь 8i

Значения могут быть как положительными, так и отрицательными, и одна из двух составляющих (действительная или мнимая часть) может отсутствовать. Если часть отсутствует, то соответствующий элемент данных должен быть задан равным 0. Операция поместить в поток не должна выводить, если произошла ошибка ввода. Фор-



мат вывода должен быть идентичен показанному выше формату ввода. Для отрицательных мнимых частей должен быть напечатан знак минус вместо знака плюс.

с) Напишите функцию main, которая проверяет ввод и вывод определенного пользователем класса Complex с помош;ью перегруженных операций взять из потока и поместить в поток

11.17. Напишите программу, которая использует структуру for для печати таблицы значений ASCII для набора символов ASCII с 33 по 126. Программа должна печатать десятичное, восьмеричное, шестнадцатеричное и символьное значения каждого символа. Используйте манипуляторы потока dec, oct и hex для печати целых значений.

11.18. Напишите программу, которая показывает, что каждая из функций-элементов getline и get с тремя аргументами заканчивает ввод строки конечным нулевым символом. Покажите также, что get оставляет символ ограничитель во входном потоке, а getline извлекает его из потока и отбрасывает. Что происходит с непрочитанными символами в потоке?

11.19. Напишите программу, которая создает определенный пользователем манипулятор skipwhite для пропуска лидирующих (начальных) символов разделителей во входном потоке. Манипулятор должен использовать функцию isspace из библиотеки ctype.h для проверки, не является ли символ символом разделителем. Каждый символ должен вводиться функцией-элементом get класса istream. Когда очередной символ оказывается не разделителем, манипулятор skip-white должен заканчивать свою работу возвратом этого символа назад во входной поток и возвращением ссылки на istream.

Проверьте этот манипулятор, написав функцию main, в которой флаг ios::skipws не установлен, так что операция взять из потока автоматически не пропускает символы разделители. Затем проверьте манипулятор на входном потоке, вводя сначала символы разделители, а затем значащие символы. Печатайте вводимый символ, чтобы подтвердить, что символы разделители не вводятся.



1 ... 225 226 227 [ 228 ] 229 230 231 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика