C. Тема 1. Раздел 10
.pdf
Часть 3
Другое название «вечные» циклы
Примеры
for(;;)
while (1) {}
do {} while (1)
Условие выполнения следующей итерации вычисляется перед выполнением каждой итерации
Цикл может ни разу не выполниться
За счёт использования цикла с предусловием можно сэкономить один условный оператор
Реализация в Си: while
Условие выполнения следующей итерации вычисляется после выполнения каждой итерации
Первая итерация выполняется всегда
Реализация в Си: do while
Является промежуточным типом цикла между циклом с предусловием и циклом с постусловием
Реализация в Си: через безусловный цикл for(;;)
{
первая часть тела цикла; if(условие выхода)
{
break;
}
вторая часть тела цикла;
}
В этом цикле переменная цикла меняет своё значение от заданного начального значения до конечного значения с некоторым шагом
Может реализовываться как цикл с предусловием или как цикл с постусловием
Реализация в Си: for (цикл с предусловием)
В Си допускается изменение переменной цикла
Изменения переменной цикла лучше избегать
Что будет напечатано на экране? int i;
for(i = 0; i < 10; i++)
{
printf("%d ", i); if(i < 5)
{
i = 6;
}
}
printf("\ni: %d\n", i);
0 7 8 9 i: 10
Это циклы в циклах
Количество уровней вложенности не ограничено
Полное число исполнений тела внутреннего цикла не превышает произведения числа итераций внутреннего и всех внешних циклов
Оператор continue не годится
Оператор break выходит только из одного уровня вложенности
Целесообразно использовать goto для перехода на метку вне вложенных циклов
Можно модифицировать условия выполнения следующей итерации
Потенциальный источник трудно находимых ошибок
Зато не используем goto!
Можно разместить вложенный цикл в отдельной функции и использовать оператор return
Это цикл, задающий выполнение некоторой операции для объектов из заданного множества (массива)
Выполнить операцию X для всех
элементов, входящих в множество M
В некоторых языках это цикл foreach
Реализация в Си: отсутствует
Решение
Использовать существующие операторы циклов
Удобно использовать for
