Цикл for в C: порядок выполнения и границы
💻 Информатика · 9 класс
Инициализация, проверка, тело, шаг: трассировка суммы и ошибки на единицу.

Четыре этапа цикла
Цикл for повторяет оператор или блок кода, пока выполняется условие. Его заголовок состоит из начальной части, условия и шага: for (начало; условие; шаг). Начальная часть выполняется один раз. Затем перед каждой итерацией проверяется условие, выполняется тело и после него — шаг.
Если первая проверка ложна, тело не выполняется ни разу. Это отличает for с обычным условием от do-while, который проверяет условие после тела. Шаг может как увеличивать, так и уменьшать счётчик; его направление должно соответствовать условию.
Полная программа
#include <stdio.h>
int main(void)
{
int total = 0;
for (int i = 1; i <= 4; ++i) {
total += i;
}
printf("%d\n", total);
return 0;
}Пример рассчитан на C99 и новее, где переменную можно объявить в заголовке for. Программа выводит 10. Счётчик i существует внутри области цикла; после закрывающей скобки к нему нельзя обращаться как к этой же переменной.
Трассировка
| i перед телом | total до | total после |
|---|---|---|
| 1 | 0 | 1 |
| 2 | 1 | 3 |
| 3 | 3 | 6 |
| 4 | 6 | 10 |
После четвёртого тела шаг увеличивает i до 5. Проверка 5 <= 4 ложна, поэтому пятой итерации нет. Порядок «сначала шаг, затем первое тело» дал бы другой результат и не соответствует семантике for.
Массив и ошибка на единицу
Для массива длины n используют индексы от 0 до n−1: условие i < n. Замена на i <= n даёт лишнюю итерацию с недопустимым индексом n. В языке C это может привести к неопределённому поведению, а не обязательно к понятному сообщению об ошибке.
Точка с запятой сразу после заголовка, как в for (...);, является пустым телом. Блок после неё уже не повторяется как тело цикла. При отладке проверяйте не только числа, но и расположение скобок и точек с запятой.
Break и continue
Break немедленно завершает ближайший цикл. Continue пропускает остаток текущего тела, после чего в обычном for выполняется выражение шага и следующая проверка условия. Это полезно при отборе элементов, но не отменяет необходимости доказать, что цикл завершится.
При обратном обходе особенно внимательно выбирайте тип счётчика. Беззнаковая переменная после нуля не становится −1: она переходит к большому положительному значению. Поэтому условие i >= 0 для такого типа не даёт ожидаемой остановки.
Практика
- Что изменится в сумме, если заменить i <= 4 на i < 4?
- Сколько раз выполнится тело при начальном i = 5 и условии i < 3?
- Каково условие обхода массива из пяти элементов с i = 0?
Ответы
1. Получится 6: складываются только 1, 2, 3. 2. Ни разу: условие сразу ложно. 3. i < 5, допустимые индексы 0–4. Проверка границы определяет количество итераций и безопасность обращения к массиву.