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

Вообще говоря, использовать операторы меняющие порядок исполнения кода не желательно. Обычно их используют на стадии отладки программы. Но иногда все-таки без них не получается написать программу. Особенно часто эти операторы использую начинающие программисты. Например, студенты и школьники. В C++ четыре оператора, которые меняют порядок выполнения вычислений: • оператор безусловного перехода goto; • оператор выхода из цикла break; • оператор перехода к следующей итерации цикла continue; • оператор возврата из функции return.

Оператор goto
Оператор безусловного перехода goto имеет формат:
goto метка;
Важно. Не следует передавать управление внутрь операторов if, switch и циклов. Нельзя переходить внутрь блоков, содержащих инициализацию переменных, на операторы, расположенные после нее, поскольку в этом случае инициализация не будет выполнена:

Пример. Так не делать!
int к; ... 
goto metka; ... 
{int а=3, b=4; 
к = а + b; 
metka: int m = к + 1; ... 
}
После выполнения этого фрагмента программы значение переменной m не определено.

Использование оператора безусловного перехода оправдано в двух случаях:
• принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей;
• переход из нескольких мест функции в одно (например, если перед выходом из функции всегда необходимо выполнять какие-либо действия).

Оператор break
Используется внутри операторов цикла или switch для перехода в точку программы, находящуюся сразу за оператором, внутри которого находится break.

Пример.Вычислить гиперболический синус вещественного аргумента х с заданной точностью eps с помощью разложения в бесконечный ряд по формуле:
$$sh\left(x \right)=1+x^{3}/3!+ x^{5}/5!+x^{7}/7!+...$$
Вычисление заканчивается, когда абсолютная величина очередного члена ряда, станет меньше заданной точности.
#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
Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации.

Оператор return
Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова. Вид оператора:
return [выражение];
Выражение должно иметь скалярный тип. Если тип возвращаемого функцией значения описан как void, выражение должно отсутствовать.
Онлайн всего: 3
Гостей: 3
Пользователей: 0

STUDLAB Сообщить про опечатку на сайте