Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
___2_Пособие по Языку С++.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.34 Mб
Скачать

2.6. Плавающие типы данных

Информацию о данных плавающих типов, которые представляют в ЭВМ вещественные числа, приведем в табл. 3.

Таблица 3

Плавающие типы

Тип

Длина

Диапазон

Десятичных цифр

float

4

3.4e-38 .. 3.4e38

7

double

8

1.7e-308 .. 1.7e308

15

long double

10

3.4e-4932 .. 1.1e4932

19

По умолчанию, плавающие константы имеют тип double, если они не выходят из соответствующего диапазона:

1.0, .3 -6. 2.3e-6 (означает 2.3˙10–6), 3e-19, 1.2 – типа double.

Суффикс Ɩ говорит о том, что плавающая константа будет иметь тип long double:

3Ɩ, 3E8Ɩ, 1.6e-19Ɩ, 1.3e-200Ɩ – long double.

2.7. Константы-строки, или литералы

Константа-строка – это последовательность символов, взятая в кавычки:

“строка“ “a+b=c\“ - это равенство\““.

Строковый литерал представляется в памяти как массив элементов типа char.

Для удобства при компиляции в конец каждой строки автоматически добавляется нуль-символ ‘\0’, являющийся признаком конца строки. Таким образом, в памяти литерал “три” занимает не три, а четыре байта.

2.8. Директива препроцессора define

Директива препроцессора define имеет вид

#define имя текст_подстановки, например,

#define nmax 1000

#define km (nmax3+1)

Имя, которое указано в #define в области его видимости заменяется в тексте программы текстом подстановки. Таким образом, вместо имени nmax (в области его видимости) в тексте везде появится 1000, а вместо km - (1000*3+1).

Отметим, что есть еще одна форма директивы #define (с параметрами).

2.9. Описания

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

int i, j, k, pmax;

float radix, a, b, s_m;

double k, kr;

char ch, ch1;

char symbol;

При описании переменная может быть инициализирована некоторым значением, например:

char t=‘t’, BACKSLASH=‘\\’;

int i=0, j, k, s=1;

float ro, eps=1e-6;

2.10. Модификатор const

Если в объявлении имени присутствует модификатор const, то объект, с которым сопоставлено данное имя, рассматривается в области существования этого имени как константа. Например:

const int i=50; // то же, что const i=50;

const double pi=3.14159;

Такие именованные константы в программе изменять нельзя. Использовать эти константы можно так же, как и обычные.

3. Выражения

Выражение - это сочетание различных операндов и операций. Например:

a+b a/b c<<d и т.д.

3.1. Операция и выражение присваивания

Операция присваивания обозначается символом ‘=

Простейший вид операции присвоения:

v = e

Здесь v- любое выражение, которое может принимать значение, e - произвольное выражение.

Операция присвоения выполняется справа налево, т.е. сначала вычисляется значение выражения e, а затем это значение присваивается левому операнду v. Левый операнд в операции присваивания должен быть т.н. адресным выражением, которое иначе называют Ɩ - value. Примером адресного, или именующего, выражения является имя переменной.

Не является Ɩ - value, например, выражение a+b.

Адресным выражением никогда не являются константы.

В языке C++ операция присваивания образует выражение присваивания, т.е.

a = b

означает не только засылку в a значения b, но и то, что a = b является выражением, значением которого является левый операнд после присвоения.

Отсюда следует, что возможна, например, такая запись:

a = b = c = d = e + 2;

Итак, результатом выражения присваивания является его левый операнд. Если тип правого операнда не совпадает с типом левого, то значение справа преобразуется к типу левого операнда (если это возможно). При этом может произойти потеря значения, например:

int i; char ch;

i=3.14; ch=777;

Здесь i получает значение 3, а значение 777 слишком велико, чтобы быть представленным как char, поэтому значение ch будет зависеть от способа, которым конкретная реализация производит преобразование из большего в меньший целый тип.

Существует так называемая комбинированная операция присваивания вида

a оп =b, здесь оп - знак одной из бинарных операций:

+ – * / % >> << & | ^ && ||.

Присваивание

a оп=b эквивалентно

a = a оп b , за исключением того, что адресное выражение вычисляется только один раз.

Примеры:

a+=2

означает

a=a+2

bottom_count [2*i+3*j+k]* =2

означает

bottom_count [2*i+3*j+k] =

bottom_count [2*i+3*j+k]*2

s/=a

означает

s=s/a

Результатом операции присваивания является ее левый операнд; следовательно, ее результат - адресное выражение и поэтому возможна запись

(a=b)+=c;

Это эквивалентно следующим двум операторам:

a=b; a=a+c;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]