Программирование циклических алгоритмов
Операторы цикла
Операторы цикла используются для организации многократно повторяющихся вычислений. Любой цикл состоит из:
- тела цикла (то есть тех операторов, которые выполняются несколько раз);
- начальных установок;
- модификации параметра цикла;
- проверки условия продолжения выполнения цикла.
Тело цикла не может быть описанием или определением. Это либо отдельный (в том числе пустой) оператор, который всегда завершается точкой с запятой (;) либо составной оператор, либо блок (заключается в фигурные скобки).
Один проход цикла — итерация. Проверка условия выполняется на каждой итерации либо до тела цикла, либо после. Переменные, изменяющиеся в теле цикла и используемые при проверке условия продолжения, называются параметрами цикла.
Целочисленные параметры цикла, изменяющиеся с постоянным шагом на каждой итерации, называются счетчиками цикла.
Начальные установки могут явно не присутствовать в программе, их смысл состоит в том, чтобы до входа в цикл задать значения переменным, которые, которые в нем используются. Цикл завершается, если условие его продолжения не выполняется.
Для организации циклов в языке C++ предусмотрено три оператора.
- Оператор с предусловием while
- Оператор с постусловием do while
- Оператор цикла с параметром
Цикл с предусловием
|
while (выражение-условие) тело цикла;
|
При входе в цикл вычисляется выражение-условие. Если его значение не равно 0, то выполняется тело цикла. Затем вычисление выражения-условия и выполнение операторов цикла повторяется последовательно пока значение выражения-условия равно 0.
Оператором while удобно пользоваться для просмотра последовательностей, если в конце каждой из них находится заранее известный признак. В качестве проверяемого выражения-условия часто используются отношения.
Используя цикл с предусловием, необходимо следить за тем, чтобы операторы тела цикла воздействовали на выражение-условие.
В круглых скобках после ключевого слова while можно вводить описание переменной. Областью ее действия является цикл.
Структурой с вложенным циклом называют такую структуру, в которой внутри одного цикла находится один или несколько других циклов.
Цикл, расположенный внутри другого цикла, называют внутренним. Цикл, внутри которого находятся другие циклы, называют внешним.
Цикл с постусловием
|
do тело цикла while (выражение-условие); |
При входе в цикл обязательно выполняется тело цикла, затем вычисляется выражение-условие. Если его значение не равно 0, вновь выполняется тело цикла.
При обработке некоторых последовательностей применением цикла do оказывается удобнее, чем цикла while. Это бывает в тех случаях, когда обработку нужно закончить не до, а после выполнения концевого признака. К выражению-условию требования те же, что и для цикла while. Оно должно изменяться при итерациях либо при вычислениях.
Цикл с параметром
for (инициализация цикла; выражение-условие; список выражений) тело цикла;
Инициализация цикла — это последовательность определений (описаний) и выражений, разделяемых запятыми. Все выражения, входящие в инициализацию цикла, вычисляются только один раз при входе в цикл. Чаще всего здесь устанавливаются начальные значения счетчиков и параметров цикла.
Выражение-условие такое же, что и в циклах while и do. Если оно равно 0, то выполнение цикла прекращается. В случае отсутствия выражения-условия или другой части заголовка цикла, соответствующий им разделитель ; (точка с запятой) сохраняется. При отсутствии выражения-условия предполагается, что его значение всегда истинно.
Выражение из списка выражений вычисляется на каждой итерации после выполнения операторов тела цикла и до следующей проверки выражения-условия. Тело цикла может быть блоком, отдельным оператором, составным оператором, пустым оператором.
Часто встречаются ошибки при программировании циклов — использование в теле цикла неинициализированных переменных и неверная запись условия выхода из цикла.
Чтобы избежать ошибок, рекомендуется:
- проверять, всем ли переменным, встречающимся в правой части операторов присваивания в теле цикла присвоены до этого начальные значения;
- проверить, изменятся ли в цикле хотя бы одна переменная, входящая в условие выхода из цикла;
- предусмотреть аварийный выход из цикла по достижению некоторого количества итераций:
- не забывать, что если в теле цикла требуется выполнить более одного оператора, нужно заключить их в фигурные скобки.
Операторы цикла взаимозаменяемы. Можно привести некоторые рекомендации по выбору наилучшего варианта в каждом конкретном случае:
- оператор do обычно используется, когда цикл требуется обязательно выполнить хотя бы 1 раз;
- оператор for предпочтителен в большинстве остальных случаев (однозначно — для организации циклов со счетчиком);
- оператором while удобнее пользоваться в тех случаях, когда число итераций заранее неизвестно, очевидных параметров цикла нет или модификацию параметров удобно записать не в конце тела цикла.
Вложенные циклы
Часто возникают ситуации, когда внутри одного цикла необходимо вычислить некоторые значения. Для вычисления этих значений необходимо также организовать цикл. В этом случае применяются вложенные циклы.
Разрешено вложение любых циклов в любые циклы.
В теле любого оператора цикла могут находиться другие операторы цикла. При этом цикл, содержащий в себе другой, называют внешним, а цикл, находящийся в теле первого — внутренним (вложенным). Правила организации внешнего и внутреннего циклов такие же, как и для простого цикла.
При программировании вложенных циклов необходимо соблюдать дополнительное условие: все операторы внутреннего цикла должны полностью располагаться в теле внешнего цикла.
for (i=1; i<=n; i++) { … for (j=1; j<=m; j++) { … } } |
// внешний цикл
// внутренний цикл
//конец внутреннего цикла // конец внешнего цикла |