Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Си++ Занятие 5.doc
Скачиваний:
5
Добавлен:
13.11.2019
Размер:
153.09 Кб
Скачать

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

В С++ есть четыре оператора, изменяющих естественных порядок выполнения вычислений:

- оператор безусловного перехода goto;

- оператор выхода из цикла break;

- оператор перехода к следующей итерации цикла continue;

- оператор возврата из функции return.

2.1 Оператор goto

Использование оператора goto всегда вызывало много споров.

Так, один из основоположников теоретического программирования Э. Дейкстра заметил, что качество программного кода обратно пропорционально количеству операторов goto в нем. Считается, что этот оператор затрудняет понимание программ, а также их модификацию.

Тем не менее, в практическом программировании применение goto в некоторых случаях можно оправдать. Т.к. goto – «простейший» оператор перехода, то его применение оправданно, когда другие средства языка не позволяют достичь нужного результата. К таким можно отнести:

  • выход из нескольких вложенных циклов сразу (принудительный выход вниз по тексту программы из нескольких вложенных циклов);

  • обработка ошибок;

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

Настоятельно не рекомендуется использовать goto где-нибудь еще. В остальных случаях для записи любого алгоритма существуют более подходящие средства, а использование goto приводит только к усложнению структуры программы и затруднению отладки. Применение goto нарушает принципы структурного и модульного программирования, по которым все блоки, из которых состоит программа, должны иметь только один вход и один выход.

Но если все-таки этот оператор используется, то необходимо соблюдать правила, вытекающие из структурного подхода к программированию. Вот некоторые из них:

  • не следует использовать goto для перехода внутрь структурных операторов, таких, как операторы цикла, условный оператор, оператор выбора,

  • никогда не обходите инициализацию переменных, где бы она не использовалась.

Игнорирование этих рекомендаций может привести к трудно обнаруживаемым ошибкам.

Оператор безусловного перехода имеет формат:

goto метка;

В теле той же функции должна присутствовать ровно одна конструкция вида:

метка: оператор;

Оператор goto передает управление на помеченный оператор. Метка – это обычный идентификатор, областью видимости которого является функция, в теле которой он задан. Метка должна быть уникальной.

Пример 7. Не соблюдается правило не обходить инициализацию переменных.

int k;

goto metka;

{int a=3, b=4;

k=a+b;]

metka: int m=k+1;

}

После выполнения этого фрагмента программы значение переменной m не определено.

2.2 Оператор break

Оператор break используется для прерывания текущего оператора, после его выполнения управление передается оператору, следующему за прерванным. Оператор break может быть использован только внутри операторов:

switch, for, while или do while.

Он обеспечивает прекращение выполнения самого внутреннего из содержащих его операторов. Подчеркнем, что break нельзя использовать для выхода из нескольких вложенных циклов, а составной оператор, состоящий из нескольких операторов break, эквивалентен одному break.

Пример 8. Ввести с клавиатуры х и у, суммировать числа начиная от х с шагом у пока сумма меньше К, подсчитать количество итераций. Повторять процессы ввода х, у, и суммирования, пока х находится в диапазоне от А до В.

# define A 10 //задаются именованные константы

# define B 1000

# define K 9999

//выделяется память под переменные

int x, y, i, sum;

do

{

printf (“\n Vvod x, y”); \\Приглашение для ввода данных

// ввод данных с клавиатуры в переменные х и у

scanf (“%d%d”, &x, &y);

for (i=x; sum=0; i=i+y)

{ sum+=i;

if (sum > K) {break; break}

}

// цикл продолжается, если х – в диапазоне от А до В

while (x>A && x<B)

При выполнении условия sum > K завершится выполнение только внутреннего цикла for, а выполнение внешнего цикла do-while продолжится, несмотря на то, что оператор break повторен дважды. Для выхода из вложенных циклов используйте оператор goto.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]