Цикл do while
отличается от цикла while тем, что в do while
сначала выполняется тело цикла, а затем проверяется условие продолжения цикла. Из-за такой особенности do while
называют циклом с постусловием. Таким образом, если условие do while
заведомо ложное, то хотя бы один раз блок операторов в теле цикла do while
выполнится. В итоге do while
отличается от цикла while
структурой. Если в while
сначала выполняется проверка условия продолжения цикла, и если условие истинно, то только тогда выполняется тело цикла. Цикл do while
работает с точностью до наоборот, сначала выполняется тело цикла, а потом проверяется условие, вот почему тело цикла do while
, хотя бы раз, выполнится.
// форма записи оператора цикла do while: do // начало цикла do while { /*блок операторов*/; } while (/*условие выполнения цикла*/); // конец цикла do while
В начале цикла do while
пишется зарезервированное слово do
, после идут фигурные скобочки, которые можно опускать, в случае использования одного оператора в теле цикла do while
. После закрывающей фигурной скобочки, обозначающей конец тела цикла do while
, стоит условие цикла do while
, после которого обязательно нужно ставить точку с запятой. Рассмотрим программу с циклом do while
, которая выполняет некоторые транзакции с денежным счётом в банке.
// do_while.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include <iostream> #include <ctime> using namespace std; int main(int argc, char* argv[]) { srand(time(0)); int balance = 8; // баланс do // начало цикла do while { cout << "balance = " << balance << endl; // показать баланс int removal = rand() % 3; // переменная, для хранения вычитаемого значения cout << "removal = " << removal << endl; // показать вычитаемое значение balance -= removal; // управление условием } while ( balance > 0 ); // конец цикла do while system("pause"); return 0; }
В строке 11 объявлена переменная balance
, она отвечает за остаток денежных средств на счету. С 12-й по 19-ю строки записан цикл do while. В цикле do while выполняются все транзакции со счётом balance
, а именно — перевод денежных средств на какой-то другой счёт, строка 17. Строка 14 показывает остаток денежных средств на счету balance
. В строке 15 объявлена переменная, в которой хранится вычитаемое значение, причём это значение генерируется случайно в интервале [0;2]. Переменная removal
один раз объявляется в теле цикла do while
, и каждый раз при повторении цикла эта переменная не переопределяется. А вот её значение меняется, в зависимости от того, какое число сгенерировалось. В строке 19 записано условие цикла do while
, как только условие станет ложным, программа передаст управление следующему оператору, после цикла do while
, строка 20. Результат работы программы показан на рисунке 1.
Рисунок 1 Цикл do while в C++
Сначала показан остаток, а затем снятие суммы, после чего опять идёт остаток и так до тех пор, пока на счету не окажется денег. Последней выводимой строкой оказалась строка со снимаемой суммой, а потом цикл завершил свою работу. Хотя и не видно последнего остатка на счету, можно и так сказать, что он равен 0.
Вспомним программу «Угадай число», из раздела: Цикл while в C++. В этой задаче правильней было бы использовать цикл do while
, код уменьшится на две строки.
// ygadai2.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include <iostream> #include <ctime> using namespace std; int main(int argc, char* argv[]) { srand( time( 0 ) ); int unknown_number = 1 + rand() % 10; // загадываемое число int enter_number; // переменная для хранения введённого числа do { cout << "Enter unknown number [1:10] : "; cin >> enter_number; // отгадываем } while ( enter_number != unknown_number ); cout << "You win!!!\n"; system("pause"); return 0; }
Так как while
— цикл с предусловием, то нам необходимо было сначала считать число перед началом while
, а потом уже выполнять проверку продолжения цикла while
. В случае с do while
нам не нужно считывать число до начала цикла, так как проверка условия в do while
идет в конце цикла. В зависимости от ситуации, используется цикл while
или do while
, они друг друга дополняют.
Для закрепления материала, разработаем ещё одну программу, которая вычисляет сумму чисел в заданном интервале.
// dowhile.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include <iostream> using namespace std; int main(int argc, char* argv[]) { cout << "Enter the first limit: "; // начальное значение из интервала int first_limit; cin >> first_limit; cout << "Enter the second limit: "; // конечное значение из интервала int second_limit; cin >> second_limit; int sum = 0, count = first_limit; do { sum += count; // наращивание суммы count++; // инкремент начального значения из задаваемого интервала } while (count <= second_limit); // конец цикла do while cout << "sum = " << sum << endl; // печать суммы system("pause"); return 0; }
После запуска программы необходимо ввести пределы интервала, первый и второй. После этого начинает работать цикл do while
, строка 13. переменная sum
предназначена для хранения накапливаемой суммы, строка 15. В строке 16 инкрементируется начальное значение предела, после каждого повторения цикла. Результат работы программы (см. Рисунок 2).
Рисунок 2 Цикл do while в C++
Интервал указан от -6 до 10 включительно, [-6;10]. Программа суммирует все целые числа из заданного интервала. Сумма формируется так: -6 -5 -4 -3 -2 -1 + 0 +1 +2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 34. Таким образом, циклически выполняется действие суммирования всех целых чисел из, указанного пользователем, интервала.
Комментарии
npavelFax
Официальное трудоустройство, работа в интернете.