Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Концепция решения информационных задач.doc
Скачиваний:
1
Добавлен:
09.12.2019
Размер:
583.68 Кб
Скачать

2.2.2. Переменные

Переменная – обозначенная именем величина, способная изменять своё значение в процессе выполнения программы. Переменная обладает именем, размером и рядом других атрибутов (таких, как область действия, область видимости, время жизни).

Под областью действия переменной понимают область программы, в которой переменная доступна для использования. С этим понятием тесно связано понятие области видимости переменной. Если переменная выходит из области действия, она становится невидимой. С другой стороны, переменная может находиться в области действия, но быть невидимой. Переменная находится в области видимости, если к ней можно получить доступ (с помощью операции разрешения видимости, если она непосредственно не видима).

Временем жизни переменной называется интервал выполнения программы, в течение которого она существует.

При объявлении переменной для неё резервируется некоторая область памяти, размер которой зависит от конкретного типа переменной. Здесь следует также учитывать, что размер одного и того же типа данных может отличаться на компьютерах разных платформ, а также может зависеть от используемой операционной системы. Поэтому при объявлении той или иной переменной нужно чётко представлять, сколько байт она будет занимать в памяти ЭВМ, чтобы избежать проблем, связанных с переполнением и неправильной интерпретации данных.

В табл. 2 приведён перечень базовых типов переменных в С/С++, их размер и диапазоны значений.

Таблица 2

п/п

Тип переменной

Объём памяти

Диапазоны представления

чисел

бит

байт

min

max

1

2

3

4

5

6

1

Bool

8

1

false (0)

true (1)

2

signed char (сокращённо char)

8

1

-128

127

3

unsigned char

8

1

0

255

4

int1

16

2

-32768

32767

5

unsigned int

(unsigned)

16

2

0

65535

6

short int

(short)

16

2

-32768

32767

7

unsigned short int

(unsigned short)

16

2

0

65535

8

long int

(long)

32

4

-2147483648

2147483647

9

unsigned long int

(unsigned long)

32

4

0

4294967295

10

Float

32

4

3,4 Е-38

3,4 Е+38

11

Double

64

8

1,7 Е-308

1,7 Е+308

12

long double

80

10

3,4 Е-4932

3,4 Е+4932

13

Указатель

32

4

0

4294967295

14

void2

16

2

отсутствие значения

Каждая переменная должна быть перед первым использованием обязательно однократно описана. Описание (объявление) переменной осуществляется с помощью оператора описания.

Оператор описания в общем случае имеет следующую структуру:

описатель u1[=c1] [,u2[=c2] , … , uN[=cN] ];

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

[спецификатор класса памяти] спецификатор типа

Здесь [ ] – признак необязательности содержимого;

спецификатор класса памяти – ключевое слово, определяющее класс памяти переменной;

спецификатор типа – ключевое слово, определяющее тип переменной;

u1 … uN – идентификаторы переменных;

, – разделитель идентификторов;

с1 … сN – значения, которые присваиваются переменным

в случае их инициализации;

= – знак операции присваивания;

; – символ окончания оператора.

Один описатель позволяет объявить несколько переменных. При этом они следуют друг за другом через запятую (,). Заканчивается объявление символом точка с запятой (;).

Имя переменной (идентификатор) не должно превышать 256 символов, из которых значимыми являются только первые восемь символов3 (остальные компилятором игнорируются).

В программе идентификатор может содержать прописные и строчные латинские буквы, цифры и символ подчёркивания и обязательно начинается с буквы или символа подчёркивания и не должен совпадать с ключевым словом . При этом важно учитывать регистр букв ( Abc и abc – не одно и то же)! Имя должно быть достаточно информативным, однако не следует использовать слишком длинные имена, так как это приводит к опискам.

Инициализация – присваивание объекту начального значения в момент его описания.

Хотя изначальная инициализация и не является обязательной при объявлении переменной, всё же рекомендуется инициализировать переменные начальным значением. Если этого не сделать, переменная изначально может принять непредсказуемое значение.

Установка начального значения переменной осуществляется с помощью операции присваивания (=).

Спецификаторы класса памяти рассмотрим несколько позже, а здесь рассмотрим подробно основные типы переменных.

Переменная типа bool занимает всего 1 байт и используется, прежде всего, в логических операциях, так как может принимать значение 0 (false, ложь) или отличное от нуля (true, истина). В старых текстах программ на языке С вы можете встретить тип данных BOOL и переменные этого типа, принимающие значения TRUE и FALSE. Этот тип данных и указанные значения не являлись частью языка С, а объявлялись в заголовочных файлах как unsigned short, 1 и 0, соответственно. В новой редакции С++ bool – самостоятельный тип данных.

Часто бывает необходимо указать в программе, что переменная должна принимать только целые значения. Целочисленные переменные (типа int, long, short), как следует из названия, призваны хранить целые значения, и могут быть знаковыми и беззнаковыми. Знаковые переменные могут представлять как положительные, так и отрицательные числа. Для этого в их представлении один бит (самый старший) отводится под знак. В отличие от них, беззнаковые переменные принимают только положительные значения. Чтобы указать, что переменная будет беззнаковой, используется ключевое слово unsigned. По умолчанию целочисленные переменные считаются знаковыми (ключевое signed, чаще всего опускается, и используется, как правило, при преобразовании типов данных).

Символьный тип данных char применяется, когда переменная должна нести информацию в коде ANCII. Этот тип данных часто используется при построении более сложных конструкций, таких, как строки, символьные массивы и т. д. Данные типа char также могут быть знаковыми и беззнаковыми.

Для представления чисел с плавающей запятой применяют тип данных float. Этот тип, как правило, используется для хранения не очень больших дробных чисел и занимает в памяти 4 байта: 1 бит – знак, 8 бит – экспонента, 23 бита – мантисса. Таким образом, вещественные обычной точности могут иметь 7-8 значащих чисел мантиссы.

Если вещественное число может принимать очень большие значения, используют переменные двойной точности, тип double или (в случае, когда двойной точности не достаточно) – используется тип повышенной точности – long double. Тип double занимает в памяти 8 байт: 1 бит – знак, полтора байта – экспонента, оставшиеся – мантисса). Вещественные двойной точности могут иметь 16-17 значащих чисел мантиссы, повышенной точности – до 20 значащих чисел.

Указатель (pointer) представляет собой переменную, значение которой является адресом ячейки памяти.

Переменная типа void не имеет значения и служит для согласования синтаксиса. Например, синтаксис требует, чтобы функция возвращала значение. Если не требуется использовать возвращённое значение, перед именем функции ставится тип void.

Примеры операторов описания

int A2, igr;

double s, s1;

float summa;

long int sh;

short int n, N;

unsigned short it, i, j, k;

При использовании типов long int, short int (см. табл. 2) ключевое слово int может не указываться. Например:

long sh;

short n, N;

Допускается в одном операторе описания объявлять несколько переменных одного типа:

int ss, sr, sob1;

При описании переменные могут определяться (инициализироваться), т. е. получать значения констант.

Например:

char per='\n';

int pc=265, i=0;

float x, y, z=15.e-3;

ВНИМАНИЕ! В расчётах могут использоваться только описанные и проинициализированные переменные!

2.2.3. Константы

Константа – величина, значение которой определено и не меняется в процессе выполнения программ. Константы бывают литеральными и типизованными, причём литеральные константы делятся на: символьные, строковые, целые и вещественные.

Символьные константы представляются отдельным символом, заключённым в одинарные кавычки (апострофы): 'e', '@', '>'.

Значением символьной константы является её числовой восьмеричный код. Этот код с предшествующим знаком "обратная косая черта" допускается применять вместо символа. Это удобно, если используются символы, не выводимые на печать. Например, звуковому сигналу соответствует код 007. При записи восьмеричного кода левые незначащие нули можно не указывать. Так, символьные константы

'\007', '\07', '\7'

являются идентичными. Символьные константы хранятся однобайтовых ячейках.

Строковые константы – это последовательность символов, заключённая в двойные кавычки:

"Это пример строковой константы! ".

Кавычки не являются частью строки, а отмечают её начало и конец. Если в состав символьной строки входят символы ", ', \, то они записываются в виде \", \', \\.

Так предложение:

Запомните, " символ \ называется обратная косая черта",

будет иметь вид:

"Запомните, \" символ \\ называется обратная косая черта\"".

Строка символов хранится в последовательности соседних ячеек (байтов), число которых соответствует количеству хранимых символов плюс символ конца строки '\0'. Нуль-символ '\0' не выводится на печать, но автоматически добавляется в конец строки оператором ввода. Например, текстовые константы 'T' и "T" по виду (не считая ограничителей) совершенно одинаковы, но в первом случае это символьная константа, для хранения которой нужен один байт, а во втором – это символьная строка, состоящая из символа Т и знака окончания символьной строки \0. Для хранения этой строки потребуется два байта.

Целые константы – совокупность цифр со знаком +(-) или без него. Целые константы бывают следующих форматов:

  • десятичные;

  • восьмеричные;

  • шестнадцатиричные.

Десятичные могут быть представлены, как последовательность цифр, начинающихся не с нуля, например: 123; 2384.

Восьмеричные константы – последовательность восьмеричных цифр (от 0 до 7), начинающаяся с нуля, например: 034; 047.

Шестнадцатеричный формат констант начинается с символов 0х или 0Х и включает цифры от 0 до 9 и буквы латинского алфавита А, В, С, D, E, F, (a, b, c, d, e, f), которые обозначают цифры от 10 до 15 соответственно. Например: 0Х12, -0х1А7, 0хFF, 0xfa62.

Константы целого типа хранятся в ячейках размером в одно слово. Двухбайтовые слова ПЭВМ позволяют рассчитать диапазоны изменения целых констант. Для десятичных знаковых констант он изменяется от -32768 до +32767, для беззнаковых – от 0 до 65535.

При необходимости увеличения диапазона используются длинные константы (размером в два слова). Отличительный признак длинной константы – буква L (l) в конце. Например:

1000242L 047777777l +12345678L -0XA761263l

Константа с плавающей точкой (вещественная константа) – десятичное число со структурой

[m].[n][Ep] ([m].[n][ep]),

где m – целая часть мантиссы (десятичные цифры со знаком или без него;

n – дробная часть мантиссы (десятичные цифры без знака);

p – показатель степени (целая константа);

E (е) – символ системы счисления (десятичной);

[ ] – символ необязательности содержимого.

Наличие одной из составляющих мантиссы обязательно. Например: 3.14159 -255. .79 -1.56Е12 2.87е-3 10.Е6 .3е12 6Е-2

Использовать пробелы при записи константы запрещается.

Константы с плавающей точкой хранятся в двухсловных ячейках. Первый байт отводится под показатель степени, остальные три – для записи мантиссы. Это позволяет представлять константу с плавающей точкой в диапазоне от 10±38 с точностью до 6-7 значащих цифр. При необходимости большей точности используются ячейки удвоенной длины (восьми байтовые). По умолчанию вещественные константы имеют двойную точность. При необходимости использования обычной точности, в конце константы ставится символ F (f).

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

Типизованная константа объявляется с помощью ключевого слова const, за которым следует указание типа константы, но, в отличие от переменных, константы всегда должны быть инициализированы.

Символьные константы в С++ занимают в памяти 1 байт и, следовательно, могут принимать значения от 0 до 255 (см. табл. 3). При этом существует ряд символов, которые не отображаются при печати, – они выполняют специальные действия: возврат каретки, табуляция, называются символами escape-последовательности. Термин «escape-последовательности» ввела компания Epson, ставшая первой фирмой, которая для управления выводом информации на своих принтерах стала использовать неотображаемые символы. Исторически сложилось так, что управляющие последовательности начинались с кода с десятичным значением 27 (0х1В), что соответствовало символу "Escape" кодировки ASCII.

Escape-символы в программе изображаются в виде обратного слеша, за которым следует буква или символ.

Таблица 3

Обозначение

Назначение

\\

Вывод на печать обратной черты

\'

Вывод апострофа

\"

Вывод при печати кавычки

\?

Символ вопросительного знака

\a

Подача звукового сигнала

\b

Возврат курсора на 1 символ назад

\f

Перевод страницы

\n

Перевод строки

\r

Возврат курсора на начало текущей строки

\t

Перевод курсора к следующей позиции табуляции

\v

Вертикальная табуляция (вниз)

Пример использования типизированных и литеральных констант:

const double Pi=3.1415;

Здесь в правой части операции присваивания указана литеральная вещественная константа 3.1415. Учитывая, что процесс решения задачи может потребовать многократного использования этой константы, её удобно задать в виде типизированной (именованной) константы Pi.