В C++ есть четыре оператора, изменяющих естественный порядок выполнения вычислении:
- оператор безусловного перехода goto;
- оператор выхода из цикла break;
- оператор перехода к следующей итерации цикла continue;
- оператор возврата из функции return.
5.4.1.Оператор goto.Оператор безусловного перехода goto имеет формат:
goto метка;
В теле той же функции должна присутствовать ровно одна конструкция вида:
метка: оператор;
Оператор goto передает управление на помеченный оператор. Метка - это обычный идентификатор, областью видимости которого является функция, в теле которой он задан.
Использование оператора безусловного перехода оправдано в двух случаях:
1. принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей;
2. переход из нескольких мест функции в одно (например, если перед выходом из функции необходимо всегда выполнять какие-либо действия).
В остальных случаях для записи любого алгоритма существуют более подходящие средства, а использование goto приводит только к усложнению структуры программы и затруднению отладки. Применение goto нарушает принципы структурного и модульного программирования, по которым все блоки, из которых состоит программа, должны иметь только один вход и один выход.
В любом случае не следует передавать управление внутрь операторов if, switch и циклов. Нельзя переходить внутрь блоков, содержащих инициализацию переменных, на операторы, расположенные после нее, поскольку в этом случае инициализация не будет выполнена:
int k;
... goto metka;
{int a = 3, b = 4;
k = a + b;
metka: int m = k + 1; …
}
После выполнения этого фрагмента программы значение переменной m не определено.
5.4.2.Оператор break. Оператор break используется внутри операторов цикла, if или 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; // признак успешного вычисления//Для C int flag=1;
double у = x, ch = x; // сумма и первый член ряда
for (int n = 0; fabs(ch) > eps; n++)
{
ch *= x * x /(2 * n + 2)/(2 * n + 3);// Очередной член ряда
у += ch;
if (n > MaxIter)
{
cout <<"\nРяд расходится!";
flag = false; //Для С flag=0;
break;}
}
if (flag) cout <<"\nЗначение функции: "<< у;
return 0;
}
5.4.3.Оператор continue. Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации.
5.4.4. Оператор return. Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова. Вид оператора:
return [ выражение ];
Выражение должно иметь скалярный тип. Если тип возвращаемого функцией значения описан как void, выражение должно отсутствовать.