- •Предисловие
- •Глава 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. Стандартная библиотека шаблонов
- •Литература
- •Предметный указатель
43
Глава 3. Работа с числовыми данными
3.1.Целые типы
Вязыке C++ поддерживаются целые типы, перечисленные в табл.1.
Таблица 2. Целые типы
Тип |
Размер, |
Диапазон значений |
|
|
байт |
Минимальное |
Максимальное |
char |
1 |
-27=-128 |
27 – 1 = 127 |
int |
2 |
-215=-32768 |
215 – 1 = 32767 |
long |
4 |
-231=-2147483648 |
231 – 1=2147483647 |
unsigned char |
1 |
0 |
28 – 1 = 255 |
unsigned int |
2 |
0 |
216 – 1 = 65535 |
unsigned long |
4 |
0 |
232 – 1 = 4294967295 |
Размер типа int зависит от реализации. Табл.3 относится к TC. В С++ Builder размер int 4 байта.
Над целыми числами можно выполнять операции:
сложения +, |
деления с отбрасыванием остатка /, |
вычитания -, |
нахождения остатка от деления %. |
умножения *, |
|
Эти арифметические операции над целыми дают целый результат. Примеры выражений с использование операций над целыми и
значения этих выражений приведены в табл.4.
Таблица 5. Операции над целыми типами
Выражен |
a |
b |
a + b |
a - b |
a * b |
a / b |
a % b |
ие |
|
|
|
|
|
|
|
Значени |
13 |
7 |
20 |
6 |
91 |
1 |
6 |
е |
|
|
|
|
|
|
|
Целые можно сравнивать с помощью меньше <, меньше или равно <=, больше >,
операторов отношения: больше или равно >=, равно ==, не равно !=.
44 2
Результат сравнения является либо истинным, либо ложным. В ранних версиях языка C++ не было специального логического типа, вместо него использовался целый тип. Истинным считается любое значение, отличное от нуля, нуль считается ложью. Таким образом, можно сказать, что результатом сравнения целых является целое, равное 1, если результат сравнения истинный и 0, если ложный. Примеры сравнения целых приведены в табл.6
Таблица 7. Сравнение целых
|
|
|
|
|
|
|
|
|
Выражен |
a |
b |
a<b |
a<=b |
a>b |
a>=b |
a = = b |
a != b |
ие |
|
|
|
|
|
|
|
|
Значени |
13 |
7 |
0 |
0 |
1 |
1 |
0 |
1 |
е |
|
|
|
|
|
|
|
|
Обратите внимание на обозначение оператора равно с помощью двух знаков: ==. Одним знаком = обозначается оператор присваивания. Это важно запомнить, так как использование оператора присваивания = вместо оператора сравнения == часто допускаемая ошибка.
Целые константы
Целые константы могут записываться в десятичной, шестнадцатеричной и восьмеричной системах счисления.
Десятичные константы записываются с помощью цифр от 0 до 9 и могут иметь знак, например, 123, -15, +9.
Восьмеричные константы начинаются с цифры нуль (0) и должны включать только восьмеричные цифры от 0 до 7, например, 0123, -015, но запись +09 является ошибкой, так как в восьмеричном числе использована недопустимая цифра 9.
Шестнадцатеричные константы начинаются с приставок 0x или 0X (цифра нуль и латинская буква “икс”). В их записи можно использовать, кроме обычных цифр от 0 до 9 и латинские буквы a, b, c, d, e, f или A, B, C, D, E, F, имеющие, соответственно, значения 10, 11, 12, 13, 14, 15, например,
0xA (это 10), 0Xf (это 15), 0x41(это 65).
В скобках указано числовое значение в десятичной системе счисления. Справедливо следующее равенство
6510 = 0x4116 = 01018,
где индексом для наглядности обозначено основание системы счисления.
Работа с числовыми данными
Программа 4. Операции над целыми
Программа вычисляет выражения, приведенные в таблицах 8 и 9. При определении переменных a и b им сразу задается начальное значение. Это называется инициализация. Внешне инициализация похожа на присваивание, так как используется тот же знак =, но инициализация выполняется на этапе компиляции, а присваивание происходит на этапе выполнения программы.
//Файл OperInt.cpp
//Результаты операций над целыми #include <iostream.h>
#include <conio.h> int main()
{
//Определение переменных
int a = 13, b = 7, |
// Числа |
sum, |
// Сумма |
difference, |
// Разность |
prod, |
// Произведение |
quotient, |
// Частное |
remainder; |
// Остаток |
cout << "\na = " << a << ", b = " << b << "\n"; // Вывод a и b
sum = a + b; |
// Вычисление суммы |
cout << "a + b = " << sum << "\n"; |
// Вывод суммы |
difference = a - b; |
// Вычисление разности |
cout << "a - b = " << difference << "\n"; |
// Вывод разности |
prod = a * b; |
// Произведение |
cout << "a * b = " << prod<< "\n"; |
// Вывод произведения |
quotient = a / b; |
// Вычисление частного |
cout << "a / b = " << quotient << "\n"; |
// Вывод частного |
remainder = a % b; |
// Вычисление остатка |
cout << "a % b = " << remainder << "\n"; |
// Вывод остатка |
cout << "(a < b) = " << (a < b) << "\n"; |
// Вычисление и |
cout << "(a <= b) = " << (a <= b) << "\n"; |
// вывод |
cout << "(a > b) = " << (a > b) << "\n"; |
// результатов |
cout << "(a >= b) = " << (a >= b) << "\n"; |
// сравнения |
cout << "(a == b) = " << (a == b) << "\n"; |
|
cout << "(a != b) = " << (a != b) << "\n"; |
|
getch(); |
|
return 0; |
|
}
Для вывода результатов и пояснений к ним используются цепочки операторов <<, которые обеспечивают последовательный вывод своих операндов.
46 2
Результаты арифметических действий присваиваются специальным переменным, значения которых затем печатаются. Результаты сравнения не запоминаются в каких-либо переменных, а сразу после вычисления выводятся.
Результаты, выдаваемые программой, совпадают со значениями выражений из таблиц 10 и 11:
a = 13, b = 7 a + b = 20
a - b = 6 a * b = 91 a / b = 1 a % b = 6
(a < b) = 0 (a <= b) = 0 (a > b) = 1 (a >= b) = 1 (a == b) = 0 (a != b) = 1
Чтобы задержать переход от экрана вывода в среду разработки, в конце программы вызывается функция getch(), которая ждет нажатия любой клавиши. Для доступа к этой функции в программу включается заголовочный файл conio.h.
3.2. Числа с плавающей точкой
Числа с плавающей точкой имеют целую и дробную части, могут быть положительными и отрицательными. Они моделируют вещественные числа, используемые в математике. В табл.12 перечислены типы чисел с плавающей точкой языка С++. Для краткости рассматриваемые типы иногда называют просто плавающими.
Таблица 13. Типы чисел с плавающей точкой
Тип |
Размер, |
Диапазон значений модуля |
Точность, |
|
|
байт |
|
|
цифр |
float |
4 |
от 3.4 |
* 10-38 до 3.4 * 10+38 |
6-7 |
double |
8 |
от 1.7 |
* 10-308 до 1.7 * 10+308 |
15-16 |
long double |
10 |
от 3.4 |
* 10-4932 до 1.1 * 10+4932 |
19-20 |
Под точностью понимается количество значащих цифр в десятичной записи числа. Точность определяется размером памяти, выделяемой под числа и способом ее использования.