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

В 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 пропускает все опера­торы, оставшиеся до конца тела цикла, и передает управление на начало следую­щей итерации.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: