Циклические
конструкции
Циклические
конструкции применяют для повторения некоторого блока кода на основании условия
цикла. В языке С используются циклические конструкции while, for и do-while.
Конструкция while
Цикл
while имеет следующий синтаксис.
while (условное_выражение)
{
// Выполнение тела цикла, если выражение истинно
}
Другими
словами, циклы while имеет смысл использовать в тех случаях, когда соответствующий
оператор или блок операторов необходимо выполнять до тех пор, пока условное
выражение истинно. Пример формирования строки, состоящей из нечетных цифр:
int с, i;
const char str[] = "0123456789";
char OddNums[5]; //Строка для хранения нечетных цифр
с = 0; //Счетчик циклов
i = 0; //Индекс массива OddNums
while (с < 10) //До тех пор, пока с меньше 10, . ..
{
//Если остаток от деления с на 2 = 1, то записываем
в i-ю позицию массива OddNums с-й
//элемент строки str, после чего значение i автоматически инкрементируется
if ((с % 2) == 1) OddNums[i++] = str[c];
с++; //с = с + 1 .
}
Конструкция for
Цикл
for имеет следующий синтаксис.
for
(выражение1; выражение2; выражение3)
{
// Выполнение тела цикла
}
Выражение
1 выполняется только один раз при входе в цикл, и обычно представляет собой
оператор присваивания некоторого начального значения счетчику цикла. Выражение2
— это условное выражение, определяющее момент выхода из цикла (цикл выполняется
до тех пор, пока оно равно TRUE или 1).
Выражение3
— еще один оператор присваивания, в котором обычно изменяется счетчик цикла или
некоторая переменная, влияющая на выполнение условия в выражении2. Выражения
могут быть представлены любыми операторами, включая пустые (то есть, вместо
выражения можно поставить только символ точки с запятой).
Циклы
while и for в
большинстве случаев взаимозаменяемы. Так, представленный выше пример для цикла
while, можно переписать в следующем виде:
int с, i; ,
const char str[] =
"0123456789";
char OddNums[5];
//Строка для хранения нечетных цифр
i = 0; //Индекс массива OddNums
for (с =0;
с < 10; с++) //До тех
пор, пока с
меньше 10,...
if ((с %
2) == 1)
OddNums[i++] = str[c];
В
одних ситуациях удобнее применять циклы for, в других — while. Достоинством циклов for является более наглядная инициализация и
организация изменения счетчика цикла, С другой стороны, циклы while более гибкие и обеспечивают больше возможностей
для реализации нестандартных программных решений при организации повторяющихся
вычислений.
Конструкция
do-while
Кроме
циклов while и for, в которых
вначале выполняется проверка истинности условия цикла, и только потом
управление передается блоку операторов цикла, в языке C имеется также конструкция do-while. Она
отличается от первых двух тем, что в ней вначале выполняется блок операторов, и
только потом проверяется выполнение условия. Другими словами, цикл do-while всегда
выполняется как минимум один раз, вне зависимости от условия цикла.Цикл do-while имеет следующий синтаксис:
do
{
// Выполнение блока операторов цикла
}
while (условное_выражение);
Организация бесконечных циклов
Для
организации бесконечного цикла в качестве условного выражения в конструкции while или do-while можно просто указать значение TRUE или 1:
while(1) блок_операторов;
В
случае циклов for это будет выглядеть следующим образом:
for (;;) блок_операторов;
Операторы break и continue
Если
в теле любого цикла встречается оператор break, управление тут же передается на оператор,
следующий за оператором цикла, вне зависимости от истинности или неистинности
условного выражения. При этом во вложенных циклах выход осуществляется не на
самый верхний уровень вложенности, а лишь на один уровень вверх.
При выполнении оператора continue все находящиеся после него операторы блока
пропускаются, а управление передается в начало цикла для следующей итерации.
На практике операторы continue
используются гораздо реже, чем операторы break, однако в сложных циклах, требующих принятия
решений на основании многих факторов, использование операторов continue может быть весьма удобным.