Циклы. Операторы цикла do while
Do While
Часто, при программировании задач, нужно, чтобы одна и та же последовательность команд выполнялась несколько раз. Такой процесс называется циклическим. Алгоритм, в котором определенная последовательность команд повторяется несколько раз с новыми входными данными называется циклическим.
Для реализации циклического процесса, в языках программирования применяются циклы. Язык программирования C/C++ имеет в наличии удобные для работы операторы цикла.
Схема выполнения оператора do while
:
- Выполняется тело цикла (которое может быть составным оператором).
- Вычисляется выражение.
- Если выражение ложно, то выполнение оператора
do while
заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполнение оператора продолжается с пункта 1.
Использовать цикл do while
лучше в тех случаях, когда должна быть выполнена хотя бы одна итерация, либо когда инициализация объектов, участвующих в проверке условия, происходит внутри тела цикла.
Тело цикла выполняется до тех пор, пока выражение, проверяющее Условие, не станет ложным, то есть тело цикла с постусловием выполнится хотя бы один раз.
В трактовке условия цикла с постусловием в разных языках есть различия. В Паскале и языках, произошедших от него, условие такого цикла трактуется как условие выхода (цикл завершается, когда условие истинно, в русской терминологии такие циклы называют ещё «цикл до»), а в Си и его потомках — как условие продолжения (цикл завершается, когда условие ложно, такие циклы иногда называют «цикл пока»).
Пример
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <iostream> int main() { int choice; do { std::cout << "Please make a selection: \n"; std::cout << "1) Addition\n"; std::cout << "2) Subtraction\n"; std::cout << "3) Multiplication\n"; std::cout << "4) Division\n"; std::cin >> choice; } while (choice != 1 && choice != 2 && choice != 3 && choice != 4); std::cout << "You selected option #" << choice << "\n"; return 0; } |
Интересно, что переменная
choice
должна быть объявлена вне блоков do while
. Почему так?
Если бы переменная choice
была объявлена внутри блока do, то она была бы уничтожена при завершении этого блока ещё до проверки условия while
. Но нам нужна переменная, которая будет использоваться в условии while
, следовательно, переменная choice
должна быть объявлена вне блока do
.
В целом, использовать do while
вместо while
, когда нужно, чтобы цикл выполнился хотя бы один раз является хорошей практикой.