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

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

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

for( [нач_выр] ; [усл_выр] ; [выр_прир] )

{

тело

цикла

}

где for – ключевое слово (для);

нач_выр – выражение, задающее начальное значение параметра цикла;

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

выр_прир – выражение, формирующее текущее значение параметра цикла через предыдущее;

; – разделители выражений;

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

[ ] – признак необязательности содержимого;

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

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

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

  • определяется начальное значение параметра цикла (нач_выр);

  • проверяется его соответствие диапазону счета (усл_выр);

  • если выражение усл_выр истинно (результат не равен нулю):

  • выполняется тело цикла;

  • формируется новое текущее значение параметра (выр_прир);

  • повторяется его проверка в усл_выр;

  • если усл_выр ложно (результат равен нулю):

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

  • управление передается следующему после тела цикла оператору (осуществляется завершение цикла).

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

for( нач_выр ; усл_выр ; выр_прир )

ЛОЖЬ ИСТИНА

{

тело

цикла

}

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

  1. В качестве начального выражения (нач_выр) используются одно простое (последовательное) или несколько (разделенных запятыми) присваиваний, например xi = xn (a=b=c=1.) или xi = xn, y=0., z=2.5, a=b=c=1.

  2. Если начальное выражение отсутствует, начальное значение параметра цикла будет определяться содержимым соответствующей переменной (xi). Например, сформированным до входа в цикл:

xi = xn; /* формирование начального значения */

for( ; xi <= xk; xi = xi + dx )

{

. . .

yi = sin( xi );

. . .

}

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

  2. Если условное выражение отсутствует, его значение считается истинным – создается бесконечный цикл.

  • Внимание ! Выход из такого цикла невозможен – требуется перезагрузка операционной системы.

Один из вариантов предотвращения подобной ситуации заключается в формировании в теле цикла отрицания условного выражения в виде оператора if со структурой, например if(усл_выр) break;

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

for( xi = xn ; ; xi = xi + dx )

{

. . .

if( !( xi <= xk ) )

break;

yi = sin( xi );

. . .

}

for( xi = xn ; ; xi = xi + dx )

{

. . .

if( xi > xk )

break;

yi = sin( xi );

. . .

}

  1. В качестве выражения приращения (выр_прир) используются одно или несколько (разделенных запятыми) присваиваний вида xi =  ( xi - 1 ), например xi = xi + dx или xi = xi + dx , b=b+2.

  2. Если выр_прир отсутствует, текущее значение параметра цикла будет определяться содержимым соответствующей переменной (xi). Если оно не меняется – создается бесконечный цикл.

  • Внимание ! Выход из такого цикла невозможен – требуется перезагрузка операционной системы.

Один из вариантов предотвращения подобной ситуации – формирование закона изменения параметра в теле цикла, например:

for( xi = xn ; xi <= xk ; ) /* заголовок цикла */

{

. . .

yi = sin( xi );

. . .

xi = xi + dx; /* закон изменения параметра*/

}

  1. В принципе, нач_выр и выр_прир могут формироваться вне заголовка цикла. Первое – до него, второе – в теле цикла, например:

xi = xn; /* формирование начального значения параметра */

for( ; xi <= xk ; ) /* заголовок цикла */

{

. . .

yi = sin( xi );

. . .

xi = xi + dx; /* закон изменения параметра*/

}

В этом случае оператор for выполняет функции оператора while.

  1. Тело цикла оформляется одним оператором (составным или простым).

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

for( ai=an ;

ai > b ;

ai= ai + da )

{

. . .

if( c < ai )

break;

. . .

}

d = 15.;

for( ai=an ;

ai > b ;

ai= ai + da )

{

. . .

if( c < ai )

goto k;

. . .

}

d = 15.;

. . .

k: d=12.;

for( ai=an ;

ai > b ;

ai= ai + da )

{

. . .

if( c < ai )

continue;

. . .

}

d = 15.;

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

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

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

Рассмотренные операторы цикла позволяют реализовать составленные ранее схемы алгоритмов.

  • Внимание ! Используемые в алгоритме переменные Зi и Зi-1 математически представляют текущие и предыдущее значения одной и той же переменной. Поэтому в программе они должны идентифицироваться как одна именованная ячейка (переменная).

Идентификация переменных с учётом сказанного имеет вид табл. 5.2.

Таблица 5.2

Обозначения в алгоритме

Зн

Зк

З

пн

Зi

Зi-1

Налi

N

Обозначения в программе

zn

zk

dz

pn

zi

zi

nali

n

Составим возможные варианты программ решения задачи с каждым из рассмотренных операторов цикла.