Оператор
for – это наиболее общий способ организации цикла. Он имеет следующий
формат:
for (выражение 1 ; выражение 2 ; выражение 3) {тело цикла}
Выражение
1 обычно используется для установления начального значения переменных,
управляющих циклом. Выражение 2 – это выражение, определяющее условие,
при котором тело цикла будет выполняться. Выражение 3 определяет изменение
переменных, управляющих циклом после каждого выполнения тела цикла.
Схема
выполнения оператора for:
1.
Вычисляется выражение 1.
2.
Вычисляется выражение 2.
3.
Если значения выражения 2 отлично от нуля (истина), выполняется
тело цикла, затем вычисляется выражение 3 и осуществляется переход
к пункту 2, если выражение 2 равно нулю (ложь), то управление передаётся
на оператор, следующий за оператором for.
Существенно
то, что проверка условия всегда выполняется в начале цикла. Это значит,
что тело цикла может ни разу не выполниться, если условие выполнения
сразу будет ложным.
Например:
int
main()
for
(i=1; i<10; i++) b="i*i;" ;
}
В этом
примере вычисляются квадраты чисел от 1 до 9.
Некоторые
варианты использования оператора for повышают его гибкость за счёт
возможности использования нескольких переменных, управляющих циклом.
Например:
int
main()
{ int t, b; char string[100], temp;
for ( t=0, b=100 ; t< b ; t++, b--)
string[b]=temp;
}
}
В этом
примере, реализующем запись строки символов в обратном порядке, для
управления циклом используются две переменные t и b. Здесь на месте
выражения 1 и выражения 3 используются несколько выражений, записанных
через запятую, и выполняемых последовательно.
Другим
вариантом использования оператора for является бесконечный цикл. Для
организации такого цикла можно использовать пустое условное выражение,
а для выхода из цикла обычно используют дополнительное условие и оператор
break.
Например:
for
(;;)
{
...
... break;
...
}
Так
как согласно синтаксису языка С оператор может быть пустым, тело оператора
for также может быть пустым. Такая форма оператора может быть использована
для организации поиска.
Например:
for
(i=0; t[i]<10 ; i++) ;
В данном примере переменная цикла i принимает значение номера первого
элемента массива t, значение которого больше 10.
Рассмотрим
копирование десяти элементов одного вектора в другой вектор:
for
(int i=0; i<10; i++) q[i]=p[i];
это эквивалентно:
while (i<10) { q[i]=p[i]; i++; }
что более удобочитаемо, поскольку вся информация, управляющая циклом,
локализована. При применении операции ++ к целой переменной, к ней просто
добавляется единица. Первая часть оператора for не обязательно должна
быть описанием, она может быть любым оператором.
Например:
for
(int i=0; i<10; i++) q[i]=p[i];
тоже эквивалентно предыдущей записи [10].