Все разделы
Выбрать школу

Школа. Увлечения. Большое будущее.

PROSCHOOLS · ОБРАЗОВАНИЕ РЯДОМ

Ваш город

Выберите город, чтобы находить образование и возможности рядом.

Как учитываем городКаталог и кнопки «Выбрать школу» покажут школы выбранного города.Онлайн-курсы, учебник, ГДЗ и задания к экзаменам доступны по всей России.

Популярные города

Будет выбран: Вся Россия

Учебные материалы останутся прежними.

Поиск по сайту

По всему сайтуШколы выбранного города — выше в результатах

С чего начнём?

↑ ↓ — выбрать результат · Enter — открыть · Esc — закрыть

Цикл for в C: порядок выполнения и границы

💻 Информатика · 9 класс

Инициализация, проверка, тело, шаг: трассировка суммы и ошибки на единицу.

Клавиатура в компьютерном классе
Иллюстрация к предмету «Информатика»Hmartil · Wikimedia Commons · CC BY-SA 4.0

Четыре этапа цикла

Цикл 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 после
101
213
336
4610

После четвёртого тела шаг увеличивает i до 5. Проверка 5 <= 4 ложна, поэтому пятой итерации нет. Порядок «сначала шаг, затем первое тело» дал бы другой результат и не соответствует семантике for.

Массив и ошибка на единицу

Для массива длины n используют индексы от 0 до n−1: условие i < n. Замена на i <= n даёт лишнюю итерацию с недопустимым индексом n. В языке C это может привести к неопределённому поведению, а не обязательно к понятному сообщению об ошибке.

Точка с запятой сразу после заголовка, как в for (...);, является пустым телом. Блок после неё уже не повторяется как тело цикла. При отладке проверяйте не только числа, но и расположение скобок и точек с запятой.

Break и continue

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

При обратном обходе особенно внимательно выбирайте тип счётчика. Беззнаковая переменная после нуля не становится −1: она переходит к большому положительному значению. Поэтому условие i >= 0 для такого типа не даёт ожидаемой остановки.

Практика

  1. Что изменится в сумме, если заменить i <= 4 на i < 4?
  2. Сколько раз выполнится тело при начальном i = 5 и условии i < 3?
  3. Каково условие обхода массива из пяти элементов с i = 0?

Ответы

1. Получится 6: складываются только 1, 2, 3. 2. Ни разу: условие сразу ложно. 3. i < 5, допустимые индексы 0–4. Проверка границы определяет количество итераций и безопасность обращения к массиву.

Связанные материалы

Источники и материалы