Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_по_программированию.doc
Скачиваний:
79
Добавлен:
02.04.2015
Размер:
4.77 Mб
Скачать
        1. Оператор цикла с предусловием

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

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

while( усл_выр )

{

тело

цикла

}

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

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

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

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

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

Первая строка оператора называется заголовком цикла.

Рис. 5.7. Развёрнутые изображения циклов:

а – с предусловием, б – с постусловием, в – с параметром

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

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

  • если выражение истинно (результат не равен нулю) – выполняется тело цикла и управление передается в заголовок для очередной проверки усл_выр;

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

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

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

while( усл_выр )

ЛОЖЬ ИСТИНА

{

тело

цикла

}

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

Например, фрагмент программы

. . .

while( zi <= b ) /* заголовок цикла */

{

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

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

}

sum = 0.;

. . .

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

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

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

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

while( yi >= b | | yi <= c )

{

yi=2. * cos( xi );

printf(“ %f %f”, xi, yi);

}

while( xi<=a )

xi=sin( ci );

или

while( xi<=a ) xi=sin( ci );

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

while( a > b )

{

. . .

if( c < a )

break;

. . .

}

d = 15.;

while( a > b )

{

. . .

if( c < a )

goto k;

. . .

}

d = 15.;

. . .

k: d=12.;

while( a > b )

{

. . .

if( c < a )

continue;

. . .

}

d = 15.;

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

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

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