Цикл do while в C++


Цикл do while отличается от цикла while тем, что в do while сначала выполняется тело цикла, а затем проверяется условие продолжения цикла. Из-за такой особенности do while называют циклом с постусловием. Таким образом, если условие do while заведомо ложное, то хотя бы один раз блок операторов в теле цикла do while выполнится. В итоге do while отличается от цикла while структурой. Если в while сначала выполняется проверка условия продолжения цикла, и если условие истинно, то только тогда выполняется тело цикла. Цикл do while работает с точностью до наоборот, сначала выполняется тело цикла, а потом проверяется условие, вот почему тело цикла do while, хотя бы раз, выполнится.

1
2
3
4
5
6
// форма записи оператора цикла do while:
do // начало цикла do while
{
  /*блок операторов*/;
}
while (/*условие выполнения цикла*/); // конец цикла do while

В начале цикла do while пишется зарезервированное слово do, после идут фигурные скобочки, которые можно опускать, в случае использования одного оператора в теле цикла do while. После закрывающей фигурной скобочки, обозначающей конец тела цикла do while, стоит условие цикла do while, после которого обязательно нужно ставить точку с запятой. Рассмотрим программу с циклом do while, которая выполняет некоторые транзакции с денежным счётом в банке.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 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.


balance = 8
removal = 1
balance = 7
removal = 1
balance = 6
removal = 1
balance = 5
removal = 2
balance = 3
removal = 1
balance = 2
removal = 2
Для продолжения нажмите любую клавишу . . .


Печать 1 Цикл do while в C++

Сначала показан остаток, а затем снятие суммы, после чего опять идёт остаток и так до тех пор, пока на счету не окажется денег. Последней выводимой строкой оказалась строка со снимаемой суммой, а потом цикл завершил свою работу. Хотя и не видно последнего остатка на счету, можно и так сказать, что он равен 0.

Вспомним программу «Угадай число», из раздела: Цикл while в C++. В этой задаче правильней было бы использовать цикл do while, код уменьшится на две строки.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// ugadai2.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, они друг друга дополняют.

Для закрепления материала, разработаем ещё одну программу, которая вычисляет сумму чисел в заданном интервале.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 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).


Enter the first limit: -6
Enter the second limit: 10
sum = 34
Для продолжения нажмите любую клавишу . . .


Печать 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. Таким образом, циклически выполняется действие суммирования всех целых чисел из, указанного пользователем, интервала.

Похожие новости

Комментариев 0

Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.