В C++ есть четыре оператора, изменяющих естественный порядок выполнения вычислений:
q оператор безусловного перехода goto;
q оператор выхода из цикла break;
q оператор перехода к следующей итерации цикла continue;
q оператор возврата из функции return.
Оператор goto
Оператор безусловного перехода goto имеет формат:
goto метка; В теле той же функции должна присутствовать ровно одна конструкция вида:
метка: оператор;
Оператор goto передает управление на помеченный оператор. Метка — это обычный идентификатор, областью видимости которого является функция, в теле которой он задан.
Применение goto нарушает принципы структурного и модульного программирования, по которым все блоки, из которых состоит программа, должны иметь только один вход и один выход.
В любом случае не следует передавать управление внутрь операторов if, switch и циклов. Нельзя переходить внутрь блоков, содержащих инициализацию переменных, на операторы, расположенные после нее, поскольку в этом случае инициализация не будет выполнена:
int k;...
goto metka;...
{int a = 3, b = 4;
k = a + b;
metka: int m = k + 1;...
}
После выполнения этого фрагмента программы значение переменной m не определено.
Оператор break
Оператор break используется внутри операторов цикла или switch для обеспечения перехода в точку программы, находящуюся непосредственно за оператором, внутри которого находится break.
Пример. Программа вычисляет значение гиперболического синуса вещественного аргумента х с заданной точностью eps с помощью разложения в бесконечный ряд.
sh х = 1 + х3/3! + х5/5! + х7/7! +...
Вычисление заканчивается, когда абсолютная величина очередного члена ряда, прибавляемого к сумме, станет меньше заданной точности.
#include<iostream.h>
#include<math.h>
int main () {
const int MaxIter = 500; //ограничитель количества итераций
double x, eps;
cout<<”\n Введите аргумент и точность: ”;
cin>> x >> eps;
bool flag = true; //признак успешного вычисления
double y = x, ch = x; //сумма и первый член ряда
for (int n = 0; fabs(ch) > eps; n++) {
ch *= x * x / (2 * n + 2)/(2 * n + 3); //очередной член ряда
y += ch;
if (n>MaxIter) {
cout<<”/n Ряд расходится!”;
flag = false; break; }
}
if (flag) cout<<”/n Значение функции: ”<<y;
return 0;
}
Оператор continue
Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации.