Операторы передачи управления
Вообще говоря, использовать операторы меняющие порядок исполнения кода не желательно. Обычно их используют на стадии отладки программы. Но иногда все-таки без них не получается написать программу. Особенно часто эти операторы использую начинающие программисты. Например, студенты и школьники. В C++ четыре оператора, которые меняют порядок выполнения вычислений:
• оператор безусловного перехода goto; • оператор выхода из цикла break; • оператор перехода к следующей итерации цикла continue; • оператор возврата из функции return.
Оператор goto
Оператор безусловного перехода goto имеет формат:
Пример. Так не делать!
После выполнения этого фрагмента программы значение переменной m не определено.
Использование оператора безусловного перехода оправдано в двух случаях:
• принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей;
• переход из нескольких мест функции в одно (например, если перед выходом из функции всегда необходимо выполнять какие-либо действия).
Оператор break
Используется внутри операторов цикла или switch для перехода в точку программы, находящуюся сразу за оператором, внутри которого находится break.
Пример.Вычислить гиперболический синус вещественного аргумента х с заданной точностью eps с помощью разложения в бесконечный ряд по формуле:
$$sh\left(x \right)=1+x^{3}/3!+ x^{5}/5!+x^{7}/7!+...$$
Вычисление заканчивается, когда абсолютная величина очередного члена ряда, станет меньше заданной точности.
Оператор continue
Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации.
Оператор return
Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова. Вид оператора:
Оператор goto
Оператор безусловного перехода goto имеет формат:
goto метка;Важно. Не следует передавать управление внутрь операторов if, switch и циклов. Нельзя переходить внутрь блоков, содержащих инициализацию переменных, на операторы, расположенные после нее, поскольку в этом случае инициализация не будет выполнена:
Пример. Так не делать!
int к; ... goto metka; ... {int а=3, b=4; к = а + b; metka: int m = к + 1; ... }
Использование оператора безусловного перехода оправдано в двух случаях:
• принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей;
• переход из нескольких мест функции в одно (например, если перед выходом из функции всегда необходимо выполнять какие-либо действия).
Оператор break
Используется внутри операторов цикла или switch для перехода в точку программы, находящуюся сразу за оператором, внутри которого находится break.
Пример.Вычислить гиперболический синус вещественного аргумента х с заданной точностью eps с помощью разложения в бесконечный ряд по формуле:
#include#include int main(){ const int Maxiter=500; //ограничение числа итераций double X,eps; cout << "\nВведите аргумент и точность: "; сin >> X >> eps; bool flag = true; //признак успешного вычисления double у=X, ch=х; //сумма и первый член ряда 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; break;} } if (flag) cout << "\nЗначение функции: " << у; return 0; }
Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации.
Оператор return
Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова. Вид оператора:
return [выражение];Выражение должно иметь скалярный тип. Если тип возвращаемого функцией значения описан как void, выражение должно отсутствовать.