Лекции.Орг


Поиск:




Синтаксис описания констант и переменных.

Алфавит языка.

Алфавит C++ включает: 1) прописные и строчные латинские буквы и знак подчеркивания; 2)арабские цифры от О до 9; 3) специальные знаки; 4) пробельные символы: пробел, символы табуляции, символы перехода на новую строку.

Из символов алфавита формируются лексемы языка: 1)идентификаторы; 2)ключевые (зарезервированные) слова; 3)знаки операций; 4)константы; 5)разделители (скобки, точка, запятая, пробельные символы).

Границы лексем определяются другими лексемами, такими, как разделители или

знаки операций.

Идентификаторы.

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

При выборе идентификатора необходимо иметь в виду следующее: 1) идентификатор не должен совпадать с ключевыми словами и именами используемых стандартных объектов языка; 2)не рекомендуется начинать идентификаторы с символа подчеркивания; 3) на идентификаторы, используемые для определения внешних переменных, налагаются ограничения компоновщика.

Ключевые слова и символы.

Ключевые слова — это зарезервированные идентификаторы, которые имеют специальное значение для компилятора. Их можно использовать только в том смысле, в котором они определены. Список ключевых слов C++ приведен в табл. 1.1.

Знаки операций.

Знак операции — это один или более символов, определяющих действие над операндами. Внутри знака операции пробелы не допускаются. Операции делятся на унарные, бинарные и тернарную по количеству участвующих в них операндов. Один и тот же знак может интерпретироваться по-разному в зависимости от контекста. Все знаки операций за исключением [ ], () и?: представляют собой отдельные лексемы. Знаки представлены в таблице 1.2.

Таблица 4.1.

Ключевые слова С++

asm auto bool break case catch char class const const_cast continue default delete do double dynamic_cast else enum explicit export extern false float for friend goto if inline int long mutable namespace new operator private protected public register reinterpret_cast return short signed sizeof static static__cast struct switch template this throw true try typedef typeid typename union unsigned using virtual void volatile wchar_t while

Таблица 4.2.

Знаки операций

  Бинарные, тернарные и унарные операции:
+ Бинарный плюс
- бинарный минус
* умножение
/ деление (при делении двух целых чисел получается целая часть от частного)
% получение остатка от деления
<< сдвиг влево
>> сдвиг вправо
< меньше
<= меньше или равно
> больше
>= больше или равно
== равно
!= не равно
&& логическое И
|| логическое ИЛИ
& операция взятия адреса
* операция обращения по адресу
- унарный минус
+ унарный плюс
! отрицание
++ автоувеличение на 1
- - автоуменьшение на 1
sizeof операция вычисления размера в байтах

Синтаксис описания констант и переменных.

Константами называют неизменяемые величины. Различаются целые, вещественные, символьные и строковые константы. Компилятор, выделив константу в качестве лексемы, относит ее к одному из типов по ее внешнему виду.

Если требуется сформировать отрицательную целую или вещественную константу, то перед константой ставится знак унарной операции изменения знака (-), например: -218,-022, -ОхЗС, -4.8, -0.1е4.

Вещественная константа в экспоненциальном формате представляется в виде мантиссы и порядка. Мантисса записывается слева от знака экспоненты (Е или е), порядок — справа от знака. Значение константы определяется как произведение мантиссы и возведенного в указанную в порядке степень числа 10. Обратите внимание, что пробелы внутри числа не допускаются, а для отделения целой части от дробной используется не запятая, а точка.

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

Символ обратной косой черты используется для представления:

• кодов, не имеющих графического изображения (например, \а — звуковой сигнал, \п — перевод курсора в начало следующей строки);

• символов апострофа ('), обратной косой черты (\), знака вопроса (?) и кавычки (“);

• любого символа с помощью его шестнадцатеричного или восьмеричного кода, например, \073, \0xF5. Числовое значение должно находиться в диапазоне от О до 255.

Последовательности символов, начинающиеся с обратной косой черты, называют управляющими, или escape-Последовательностями. Управляющая последовательность интерпретируется как одиночный символ. Если в последовательности цифр встречается недопустимая, она считается концом цифрового кода.

Управляющие последовательности могут использоваться и в строковых константах, называемых иначе строковыми литералами. Например, если внутри строки требуется записать кавычку, ее предваряют косой чертой, по которой компилятор отличает ее от кавычки, ограничивающей строку:

"Издательский дом \"Питер\""

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

Переменная— это именованная область памяти, в которой хранятся данные определенного типа. У переменной есть имя и значение. Имя служит для обращения к области памяти, в которой хранится значение. Во время выполнения программы значение переменной можно изменять. Перед использованием любая переменная должна быть описана. Пример описания целой переменной с именем а и вещественной переменной х:

int а; float х;

Общий вид оператора описания переменных:

[класс памяти] [const] тип имя [инициализатор];

Рассмотрим правила задания составных частей этого оператора: 1) необязательный класс памяти может принимать одно из значений auto, extern, static и register; 2) модификатор const показывает, что значение переменной изменять нельзя. Такую переменную называют именованной константой, или просто константой; 3) при описании можно присвоить переменной начальное значение, это называется инициализацией. Инициализатор можно записывать в двух формах — со знаком равенства:

= значение или в круглых скобках: (значение).

 

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

Примеры:

short int а = 1; // целая переменная а const char С = ' С; // символьная константа С char s. sf = 'f'; // инициализация относится только к sf char t (54); float с = 0.22. x(3). sum;

 

Если тип инициализирующего значения не совпадает с типом переменной, выполняются преобразования типа по определенным правилам.

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

Область действия идентификатора — это часть программы, в которой его можно использовать для доступа к связанной с ним области памяти. В зависимости от области действия переменная может быть локальной или глобальной.

Если переменная определена внутри блока (напомню, что блок ограничен фигурными скобками), она называется локальной, область ее действия — от точки описания до конца блока, включая все вложенные блоки.

Если переменная определена вне любого блока, она называется глобальной и областью ее действия считается файл, в котором она определена, от точки описания до его конца.

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

Время жизни может быть постоянным (в течение выполнения программы) и временным (в течение выполнения блока).

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

Для задания класса памяти используются следующие спецификаторы:

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

extern — означает, что переменная определяется в другом месте программы (в другом файле или дальше по тексту). Используется для создания переменных, доступных во всех модулях программы, в которых они объявлены i. Подробнее об употреблении внешних переменных рассказывается в разделе «Внешние объявления».

static — статическая переменная. Время жизни — постоянное. Инициализируется один раз при первом выполнении оператора, содержащего определение переменной. В зависимости от расположения оператора описания статические переменные могут быть глобальными и локальными. Глобальные статические переменные видны только в том модуле, в котором они описаны.

register — аналогично auto, но память выделяется по возможности в регистрах процессора. Если такой возможности у компилятора нет, переменные обрабатываются как auto.

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

Описание переменной может выполняться в форме объявления или определения.

Объявление информирует компилятор о типе переменной и классе памяти, а определение содержит, кроме этого, указание компилятору выделить память в соответствиис типом переменной. В C++ большинство объявлений являются одновременнои определениями. Переменная может быть объявлена многократно, но определена только в одномместе программы, поскольку объявление просто описывает свойства переменной,а определение связывает ее с конкретной областью памяти.

Основные типы данных.

Основные (стандартные) типы данных часто называют арифметическими, поскольку их можно использовать в арифметических операциях. Для описания основных типов определены следующие ключевые слова: 1) int (целый); 2) char (символьный); 3) wchar_t (расширенный символьный); 4) bool (логический); 5) float (вещественный); 6) double (вещественный с двойной точностью).

Первые четыре типа называют целочисленными (целыми), последние два — типами с плавающей точкой. Код, который формирует компилятор для обработкицелых величин, отличается от кода для величин с плавающей точкой.

Существует четыре спецификатора типа, уточняющих внутреннее представление и диапазон значений стандартных типов: 1) short (короткий); 2) long (длинный); 3) signed (знаковый); 4) unsigned (беззнаковый).

1) Целый тип (int)

Размер типа int не определяется стандартом, а зависит от компьютера и компилятора. Для 16 разрядного процессора под величины этого типа отводится 2 байта, для 32-разрядного — 4 байта. Спецификатор short перед именем типа указывает компилятору, что под число требуется отвести 2 байта независимо от разрядности процессора.

Спецификатор long означает, что целая величина будет занимать 4 байта. Таким образом, на 16-разрядном компьютере эквиваленты int и short int, а на 32-разрядном — int и long int.

Внутреннее представление величины целого типа — целое число в двоичном коде. При использовании спецификатора signed старший бит числа интерпретируется как знаковый (О — положительное число, 1 — отрицательное).

Спецификатор unsigned позволяет представлять только положительные числа, поскольку старший разряд рассматривается как часть кода числа. Таким образом, диапазон значений типа int зависит от спецификаторов.

По умолчанию все целочисленные типы считаются знаковыми, то есть спецификатор signed можно опускать. Константам, встречающимся в программе, приписывается тот или иной тип в соответствии с их видом. Если этот тип по каким-либо причинам не устраивает программиста, он может явно указать требуемый тип с помощью суффиксов L, l (long) и U, u (unsigned). Например, константа 32L будет иметь тип long и занимать 4 байта. Можно использовать суффиксы L и U одновременно, например, Ox22UL или 05LU.

2) Символьный тип (char)

Под величину символьного типа отводится количество байт, достаточное для размещения любого символа из набора символов для данного компьютера, что и обусловило название типа. Как правило, это 1 байт. Тип char, как и другие целые типы, может быть со знаком или без знака. В величинах со знаком можно хранить значения в диапазоне от -128 до 127. При использовании спецификатора unsigned значения могут находиться в пределах от О до 255. Этого достаточно для хранения любого символа из 256-символьного набора ASCH. Величины типа char применяются также для хранения целых чисел, не превышающих границы указанных диапазонов.

3) Расширенный символьный тип (wchar_t)

Тип wchar_t предназначен для работы с набором символов, для кодировки которых недостаточно 1 байта, например, Unicode. Размер этого типа зависит от реализации; как правило, он соответствует типу short. Строковые константы типа wchar_t записываются с префиксом L, например, L"Gates".

4) Логический тип (bool)

Величины логического типа могут принимать только значения true и false, являющиеся зарезервированными словами. Внутренняя форма представления значения false — О (нуль). Любое другое значение интерпретируется как true. При преобразовании к целому типу true имеет значение 1.

5) Типы с плавающей точкой (float, double и long double)

Стандарт C++ определяет три типа данных для хранения вещественных значений: float, double и long double. Типы данных с плавающей точкой хранятся в памяти компьютера иначе, чем целочисленные. Внутреннее представление вещественного числа состоит из двух частей — мантиссы и порядка. В IBM PC-совместимых компьютерах величины типа float занимают 4 байта, из которых один двоичный разряд отводится под знак мантиссы, 8 разрядов под порядок и 23 под мантиссу. Мантисса — это число, большее 1.0, но меньшее 2.0. Поскольку старшая цифра мантиссы всегда равна 1, она не хранится.

Для величин типа double, занимающих 8 байт, под порядок и мантиссу отводится 11 и 52 разряда соответственно. Длина мантиссы определяет точность числа, а длина порядка — его диапазон. Как можно видеть из табл. 1.4, при одинаковом количестве байт, отводимом под величины типа float и long int, диапазоны и допустимых значений сильно различаются из-за внутренней формы представления.

Спецификатор long перед именем типа double указывает, что под величину отводится 10 байт. Константы с плавающей точкой имеют по умолчанию тип double. Можно явно указать тип константы с помощью суффиксов F, f (float) и L, 1 (long). Например, константа 2E+6L будет иметь тип long double, а константа 1.82f — тип float.

Подробное изложение теоретических вопросов, затронутых в первой лекции, можно найти в литературе [1, 3]. Практические аспекты этих вопросов можно отыскать в работах [2, 4,5,6,7,8].

Знания следует самостоятельно проверить путем ответов на контрольные вопросы.

Список использованной литературы:

а) основная литература:

1. Т, А. Павловская C/C++ Программирование на языке высокого уровня. Год издания: 2012.

2. Литвиненко Н. А. - Технология программирования на С++. Год издания: 2013. Издательство: БХВ-Петербург.

б) дополнительная литература:

3. Коплиен Дж. - Мультипарадигменное проектирование для с++.

4. Богуславский Ан.А., Соколов С.М. Основы программирования на языке Си++: Для студентов физико-математических факультетов педагогических институтов. Часть I. Введение в программирование на языке Си++. - Коломна: КГПИ, 2012. - 490 с.

5. Дейтел Х.М, Дейтел П.Д. Как программировать на С: пер. с англ. – М.: БИНОМ, 2014.— 908 с.: ил.

6. Шилдт Г. Полный справочник по C++: Пер. с англ. – М.: Вильямс, 2013.— 699 с.

7. Подбельский В.В. Язык Си++: учебное пособие для вузов.

8. Степанов Е.О., Чириков С.В. Стиль программирования на C++. Учебное пособие. - СПб.: СПбГИТМО(ТУ), 2015. - 48 с.



<== предыдущая лекция | следующая лекция ==>
А) спорт как средство удовлетворения зрелищных запросов человека; | 
Поделиться с друзьями:


Дата добавления: 2016-12-05; Мы поможем в написании ваших работ!; просмотров: 1046 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Так просто быть добрым - нужно только представить себя на месте другого человека прежде, чем начать его судить. © Марлен Дитрих
==> читать все изречения...

999 - | 811 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.