Помощь в написании студенческих работ
Антистрессовый сервис

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

РефератПомощь в написанииУзнать стоимостьмоей работы

Оператор break служит для принудительного выхода из цикла или переключателя. Определение «принудительный» подчеркивает безусловность перехода. Например, в цикле не проверяются и не рассматриваются условия дальнейшего продолжения итераций. Оператор break прекращает выполнение оператора цикла или переключателя и осуществляет передачу управления (переход) к следующему за циклом или переключателем… Читать ещё >

Операторы передачи управления (реферат, курсовая, диплом, контрольная)

Кроме оператора безусловного перехода (иначе — оператора безусловной передачи управления goto) к операторам передачи управления относят: оператор возврата из метода return; оператор выхода из цикла или переключателя break; оператор перехода к следующей итерации цикла continue; оператор посылки исключения throw.

Оператор return подробно рассмотрим, перейдя к методам (функциям). Оператор throw требует хорошего понимания механизма генерации и обработки исключений, поэтому знакомство с ним нужно отложить. Поэтому сейчас остановимся на операторах break, continue и goto.

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

Необходимость в использовании оператора break в теле цикла возникает, когда условия продолжения итераций нужно проверять не в начале итерации (циклы for, while), не в конце итерации (цикл do), а в середине тела цикла. В этом случае тело цикла может иметь такую структуру:

{

операторы

if (условие) break;

}

Например, если начальные значения целых переменных i, j таковы, что i < j, то следующий цикл определяет наименьшее целое, не меньшее их среднего арифметического:

while (i < j).

{

i++;

if (i == j) break;

j—;

}

Для i == 0, j == 3 результат (i = = 2)&(j = = 2) достигается при выходе из цикла с помощью оператора break. Для i==0nj==2 результат (i == l)&(j == 1) будет получен при естественном завершении цикла.

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

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

Оператор безусловного перехода, который мы рассмотрели в связи с метками и переключателем, имеет вид:

goto идентификатор;

где идентификатор — имя метки оператора, расположенного в том же блоке, где используется оператор безусловного перехода, или во внешнем блоке.

Принятая в настоящее время дисциплина программирования рекомендует либо вовсе отказаться от оператора goto, либо свести его применение к минимуму и строго придерживаться следующих рекомендаций:

• не входить внутрь блока извне (компилятор C# этого не позволит — сообщит об ошибке);

  • • не входить внутрь условного оператора, т. е. не передавать управление операторам, размещенным после служебных слов if или else;
  • • не входить извне внутрь переключателя (компилятор C# сообщит об ошибке);
  • • не передавать управление внутрь цикла (в тело цикла).

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

Оператор continue (оператор перехода к следующей итерации) употребляется только в операторах цикла. С его помощью завершается текущая итерация и начинается проверка условия возможности дальнейшего продолжения цикла, т. е. проверяется условие начала следующей итерации. Для объяснений действия оператора continue рекомендуется рассматривать операторы цикла в следующем виде:

while (foo) { do { for (;foo;) {.

contin:; contin:; contin: ;

} } while (foo); }.

В каждой из форм многоточием обозначены операторы тела цикла. Вслед за ними размещен пустой оператор с меткой contin. Если среди операторов тела цикла есть оператор continue и он выполняется, то его действие эквивалентно оператору безусловного перехода на метку contin.

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

// 0604.cs — оператор перехода к следующей итерации

using static System. Console;

class Program.

{

static void Main ().

{

double sum = 0, x; do {.

do Write («x = «);

while (!double.TryParse (ReadLine (), out x)); if (x < 0) continue; sum += x;

}

while (x ≠ 0);

WriteLine («Сумма = «+ sum);

} }

Результат выполнения программы:

x = 2 x = -4 x = 6 x = 0.

Сумма = 8.

Показать весь текст
Заполнить форму текущей работой