- •Предисловие
- •Глава 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. Стандартная библиотека шаблонов
- •Литература
- •Предметный указатель
Работа с числовыми данными
Плавающие константы
Числовые константы для типов чисел с плавающей точкой записываются в виде
[s]m.mmmE[+/-]pp.
Здесь s – знак числа, m.mmm – мантисса, количество цифр которой определяет точность числа, pp – порядок числа, который может быть положительным или отрицательным. Если знак отсутствует, число считается положительным. Символ E (или e) заменяет 10. Следующие константы дают три различных записи одного и того же числа:
123.321, 1.23321E2, 123321e-3.
В записи числовых констант недопустимы пробелы, так как пробелы считаются разделителями лексем.
По умолчанию считается, что числовые константы с плавающей точкой имеют тип double. Если требуется константа типа float, ее можно явно определить с помощью суффиксов f или F, например,
3.14159265f, 2.0F.
Для числовых констант типа long double используются суффиксы l или L:
2.71828182845904523536l, 3.14159265358979323846L
(это числа e и π соответственно).
3.3. Ввод и вывод чисел
Числовые данные выводятся в выходной поток оператором вывода <<, определенным в заголовочном файле iostream.h. Этот оператор способен выводить данные любых стандартных типов, в том числе отдельные символы, строки. Приемником данных для выходного потока может быть стандартное устройство для вывода (экран) или дисковый файл. В iostream.h определена потоковая переменная cout, связанная со стандартным выходным устройством, которую надо использовать при выводе результатов на экран.
При выводе чисел с плавающей можно управлять точностью, то есть числом цифр, представляющих число. Для этого используется функция precision. При вызове этой функции в виде cout.precision() она возвращает установленную точность. При вызове в виде cout.precision(n) задается число выводимых цифр n.
Для ввода чисел применяется оператор >> чтения из потока. Источником данных для входного потока может быть стандартное входное устройство (клавиатура) или файл на диске. При чтении чисел
48 2
сначала пропускаются пробелы, затем читаются символы числа. Ввод числа прекращается при поступлении пробела, табуляции или новой строки. Для ввода с клавиатуры следует использовать стандартный входной поток cin, объявленный в заголовочном файле iostream.h.
При вводе данных любых типов оператором >> разделителем отдельных порций данных является пробел.
Оператор ввода >> читает из потока символы, которые допускаются в записи данных для типа вводимой величины. Например, при вводе чисел с плавающей точкой допустима буква e как обозначение порядка, а при вводе целых чисел эта буква недопустима. При вводе с клавиатуры, набранные символы будут обрабатываться после нажатия
Enter.
Программа 5. Точность плавающих чисел
Впрограмме переменная x типа float инициализируются константой
счислом цифр заведомо большим, чем может разместиться в выделяемой для переменной памяти. При переводе констант, записанных в десятичной системе счисления, в двоичную систему, используемую внутри компьютера, лишние двоичные цифры, не умещающиеся в разряды, отведенные для числа, отбрасываются, за счет чего возникает ошибка усечения. Значение переменной y типа double вводится с клавиатуры. Далее переменные x и y печатаются с различной точностью.
// Файл PrnFloat.cpp |
|
|
#include <iostream.h> |
|
|
#include <conio.h> |
|
|
void main() |
|
|
{ |
|
|
float x = 12345.678987654321; |
// 17 цифр |
|
double y; |
|
|
cout << "Input y: "; |
|
// Приглашение ко вводу |
cin >> y; |
|
// Ввод переменной y |
// Печать точности по умолчанию |
||
cout << "\nprecision = " << (cout.precision()); |
||
cout << "\n x = " << x << ", |
y = " << y; |
|
cout.precision(4); |
|
// Установка точности 4 |
cout << "\nprecision = " << (cout.precision()); |
||
cout << "\n x = " << x << ", |
y = " << y; |
|
cout.precision(18); |
|
// Установка точности 18 |
cout << "\nprecision = " << (cout.precision()); |
||
cout << "\n x = " << x << ", |
y = " << y; |
|
cout.precision(6); |
// Восстановление точности по умолчанию |
|
getch(); |
|
|
Работа с числовыми данными
}
Далее приводится диалог с программой:
Input y: 123456789.87654321 precision = 6
x= 12345.7, y = 1.23457e+08 precision = 4
x= 1.235e+04, y = 1.235e+08 precision = 18
x= 12345.6787109375, y = 123456789.876543224
Оператор << выводит для чисел с плавающей точкой по умолчанию 6 цифр, при этом происходит округление, если все цифры числа не помещаются в отведенное число позиций. В зависимости от значения числа используется представление с фиксированной точкой или научный формат с показателем степени. Если точность превышает число цифр в числе, выводятся случайные цифры, заполняющие отведенные позиции.
Точность 18 цифр превышает точность представления чисел float и double, хотя оператор вывода «добросовестно» рисует на экране заказанные 18 цифр, но видно, что для float правильными являются только первые 8 цифр, а для double первые 16.
3.4.Логический тип и логические операции
Вязыке Си нет логического типа, вместо него используется целый тип, причем нулевое значение принято считать ложью, а отличное от нуля значение – истиной. В C++ введен специальный логический тип,
обозначаемый ключевым словом bool, имеющий два значения: true – истина и false – ложь.
По определению, true имеет значение 1 при преобразовании к целому типу, а false – 0.
Целые можно преобразовывать в логические значения, причем ненулевое значение преобразуется true, а ноль – в false, например,
bool bb = 7; |
// Целое 7 будет преобразовано в bool и bb будет true |
int i = true; |
// int(true) равно 1, поэтому i будет равно 1 |
В арифметических и логических выражениях логические значения преобразуются в целые (int) и операции выполняются над преобразованными величинами. Если результат приводится обратно к логическому типу, то 0 преобразуется в false, а ненулевое значение – в true.
Логический тип можно использовать для выражения результатов логических операций, например,
50 2
int a, b;
…
bool amoreb = a > b;
Здесь amoreb будет true, если a больше b и false в противном случае. В C++ имеются три логических оператора:
логическое умножение И |
&&, |
логическое сложение ИЛИ |
||, |
логическое отрицание НЕ |
!. |
В табл.14 приводится результаты выполнения логических операторов. Вместо true и false показаны совместимые значения 1 и 0.