- •Часть 1
- •«Языки программирования»
- •2. Объектно-ориентированное программирование
- •3. Лексические элементы языка
- •4. Типы данных
- •5. Область видимости
- •Операции и выражения
- •Структура программы
- •7. Директивы препроцессора
- •8. Данные вещественного типа (см. Типы данных)
- •10. Данные логического типа
- •11. Программирование ветвлений. Инструкции if и if-else
- •12. Данные символьного типа
- •Описание данных символьного типа
- •13. Программирование циклов
- •14. Оператор выбора (переключатель)
- •15. Указатели
- •16. Массивы
- •17. Практические задания
- •Практическая работа №2 (программирование ветвлений)
- •Практическая работа №3 (программирование циклов)
- •Практическая работа №4(массивы)
5. Область видимости
В базовом языке существует два основных вида области видимости (scope): локальная область видимости и область видимости файла. Локальная область видимости относится к блоку. Тело функции — это пример блока; оно содержит набор объявлений, включая параметры функции. В область видимости файла входят имена, которые являются внешними (глобальными). Правила для области видимости класса мы обсудим позднее.
Основное правило области видимости состоит в том, что идентификаторы доступны только внутри блока, в котором они объявлены. Они не известны за границами блока. Например:
int a = 2; //а вне блока
cout « a << endl; //напечатается 2
{ //вход во внутренний блок
int а = 7 ; //а внутри блока
cout « а « endl; //напечатается 7
} //выход из внутреннего блока
cout « ++а « endl; //напечатается 3 }
Внешнее по отношению к блоку имя действительно до тех пор, пока оно не переопределено внутри блока. Если оно переопределено, то внешнее имя скрывается от внутреннего блока. В C++ объявления могут встречаться в любом месте блока. Область видимости идентификатора начинается сразу после его объявления и продолжается до конца самого внутреннего блока, в котором он объявлен.
Операции и выражения
Во всех языках программирования под выражением подразумевается конструкция, составленная из констант, переменных, знаков операций, функций, скобок.
Напомним, что операция, применяемая к одному операнду, называется унарной, а операция с двумя операндами — бинарной.
Арифметические операции. К арифметическим операциям относятся:
- вычитание или унарный минус; + сложение или унарный плюс;
* умножение; / деление; % деление по модулю (аналог Mod в Паскале); ++ унарная операция увеличения на единицу (инкремент); унарная операция уменьшения на единицу (декремент).
Все операции, кроме деления по модулю, применимы к любым числовым типам данных. Операция % применима только к целым числам.
Рассмотрим особенности выполнения операции деления. Если делимое и делитель — целые числа, то и результат — целое число.
Операции инкремента и декремента. Операция ++ увеличивает значение переменной на единицу,
операция - - уменьшает значение переменной на единицу. Оба знака операции могут записываться как перед операндом (префиксная форма), так и после операнда (постфиксная форма), например: ++х или х++, - -а или а- -.
пример:
а=3; b=2; с=а++*b++;
В результате выполнения переменные примут етедующие значения: а =4, b = 3, с= 6. Второй пример:
а=3; b=2; с=++а*++Ь;
Результаты будут такими: а = 4, b = 3 , с = 12.
Одинаковые по старшинству операции выполняются в порядке слева направо. Как и в Паскале, для изменения порядка выполнения операций в выражениях могут применяться круглые скобки.
Операции отношения. <, >, <=, >=, ==, !=
Hезультатом операции отношения является целое число: если отношение истинно — то 1, если ложно — то 0. Примеры отношений
Логические операции. Три основные логические операции в языке Си записываются иначе, чем в Паскале.
! операция отрицания (НЕ),
&& конъюнкция, логическое умножение (И),
I | дизъюнкция, логическое сложение (ИЛИ).
Правила их выполнения определяются таблицей истинности (см. табл. 3.5).
Операция присваивания. То, что присваивание в Си является операцией, а не оператором, оказывается, наверное, самой большой неожиданностью для знатоков Паскаля. А между тем это действительно так! Знак операции присваивания =. Следствием отмеченного факта является то, что присваивание, как любой другой знак операции, может несколько раз входить в выражение. Например:
а=b=с=х+у;
Операция присваивания — правоассоциативная. Это значит, что несколько подряд расположенных присваиваний выполняются справа налево. Поэтому в приведенном выше выражении первой выполнится операция сложения, затем переменной с присвоится значение суммы, затем это значение присвоится переменной b и в конце — переменной а.
Операции присваивания, совмещающие присваивание с выполнением других операций: +=, -=, /=, *=, %=. Приоритет у них такой же, как и у простого присваивания. Примеры использования этих операций:
а+=2 эквивалентно а=а+2,
Заметим, что вместо выражения а=а+2 предпочтительнее писать в программе а+=2, поскольку второе выражение будет вычисляться быстрее.
Операция явного преобразования типа (операция «тип»). Применение этой операции имеет следующий формат:
(имя_типа) операнд
Операндом могут быть константа, переменная, выражение. В результате значение операнда преобразуется к указанному типу. Примеры использования преобразования типа:
(long)8, (float)I, (int)x%2
Операция sizeof. Эта операция имеет две формы записи:
sizeof(тип) и sizeof(выражение)
Результатом операции является целое число, равное количеству байтов, которое занимает в памяти величина явно указанного типа или величина, полученная в результате вычисления выражения.
sizeof (int) результат — 2
Операция «запятая». Эта необычная операция используется для связывания нескольких выражений в одно. Несколько выражений, разделенных запятыми, вычисляются последовательно слева направо. В качестве результата такого совмещенного выражения принимается значение самого правого выражения. Например, если переменная х имеет тип int, то значение выражения (Х=3, 5*Х) будет равно 15, а переменная х примет значение 3.
Операция «условие ?:». Это единственная операция, которая имеет три операнда. Формат операции:
выражение1 ? выражение2 : выражениеЗ
Данная операция реализует алгоритмическую структуру ветвления. Алгоритм ее выполнения следующий: первым вычисляется значение выражения 1, которое обычно представляет собой некоторое условие. Если оно истинно, т.е. не равно 0, то вычисляется выражение 2 и полученный результат становится результатом операции. В противном случае в качестве результата берется значение выражения 3.
Пример 3. Заменить большее значение из двух переменных а и b на единицу:
(a>b)?a:b=l;
Правила языка в данном случае позволяют ставить условную операцию слева от знака присваивания.
Операции ( ) и [ ]. В языке Си круглые и квадратные скобки рассматриваются как операции, причем эти операции имеют наивысший приоритет.
