Урок 5.9. Оператор цикла for

5.9. Оператор цикла for

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

for(<выражение1>;<выражение2>;<выражение3>)<оператор>

В операторе for <выражение1> называется инициализирующим выражением и обычно оно устанавливает начальное значение переменной цикла. Выражение <выражение2> называется проверяющим выражением и определяет условие завершения цикла. Выражение <выражение3> называется корректирующим и обычно определяет шаг изменения переменной цикла. Выражения в заголовке цикла for отделяются друг от друга точкой с запятой. Например, фрагмент программы:

float y=0;
 
for(int n = 1; n <= 50; ++n) 
      y += n/(n + 1.0);


вычисляет Formula_5. Здесь n = 1инициализирующее выражение,
n <= 50проверяющее выражение, ++nкорректирующее(отвечающее за итерацию цикла) выражение. Оператор цикла for работает следующим образом. Вначале вычисляется инициализирующее выражение <выражение1>. Затем, если проверяющее выражение <выражение2> истинно, то выполняется <оператор>. После выполнения <оператор> выполняется корректирующее выражение и вновь вычисляется проверяющее выражение, истинность которого влечет за собой повторное выполнение <оператор>. Если проверяющее выражение имеет значение ложь, то выполнение оператора for завершается и управление передается на оператор программы, записанный после оператора for. На месте инициализирующего выражения может быть записан инициализирующий оператор, например:

char *ptr = getStr();
int i = 0, j =0;
int lo = 0, hi = max, mid = max/2;

Алгоритмическая схема выполнения оператора for представлена на рис 5.6.
Fig5_6

Рис 5.6. Алгоритмическая схема выполнения оператора for.

В соответствии с алгоритмической схемой, оператор for, вычисляющий сумму, будет выполняться, как это представлено на рисунке 5.7.

Fig5_7

Рис 5.7. Схема выполнения оператора for.

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

for( ; n < 50; n++);
for( ; ; n++);
for( ; ; ) ;

Если какое-либо из выражений заголовка цикла опущено, то в алгоритмической схеме выполнения будет отсутствовать соответствующий обрабатывающий блок. Пустое проверяющее выражение всегда считается истинным. На примере вычисления k=7! рассмотрим циклы с различными видами заголовка for:

// 1.Полный заголовок for:
k=1;
 
for(n = 7; n > 0; --n) k*=n;
 
// 2.Отсутствует инициализирующее выражение:
k=1, n = 7;
 
for( ; n > 0; --n) 
   k *= n;

// 3.Отсутствуют инициализирующие и проверяющие выражения,
// выход из цикла осуществляется оператором break:
k=1, n = 7;
 
for( ; ; --n)
   if(n <= 0) break;
   else k *= n;
 
// 4.Отсутствуют инициализирующие, проверяющие и корректирующие 
// выражения, выход из цикла осуществляется оператором break:
k = 1, n = 7;
 
for( ; ;)
   if(n <= 0) break;
   else {k *= n; 
         --n;
        }

Во всех этих примерах k=7! вычисляется по схеме k=7*6*5*4*3*2*1. Из примеров видно, что если отсутствует инициализирующее выражение, то его необходимо записать до входа в оператор for, а если отсутствует проверяющее и корректирующее выражения, то их необходимо реализовать в теле цикла for. Конечно, это справедливо, если мы желаем хотя бы каким-то образом завершить цикл.

Большая свобода выбора количества и вида выражений, управляющих работой цикла for, позволяет с помощью этого оператора делать весьма "заумные" циклы. Однако оператор for становится более наглядным, если все выражения, управляющие работой цикла, собраны в его заголовке.

рассказать друзьям и получить подарок

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Translate Переводчик

Подписка на новости

SmartResponder.ru
Ваш e-mail: *
Ваше имя: *

Хостинг для Wordpress сайтов