Оператор цикла с постусловием

Предназначен для реализации в программе варианта цикла с постусловием – вычисление тела цикла с последующей проверкой текущего значения параметра цикла на соответствие диапазону изменения.

Если условие выполняется – управление передается на повторное выполнение тела.

В противном случае (условие не выполняется) осуществляется выход из цикла.

Структура оператора

do

{

тело

цикла

}

while( усл_выр);

 

где do – ключевое слово (выполнять);

тело цикла – совокупность операторов, вычисление которых требуется повторять;

{ } – ограничители тела цикла;

while – ключевое слово (пока);

усл_выр – выражение, определяющее проверку условия повторения цикла;

( ) – ограничители выражения;

; – признак оператора.

Как и в операторе цикла с предусловием первая строка формирует заголовок цикла.

Оператор работает следующим образом:

· реализуются требование входа в цикл (do);

· выполняются операторы тела цикла;

· вычисляется условное выражение (усл_выр);

· если выражение истинно (результат не равен нулю) – управление передается заголовку цикла и весь процесс повторяется при следующих значениях параметра цикла;

· если усл_выр ложно (результат равен нулю) – осуществляется нормальный выход из цикла, т.е. управление передается оператору, расположенному под строкой while (усл_выр).

Схема выполнения оператора

do

{

тело

цикла

}

while(усл_выр);

ЛОЖЬ ИСТИНА

 

Стрелки определяют последовательность работы оператора в зависимости от результатов проверки условного выражения – ИСТИНА или ЛОЖЬ.

ü Внимание! Оператор do ... while безусловно предписывает однократное выполнение тела цикла до проверки условного выражения (усл_выр) независимо от ее будущих результатов.

 

Так, фрагмент программы:

do /* вход в цикл */

{

yi = sin( xi ); /* вычисления в */

zi = 2.* yi; /* теле цикла */

}

while( zi <= b ); /* проверка условия повторения цикла */

sum = 0.;

предписывает повторение вычислений yi и zi пока zi <= b. Как только условие zi <= b перестанет выполняться, произойдет нормальный выход из цикла – управление передастся оператору sum = 0.

Правила записи и выполнения

В качестве усл_выр могут использоваться любые выражения Cи/Си++. Арифметические, например (sin(b)+0.5), (2*c–d/f), (a) или простые (составные) логические выражения, например (а!=b), (sin( x ) < b), ( x <= a && x >= b ).

Тело цикла может оформляться одним составным или одним простым оператором. Например

 

do { yi=2. * cos( xi ); printf(“ %f %f”, xi, yi); } while( yi >= b | | yi <= c );     do xi=sin( ci ); while( xi<=a );

 

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

do { . . . if( c < a ) break; . . . } while( a > b ); d = 15.; do { . . . if( c < a ) goto k; . . . } while( a > b ); d = 15.; . . . k: d=12.; do { . . . if( c < a ) continue; . . . } while( a > b ); d = 15.;

Первый фрагмент предписывает искусственный выход из цикла при выполнении в теле цикла условия c < a с передачей управления оператору d = 15. Второй – нарушает естественный порядок вычисления тела цикла при c < a с передачей управления оператору d=12., помеченному меткой k. Третий прерывает выполнение тела цикла по тому же условию, но управление возвращается элементу цикла while(усл_выр).

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

Вывод: оператор do while позволяет программировать арифметические циклы с постусловием, например, представленные схемами рис. 5.5 (блоки 5, 6, 7, 8, 9); рис. 5.7б (блоки 5, 6, 7, 8), при условии, что начальное значение параметра цикла (блок 4) задается до входа в цикл, а изменение параметра (блок 8 рис. 5.5; блок 7 рис. 5.7б) осуществляется в теле цикла.