Итерационный цикл (for)

Do

Цикл с постусловием (do while)

 

Формат записи этой инструкции:

do { <Инструкция1>; <Инструкция2>; ………. <ИнструкцияN>; } while (<Выражение>);
Блок инструкций - тело цикла

Или, если тело цикла представляет собой одиночную инструкцию:

do <Инструкция>; while (<Выражение>); ;
тело цикла

И тому и другому варианту соответствует следующая схема алгоритма:

 

false
true
Тело цикла
Выражение

 

Так же, как и в предыдущем цикле, выражение в этой инструкции может быть любого типа, значения которого можно трактовать как значения логического типа данных (bool). Это выражение определяет условие продолжения выполнения тела цикла, то есть, если значение этого выражения истинно (true или не равно 0), то тело цикла выполняется вновь, если же ложно (false или 0), то цикл заканчивается и управление передается следующей за циклом инструкции.

Принципиальным отличием этого цикла от предыдущего состоит в том, что тело цикла в этой инструкции обязательно будет выполнено хотя бы один раз.

Использование этого цикла проиллюстрировано следующим примером:

 

Пример 1. Необходимо в виде строки вывести на экран цифры от 0 до 9.

 

int k = 0; //На экран выведено k цифр

{

cout << k;

++k;

}

while (k <= 9); //Здесь используется логическое выражение

//На экран выведено k = 10 цифр: 0123456789

 

Все остальное сказанное о предыдущем цикле, можно практически однозначно применить и к циклу с постусловием.

 

Формат записи этой инструкции:

 

Блок инструкций - тело цикла
for (<Инициализация>; <Условие>; <Модификация>) { <Инструкция 1>; <Инструкция 2>; ………. <Инструкция N>; }
Заголовок цикла

Или, если тело цикла представляет собой одиночную инструкцию:

 

for (<Инициализация>; <Условие>; <Модификация>) <Инструкция>;
тело цикла

И тому и другому варианту соответствует следующая схема алгоритма:

false
true
Тело цикла
Условие
Инициализация
Модификация

 

При запуске цикла однократно выполняется Инициализация параметра (параметров) цикла, после чего осуществляется проверка Условия, определяющего необходимость выполнения тела цикла. После окончания выполнения инструкций тела цикла, на каждой итерации выполняется Модификация параметра (параметров) цикла и снова проверяется Условие. Так продолжается до тех пор, пока Условие не станет ложным (false).

Разделы Инициализации, Условия и Модификации в заголовке цикла разделяются символом ‘;’.

Пример записи (пример из предыдущего параграфа):

 

int k;

for (k = 0; k <= 9; ++k)

cout << k;

Если параметр k цикла используется только внутри цикла (после выхода из цикла переменная kбольше не нужна), эту переменную можно (и лучше) определить непосредственно в разделе Инициализации цикла:

 

for (int k = 0; k <= 9; ++k)

cout << k;

 

В разделах Инициализации и Модификации можно управлять сразу несколькими параметрами цикла:

 

for (int k = 1, n = 10; k <= 10; ++k, --n)

cout << k << “ * ” << n << “ = ” << k * n << endl;

 

На экран будет выведено:

 

1 * 10 = 10

2 * 9 = 18

3 * 8 = 24

4 * 7 = 28

5 * 6 = 30

6 * 5 = 30

7 * 4 = 28

8 * 3 = 24

9 * 2 = 18

10 * 1 = 10

Отдельные элементы разделов Инициализации и Модификации отделяются друг от друга символом ‘,’.

Любой раздел заголовка цикла может отсутствовать. Раздел Инициализации, например, может отсутствовать, когда начальные значения параметров цикла устанавливаются вне цикла, перед его началом. Модификация значений параметров цикла может осуществляться внутри тела цикла, а не в его заголовке. При отсутствии Условия продолжения выполнения цикла, цикл становится бесконечным и для выхода из него придется использовать инструкцию break. Однако, какой бы из разделов ни отсутствовал, соответствующие разделительные символы ‘;’ в заголовке цикла должны обязательно присутствовать:

 

#include <conio.h>

……..

cout << “Для продолжения работы нажмите любую клавишу…” << endl;

for ( ; ! kbhit(); );

……..

В этом примере цикл, в заголовке которого отсутствуют разделы Инициализации и Модификации, используется для приостановки выполнения программы до нажатия на клавиатуре любой клавиши (функция kbhit() возвращает значение false, если на клавиатуре не нажата никакая клавиша, и значение true, если клавиша была нажата – для использования этой функции необходимо включить заголовочный файл conio.h).

Замечание. Приостановку работы программы значительно проще (без использования циклов) можно выполнить с помощью функции getch(), которая ожидает нажатия клавиши на клавиатуре и возвращает символ этой клавиши без отображения этого символа на экране (необходим заголовочный файл conio.h):

 

#include <conio.h>

……..

cout << “Для продолжения работы нажмите любую клавишу…” << endl;

getch();

……..

 

Принудительный выход из цикла for осуществляется с помощью инструкции break, а принудительный переход к следующей итерации (шагу цикла) – с помощью инструкции continue.

Тела циклов могут содержать любые инструкции языка C++, в том числе и другие циклы. Подобные конструкции называются вложенными циклами. Использование вложенных циклов является весьма распространенным приемом программирования при решении очень многих задач.