Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТ...docx
Скачиваний:
12
Добавлен:
21.09.2019
Размер:
695.51 Кб
Скачать

2.2 Вещественные числа

Для хранения вещественных чисел применяются типы данных float и

double. Смысл знаков "+" и "-" для вещественных типов совпадает с целыми.

Последние незначащие нули справа от десятичной точки игнорируются.

Поэтому варианты записи "+523.5", "523.5" и "523.500" представляют одно и то

же значение. В Си++ также допускается запись в формате с плавающей

запятой (в экспоненциальном формате) в виде мантиссы и порядка.

Например, 523.5 можно записать в виде "5.235e+02" (т.е. 5.235*10*10), а -

0.0034 в виде "-3.4e-03".

В большинстве случаев используется тип double, он обеспечивает

более высокую точность, чем float. Максимальную точность и наибольший

диапазон чисел достигается с помощью типа long double, но он требует

больше памяти чем double (8 байт).

2.3 Преобразование типов в выражениях

При выполнении вычислений иногда бывает нужно гарантировать, что

определенное значение будет рассматриваться как вещественное число,

даже если на самом деле это целое. Чаще всего это нужно при делении в

арифметических выражениях. Применительно к двум значениям типа int

операция деления "/" означает деление нацело, например, 7/2 равно 3. В

данном случае, если необходимо получить результат 3.5, то можно просто

добавить десятичную точку в записи одного или обоих чисел: "7.0/2", "7/2.0"

или "7.0/2.0". Но если и в числителе, и в знаменателе стоят переменные, а не

константы, то указанный способ не подходит. Вместо него можно применить

явное преобразование типа. Например, значение "7" преобразуется в

значение типа double с помощью выражения "double(7)". Поэтому в выражении

answer = double(numerator) / denominator

операция "/" всегда будет рассматриваться компилятором как

вещественное деление, даже если "numerator" и "denumerator" являются целыми

числами. Для явного преобразования типов можно пользоваться и другими

именами типов данных. Например, "int(14.35)" приведет к получению целого

числа 14.

2.4 Символьный тип

Для хранения символьных данных в Си++ предназначен тип "char".

Переменная типа "char" рассчитана на хранение только одного символа

(например, буквы или пробела). В памяти компьютера символы хранятся в

виде целых чисел. Соответствие между символами и их кодами

определяется таблицей кодировки, которая зависит от компьютера и

операционной системы. Почти во всех таблицах кодировки есть прописные

и строчные буквы английского алфавита, цифры 0,...,9, и некоторые

специальные символы, например, #, £, !, +, - и др. Самой распространенной

таблицей кодировки, скорее всего, является таблица символов ASCII.

В тексте программ символьные константы типа "char" надо заключать в

одиночные кавычки, иначе компилятор поймет их неправильно и это может

привести к ошибке компиляции, или, что еще хуже, к ошибкам времени

выполнения. Например, "'A'" является символьной константой, но "A" будет

рассматриваться компилятором в качестве имени переменной. Аналогично,

"'9'" является символом, а "9" – целочисленной константой.

Т.к. в памяти компьютера символы хранятся в виде целых чисел, то

тип "char" на самом деле является подмножеством типа "int". На Си++

разрешается использовать символы в арифметических выражениях.

Например, на любом компьютере с таблицей ASCII следующее выражение

даст истинное значение (TRUE, или 1):

'9'-'0' == 57-48 == 9

В таблице ASCII кодом символа '9' является десятичное число 57 (в

шестнадцатеричной записи 0x39), а ASCII–код символа '0' равен

десятичному числу 48 (шестнадцатеричное значение 0x30). Приведенное

выражение можно переписать в виде:

57-48 == 0x39-0x30 == 9

Кодами ASCII удобнее пользоваться в шестнадцатеричной форме.

При записи шестнадцатеричных чисел в Си++ применяется

двухсимвольный префикс "0x".

Переменные типа "char" существенно отличаются от "int" при

выполнении ввода данных с клавиатуры и вывода на экран. Рассмотрим

следующую программу.

#include <iostream.h>

void main()

{

int number;

char character;

cout << "Напечатайте символ и нажмите Enter:\n";

cin >> character;

number = character;

cout << "Вы ввели символ '" << character;

cout << "'.\n";

cout << "В памяти компьютера он хранится в виде числа ";

cout << number << ".\n";

}

Программа 4.1.

Программа 4.1 выдает на экран следующие сообщения:

Напечатайте символ и нажмите Enter:

9

Вы ввели символ '9'.

В памяти компьютера он хранится в виде числа 57.

Программу 4.1 можно изменить так, чтобы она печатала всю таблицу

символов ASCII. Для этого придется применить "оператор цикла for". "Цикл

for" является примером оператора цикла – эти операторы будут

рассмотрены подробно в одной из следующих лекций. Оператор for имеет

следующий синтаксис:

for (инициализация; условие_повторения; изменение_значений)

{

Оператор1;

...

...

ОператорN;

}

Цикл for выполняется в следующем порядке: (1) Сначала выполняется

оператор инициализации. (2) Выполняется проверка, является ли

условие_повторения истинным. Если условие ложно, то оператор for

завершается. Если условие истинно, то последовательно выполняются

операторы тела цикла Оператор1...ОператорN, и затем выполняется оператор

изменение_значений. После этого происходит переход на начало шага (2).

Чтобы код символа вывести на экран в шестнадцатеричной форме,

надо сначала послать на экран служебный символ-манипулятор.

Программа для печати фрагмента таблицы ASCII (от 32-го символа

(пробел) до 126-го (символ '~')), будет выглядеть так:

#include <iostream.h>

void main()

{

int number;

char character;

for (number = 32; number <= 126; number = number + 1 )

{

character = number;

cout << "Символ '" << character;

cout << "' имеет код ";

cout << dec << number << " (дес.) или ";

cout << hex << number << " (шестнд.).\n";

}

}

Программа 4.2.

Программа 4.2 напечатает на экране:

Символ ' ' имеет код 32 (дес.) или 20 (шестнд.).

Символ '!' имеет код 33 (дес.) или 21 (шестнд.).

...

...

Символ '}' имеет код 125 (дес.) или 7D (шестнд.).

Символ '~' имеет код 126 (дес.) или 7E (шестнд.).