- •Информатика и программирование
- •Лабораторная работа № 04
- •Лабораторная работа № 04
- •1. Краткие теоретические сведения
- •1.1. Операции
- •1.2. Порядок (старшинство) выполнения операций
- •1.4. Разделители
- •1.5. Переменные
- •1.5.1. Объявление переменных
- •1.5.2. Смысловые имена переменных
- •1.5.3. Таблица идентификаторов
- •1.5.4. Слова, которые нельзя использовать для имен переменных
- •1.5.5. Присваивание значения переменной
- •1.5.6. Присваивание значения при объявлении
- •1.5.7. Использование значения переменной
- •1.5.8. Превышение диапазона значений переменной
- •1.5.9. Представление о точности
- •1.5.10. Следите за ошибками переполнения при арифметических операциях
- •1.6. Константы
- •1.7. Перечисления
- •1.8. Выражения
- •1.9. Правила записи выражений
- •1.10. Преобразования типов
- •1.11. Операции (операторы) инкремента и декремента
- •1.11.1. Увеличение значения переменной на 1
- •1.11.2. Представление о префиксной (до) и постфиксной (после) операциях увеличения
- •2. Задание
- •2.11. Задания
- •Варианты задания приведены в табл. 4.14. Вариант соответствует номеру в журнале группы.
- •Варианты задания приведены в табл. 4.15. Вариант соответствует номеру в журнале группы.
- •2.11.3. Задание 3. (Домашнее).
- •2.11.3.1. Содержание работы
- •2.11.3.2. Теоретические сведения
- •2.11.3.3. Варианты задания 3
- •Варианты задания приведены в табл. 4.15. Вариант соответствует номеру в журнале группы.
- •2.11.3.4. Пример программы
- •2.11.3.5. Программа
- •2.11.3.6. Результаты работы программы.
- •2.11.3.7. Типичные ошибки при выполнении работы
- •3. Выводы
- •4. Требование к отчету
- •5. Вопросы для самоконтроля
- •Литература
- •1. Краткие теоретические сведения 2
1.5.9. Представление о точности
В предыдущем разделе вы узнали, что ошибки переполнения возникают при присваивании переменной значения, которое находится вне диапазона значений для переменной данного типа. Подобно этому вам также необходимо знать, что компьютеры не могут обеспечить неограниченную точность при хранении чисел. Например, при работе с числами с плавающей точкой (числа с десятичной точкой) компьютер не всегда может представить число с требуемой точностью. Поэтому возможны ошибки округления, которые тяжело обнаружить.
Программа в примере 4.14 присваивает значение чуть меньше 0.5 переменным типа float и double. К сожалению, поскольку компьютер обладает ограниченной способностью в представлении чисел, переменные реально содержат не присваиваемые им значения, а число 0.5:
Пример 4.14
#include <iostream.h>
void main(void)
{ float f_not_half = 0.49999990; double d_not_half = 0.49999990; cout << "Значение типа float 0.49999990 равно " << f_not_half << endl; cout << "Значение типа double 0.49999990 равно " << d_not_half << endl; }
Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод:
Значение типа float 0.49999990 равно 0.5
Значение типа double 0.49999990 равно 0.5
Как видите, значения, присваиваемые программой переменным, и значения, которые переменные содержат в действительности, не идентичны. Такие ошибки округления происходят потому, что компьютер должен представлять числа, используя фиксированное количество единиц и нулей. В большинстве случаев компьютер может точно представлять числа. Однако иногда, как показано в этой программе, компьютер представляет числа приближенно, а не точно. При программировании вам необходимо всегда помнить о точности. В зависимости от значений, с которыми работают ваши программы, могут возникать трудно обнаруживаемые ошибки округления.
1.5.10. Следите за ошибками переполнения при арифметических операциях
Из раздела 1.7.7 вы узнали, что, если вы присваиваете переменной значение, которое не входит в диапазон значений для данного типа переменной, возникает ошибка переполнения. При выполнении арифметических операций необходимо помнить о возможности возникновения ошибок переполнения в процессе вычислений. Например, программа в примере 4.15 умножает 200 на 300 и присваивает результат переменной типа int. Однако, поскольку результат умножения (60000) превышает наибольшее возможное значение для типа int (32767), возникает ошибка переполнения.
Пример 4.15
#include <iostream.h>
void main(void)
{ int result; result = 200 * 300; cout << "200 * 300 = " << result << endl; }
Когда вы откомпилируете и запустите эту программу, на экране появится следующий вывод:
200 * 300 = -5536
1.6. Константы
Константы, так же как и переменные, представляют собой область памяти для хранения данных с тем лишь отличием, что значение, присвоенное константе первоначально, не может быть изменено на протяжении выполнения всей программы. Константы бывают литеральными и типизованными, причем литеральные константы делятся на: символьные, строковые, целые и вещественные.
Символьные константы представляются отдельным символом, заключенным в одинарные кавычки (апострофы): 'е', '@', '<'
Строковые константы - это последовательность символов, заключенная в двойные кавычки: "Это пример не самой длинной строковой константы!11.
Целые константы бывают следующих форматов:
■ десятичные;
■ восьмеричные:
■ шестнадцатеричные.
Десятичные могут быть представлены как последовательность цифр, начинающаяся не с нуля, например: 123; 2384.
Восьмеричные константы - последовательность восьмеричных цифр (от 0 до 7), начинающаяся с нуля, например: 034; 047.
Шестнадцатеричный формат констант начинается с символов Ох или ОХ с последующими шестнадцатеричными цифрами (0…9.A…F), например: 0xF4; 0X5D. Буквенные символы при этом могут быть представлены в любом регистре.
Длинные целые константы, используемые в переменных типа long, определяются буквой 1 или L сразу после константы без пробела: 36L, 012L, 0x52L.
Вещественные константы - числа с плавающей запятой могут быть записаны в десятичном формате (24.58; 13.0; .71) или в экспоненциальной форме (1е4; 5е+2; 2.2е-5, при этом в мантиссе может пропускаться целая или дробная часть: .2е4).
Типизованные константы используются как переменные, значение которых не может быть изменено после инициализации.
Типизованная константа объявляется с помощью ключевого слова const, за которым следует указание типа константы, но, в отличие от переменных, константы всегда должны быть инициализированы.
Символьные константы в С++ занимают в памяти 1 байт и, следовательно, могут принимать значения от 0 до 255 (см. табл. 4.2). При этом существует ряд символов, которые не отображаются при печати, - они выполняют специальные действия: возврат каретки, табуляция, и называются символами escape-последовательности. Термин мescape-последовательность" ввела компания Epson, ставшая первой фирмой, которая для управления выводом информации на своих принтерах стала использовать неотображаемые символы. Исторически сложилось так, что управляющие последовательности начинались с кода с десятичным значением 27 (0x1В), что соответствовало символу "Escape" кодировки ASCII.
Escape-символы в программе изображаются в виде обратного слеша, за которым следует буква или символ.
Таблица 4.8.
Символы escape-последовательности
\\ |
Вывод на печать обратной черты |
\' |
Вывод апострофа |
\" |
Вывод при печати кавычки |
\? |
Символ вопросительного знака |
\а |
Подача звукового сигнала |
\b |
Возврат курсора на 1 символ назад . |
\f |
Перевод страницы |
\n |
Перевод строки |
\г |
Возврат курсора на начало текущей строки |
\t |
Перевод курсора к следующей позиции табуляции |
\v |
Вертикальная табуляция (вниз) |
В качестве примера использования типизованных и литеральных констант вычислим значение площади круга по известному значению радиуса.
Пример 4.16.
#include <iostream.h>
int main ()
{
const double pi = 3.1415;
const int Radius = 3;
double Square =0;
Square = pi * Radius * Radius;
cout << Square << '\n';
return 0;
}
В начале главной функции программы объявляются две константы: pi и Radius. Значение переменной Square изменяется в ходе выполнения программы и не может быть представлено как константа. Поскольку значение радиуса задано явно и в тексте программы не предусмотрено его изменение, переменная Radius объявлена как константа.