Операторы и их классификация

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

Различают следующие виды операторов:

· описания объектов

· оператор вычисления выражения

· операторы ветвления

· операторы цикла

· операторы передачи управления

· вызова функции

Описания объектов относят к неисполняемым операторам. Все остальные операторы называются исполняемыми операторами.

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

Примеры:

i++; // выполняется операция инкремента

a*=b + c; // выполняется умножение с присваиванием

Частным случаем выражения является пустой оператор – знак точка с запятой. Этот оператор не выполняет никаких действий. Ставится там, где синтаксис предлагает наличие оператора, но при каких-либо операций выполнять не требуется.

Операторы ветвления, цикла, передачи управления и вызова функции будут подробно рассмотрены в следующих лекциях.

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

К операторам преобразования относятся операторы описания объектов, вычисления выражения и вызова функции, к управляющим конструкциям – операторы ветвления, цикла и передачи управления.

Операторы могут объединяться в группы – составные операторы и блоки. Составной оператор и блок – это последовательность операторов, заключенная в фигурные скобки (точка с запятой в конце не ставится). Синтаксически составные операторы и блоки выступают в качестве одного оператора.

Отличие составного оператора от блока заключается в том, что составной оператор включает только исполняемые операторы, а блок - также описания объектов.

Пример составного оператора:

{

n++;

summa+=(float)n;

}

Пример блока:

{

int n=0;

n++;

summa+=(float)n;

}

Все операторы программы выполняются последовательно в порядке записи их в программе (сверху вниз, слева направо), если нет операторов передачи управления, изменяющих этот порядок.

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

Тема 1.8

Операторы ветвления

Условный оператор if

Условный оператор if используется для разветвления процесса вычислений на два направления.

Формат оператора: if ( выражение ) оператор_1; [else оператор_2;]

Структурная схема оператора приведена на рисунке 1.4.

Сначала вычисляется выражение, которое может иметь арифметический тип или тип указателя. Если оно не равно нулю (имеет значение true), выполняется первый оператор, иначе — второй. После этого управление передается на оператор, следующий за условным. Вторая ветвь вместе с ключевым словом else может отсутствовать. Подобная конструкция называется «пропуск оператора».

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

Операторы и их классификация - student2.ru

Рисунок 1.4 - Структурная схема условного оператора

Примеры:

if (a < 0) b = 1; // 1

if (a < b && (a>d || a = = 0)) b++; else {b *= a; a = 0;} // 2

if (a < b) {if (a < c) m = a; else m = c;} else {if (b < c) m = b; else m = c;} // 3

if (a++) b++; // 4

if (b > a) max = b; else max = a; // 5

В примере 1 отсутствует ветвь else - присваивание либо выполняется, либо пропускается в зависимости от выполнения условия.

Если требуется проверить несколько условий, их объединяют знаками логических операций. Например, выражение в примере 2будет истинно в том случае, если выполнится одновременно условие a < b и одно из условий в скобках. Если опустить внутренние скобки, будет выполнено сначала логическое И, а потом — ИЛИ.

Оператор в примере 3вычисляет наименьшее значение из трех переменных. Фигурные скобки в данном случае не обязательны, так как компилятор относит часть else к ближайшему if.

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

Конструкции, подобные оператору в примере 5, проще и нагляднее записывать в виде условной операции (в данном случае: max = (b > а) ? b : a;).

Распространенная ошибка при записи условных операторов — использование в выражениях вместо проверки на равенство (= =) простого присваивания (=), например, if (a = 1) b = 0;. Синтаксической ошибки нет, так как операция присваивания формирует результат (true или false, преобразованное в int), который и оценивается на равенство/неравенство нулю. В данном примере присваивание переменной b будет выполнено независимо от значения переменной а. Поэтому в выражениях проверки переменной на равенство константе константу рекомендуется записывать слева от операции сравнения: if (1= = a) b=0;.

Вторая ошибка — неверная запись проверки на принадлежность диапазону. Например, чтобы проверить условие 0 < х < 1, нельзя записать его в условном операторе непосредственно, так как будет выполнено сначала сравнение 0 < x, x а его результат (true или false, преобразованное в int) будет сравниваться с 1. Правильный способ записи: if(0 < х && х < 1).

Если какая-либо переменная используется только внутри условного оператора, рекомендуется объявить ее внутри скобок, например: if (int i = fun(t)) a -= i; else a += i;. Объявлять внутри оператора if можно только одну переменную. Область ее видимости начинается в точке объявления и включает обе ветви оператора. Объявление переменной в тот момент, когда ей необходимо присвоить значение позволяет избежать случайного использования переменной до ее инициализации.

Пример: Производится выстрел по мишени, изображенной на рисунок 1.5. Определить количество очков.

Операторы и их классификация - student2.ru

Рисунок 1.5 - Мишень

#include <iostream.h>

int main( ){

float x, у; int kol;

cout << "Введите координаты выстрела\n";

cin >> x >> у;

if ( x*x + y*y < 1 ) kol = 2;

else if ( x*x + y*y < 4 ) kol = 1;

else kol =0;

cout << "\n Очков: " << kol;

return 0;

}

Программу можно еще упростить с помощью промежуточной переменной и записи условия в виде двух последовательных, а не вложенных, операторов if.

#include <iostream.h>

int main( ){

float x, y, temp; int kol;

cout << "Введите координаты выстрела\n";

cin >> x >> у;

temp = x*x + y*y;

kol = 0;

if (temp < 4 ) kol = 1;

if (temp < 1 ) kol = 2;

cout << "\n Очков: " << kol;

return 0;

}

В первом варианте значение переменной kol присваивается ровно один раз, а во втором — от одного до трех раз в зависимости от выполнения условий.

Наши рекомендации