![](/user_photo/2706_HbeT2.jpg)
Ответы к ГОСу / 43
.doc43
Языки программирования делятся на 3 группы:
-
Машинные языки – исходный текст программы состоит из машинных кодов, которые непосредственно могут исполнятся на ЭВМ.
-
Машинно-ориентированные языки – исходный текст программы состоит из условных обозначений команд микропроцессора.
-
Алгоритмические языки (языки высокого уровня) – исходный текст программы состоит из инструкций, удобных для восприятия человеком и при этом четко формализованных.
Для записи текста программы на C++ используется алфавит языка. Алфавит состоит из следующих символов:
1. Буквы:
_ а...z A...Z
2. Цифры:
0...9
3. Специальные символы:
‘ “ + - * / \ % = > < # | & ^ ~ ! ? . , : ; () [] {}
4. Пробел, символ табуляции, перевод строки (переход на новую строку).
Заглавные и строчные буквы в C++ различаются.
В комментариях, символьных литералах и строковых литералах допускается использовать все символы применяемой кодировки, в частности, символы национального алфавита и символы псевдографики.
Минимальной единицей языка, обладающей определенным смыслом, является лексема.
Лексема - это последовательность из одного или нескольких символов. Лексемы делятся на следующие группы: идентификаторы, литералы, операторы, разделители, ключевые слова, комментарии и директивы препроцессора.
Идентификатор (или просто имя) - это имя переменной, константы, функции, типа, синоним типа, имя метки или имя константы типа перечисления (enum).
Применение идентификатора начинается с разъяснения компилятору его назначения. Это разъяснение называется определением. В соответствии с этим определением идентификатор может применяться только в некоторой части программы.
Эта часть называется областью видимости идентификатора.
Некоторые правила именования идентификаторов:
1. Идентификатор начинается с буквы и может содержать буквы и цифры (знак подчеркивания считается буквой).
2. Ограничения на длину имени не накладываются, но конкретная реализация может различать лишь конечное число его начальных символов (в Visual C++ компилятор различает только первые 31 символ).
3. Имена, начинающиеся со знака подчеркивания, зарезервированы для нужд реализации (использовать их в программах не следует).
4. Идентификаторы с малой областью видимости должны быть короткими, а с большой - по возможности подробными. Для разделения слов в имени удобно пользоваться знаком подчеркивания.
5. Стилистическое соглашение между программистами: в начале имени добавляется сокращенное обозначение типа данных (i - int, d - double, p - указатель, sz -С-строка и т.д.).
6. В именах макросов лучше использовать только заглавные буквы.
Примеры идентификаторов:
hello DEFINED varO long name bAr BAR class MyVariable foO
Примеры лексем, которые нельзя использовать в качестве идентификаторов:
012 $sys if .name pay.due
n+m A1&A2 Not_Done!
Некоторые идентификаторы являются стандартными, например, имя главной функции программы (main).
Литерал - это изображение конкретного значения одного из арифметических типов, либо типа С-строки.
Различают литералы: логические, символьные, целые, с плавающей точкой и строковые.
Примеры литералов:
true
‘а’
12345
543.21
"Простая строка на C++!"
Оператор в C++ - это один или несколько подряд идущих специальных символов либо ключевое слово. Он предназначен для выполнения некоторых действий (операций) над данными (операндами), а также для составления выражений.
Операторы бывают унарные и бинарные. Унарные операторы бывают префиксные и постфиксные (суффиксные).
Важные особенности C++, позволяющие строить гибкие и эффективные выражения:
1. Поддерживается очень много различных операторов.
2. Действие присваивания реализовано в виде оператора =.
3. Для пользовательских типов данных возможно определение своих операций.
Примеры выражений на C++:
а += 5 + (b = с % 2)
а = ((b < с) ? (d = е) : (f = g))
р = &(х++)
Разделитель - это символ или последовательность символов, разграничивающая одни конструкции языка или их части от других.
Прежде всего, к разделителям относятся: пробел, символ табуляции и перевод строки.
Их можно использовать в любом количестве и сочетании между двумя любыми лексемами, а в некоторых местах они просто необходимы.
Символ «точка с запятой» (;) является специальным разделителем в инструкциях (он часто неофициально называется пустой инструкцией или пустым оператором - это неверно).
При описании конкретных конструкций языка указано, какие в них используются разделители и в каких местах.
Комментарий - это произвольный текст, поясняющий работу участков программы и не влияющий на ее выполнение.
В C++ комментарий включается в программу двумя способами.
При первом способе его началом является пара символов «//», а окончанием последний символ строки:
// Это комментарий!
При втором способе его началом является пара символов «/*», а окончанием - пара символов «*/»:
/* Еще один пример
комментария! */
В C++ различают три группы типов данных: фундаментальные типы, встроенные типы и типы, определяемые пользователем.
Фундаментальные типы делятся на:
1. Логический тип (bool).
2. Символьные типы (char, wchar_t).
3. Целочисленные (целые) типы (например, тип int).
4. Типы с плавающей точкой (например, double).
5. Тип void - используется для указания на отсутствие информации.
Логический, символьные и целые типы вместе называются интегральными, и к ним можно применять все арифметические и все логические операции.
Интегральные типы вместе с вещественными типами с плавающей точкой называются арифметическими, и к ним применимы все арифметические операции и обычные (непобитовые) логические операции (операции сравнения, операции: «И», «ИЛИ», «НЕ»).
Встроенные типы делятся на:
1. Типы указателей (например, int *).
2. Типы ссылок (например, double &).
3. Типы массивов (используются квадратные скобки: []).
4. Типы функций (используются круглые скобки: ()).
Типы, определяемые пользователем, делятся на:
1. Типы перечислений (enum) - используются для представления значений из конкретного множества.
2. Типы структур и классы (struct, union, class).
Класс можно называть обобщением типа структуры.
Пользовательские типы позволяют формировать на базе фундаментальных и встроенных типов структуры данных (объекты) произвольной сложности.
Размер результата вычисления выражения или размер объекта определенного типа в байтах можно получить при помощи оператора sizeof следующим образом: sizeof expr. Здесь expr- выражение.
Размер самого типа можно получить при помощи оператора sizeof следующим образом: sizeof (type). Здесь type - имя типа или то же, что и expr.
Характеристики типов, зависящие от реализации можно также получить, используя заголовочный файл <limits>.
В C++ крайне важно различать понятия «объявление» и «определение». Прежде чем использовать идентификатор в программе, его следует объявить. Объявить - означает: связать имя с некоторым типом. Примеры объявлений:
// Объявления, являющиеся определениями.
char sym;
const double pi = 3.1415926535897932385;
const char *season[] = {"весна", "лето", "осень", "зима"};
struct Date {int d, m, y;};
int day(Date *p) { return p->d; }
typedef complex<short> Point;
enum Beer {Carlsberg, Tuborg, Thor};
namespace NS { int a; } // Определение пространства имен.
// Чистые объявления - не являются определениями,
double sqrt(double);
extern int error_number;
Из примеров видно, что объявления могут делать нечто большее, чем просто связывание имени с типом. Большинство объявлений являются одновременно и определениями, т. е. они определяют некоторую сущность, которая соответствует имени.
Например, для sym - это выделение областей памяти определенных размеров, для pi - это размещение в памяти определенного константного значения, для Date - это определение нового типа, для day - это определение тела функции и т. д.
Из приведенных объявлений определениями не являются: sqrt и error_number. Эти объявления являются чистыми объявлениями (другие названия - прототипы, сигнатуры, интерфейсы).
Сущности, на которые ссылаются данные имена, должны быть определены где-то в другом месте. Тело функции sqrt должно быть задано каким-то другим объявлением, и память для целой переменной error_number должна быть выделена некоторым другим объявлением.
Например:
double sqrt(double d) { /* Тело функции */ };
int error_number = 1;