Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык программирования Сpp 25.09.11 (2).doc
Скачиваний:
16
Добавлен:
19.08.2019
Размер:
10.09 Mб
Скачать

1.11. Операторы перехода

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

Оператор break. Оператор предназначен для прерывания циклов while, do-while, for и оператора switch. Управление передается следующему оператору стоящему за прерванным циклом. Например, следующая программа осуществляет суммирование вводимых оператором натуральных чисел (целых неотрицательных). Как только появляется отрицательное число работа программы заканчивается.

/*Определение суммы натуральных чисел */

#include <iostream.h>

main(){

int number, sum=0;

while(true){

cout << "\nInput number="; //здесь \n записан вместе с текстом,

//но компилятор это поймет

cin >> number;

if (number<0){

break;

cout << "\n The progam is breaking";

}

else{

sum=sum+number;

cout << "\n Summa=" << sum;

}

cout<<"\nIt is true?";

}//оператор break прерывает цикл и передает управление сюда

cout<<"\nThe program is over!";

}

Вот результат при вводе чисел 1, 2, 3, -1.

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

Оператор continue. Оператор continue прекращает выполнение цикла while, do или for. Управление передается не следующему за циклом оператору, а проверочному выражению циклов while и do или выражению управления циклом for. Говоря иначе управление передается не в конец а в начало цикла. Например, следующая программа предлагает ввести 10 неотрицательных чисел и после каждого ввода находит сумму этих чисел. Если введенное число окажется отрицательным, то оно игнорируется. Выводится сообщение призывающее к вниманию. Программа продолжает работать, ввод числа уже был выполнен, это значит, что количество оставшихся вводов для чисел будет уже меньшим, т.е. если было введено одно отрицательное число, то останется 9 вводов, если два отрицательных числа, то 8 и т.д.

#include <iostream.h>

main(){

int number, sum=0;

for (int i=1; i<11; i++) /* оператор continue

передает управление сюда*/

{

cout << "\n Input number=";

cin >> number;

if (number<0){

cout << " attention!";

continue;

}

else{

sum=sum+number;

cout << "\n Summa=" << sum;

}

}

}

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

M1: a=b+1;

Label: C=2*PI*R;

1M: x=y+z; // здесь ошибка, имя метки начинается с цифры.

А вот пример программы с использованием метки.

#include <iostream.h>

main(){

int number, sum=0, i=0;

M: if (i<11){ //здесь используется метка с именем M

cout << "\n Input number=";

cin >> number;

if (number<0){

cout << " attention!";

goto M; //управление передается оператору с меткой M

}

else{

sum=sum+number;

i=i+1;

cout << "\n Summa=" << sum;

goto M; //управление передается оператору с меткой M

}

}

}

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

Обычно программисты не используют оператор goto по нескольким причинам. Во-первых без оператора goto легко обойтись другими операторами: условными и операторами циклов. Во-вторых применение оператора goto усложняет понимание алгоритма программы. С помощью этого оператора можно войти во внутрь еще не начавшегося выполняться блока, или наоборот некорректно выйти из блока, оставив неопределенными некоторые переменные. Как правило, применение оператора goto свидетельствует о неряшливости программиста, хотя в некоторых случаях его применение оправдано. Например, при поиске, путем последовательного перебора, простого числа из массива чисел. Если такое число найдено в начале массива, то продолжать дальнейший поиск бессмысленно. Хотя и в данном случае без этого оператора вполне можно обойтись. В некоторых языках такого оператора нет вообще.