Разница в циклах while и do-while

Может кто-нибудь объяснить цель использования двух разных типов циклов while? Я новичок в программировании. Также предоставьте примеры ситуаций с правильным циклом while, если это возможно.

Я понимаю, как использовать цикл while. Вот что я сделал:

bool myBool = true;
int i = 0;

while (myBool) {
if (i > 10) {
myBool = false;
}
i = i + 1;
}

-3

Решение

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

#include <stdio.h>

int main () {int c = 50;

/* The do will be executed */
do {
printf("value of c: %d\n", c);
c = c + 1;
}while( c < 20 );//It will depend on the condition
printf("any string");
return 0;
}

Вот блок-схема do while петля
введите описание изображения здесь

4

Другие решения

while цикл будет выполняться только тогда, когда boolean состояние true,

    while (true) {
// INSERT CODE HERE
std::cout << "boolean condition is true - inside my while loop";
}

do while проверять boolean условие после того, как цикл выполняется один раз.

    do {
// INSERT CODE HERE
std::cout << "inside my while loop regardless of boolean condition";
} while (true);

Явно: do while цикл гарантированно выполнится хотя бы один раз, тогда как while цикл не гарантированно выполняется вообще.

Так же,

while (false) {
// INSERT CODE HERE
std::cout << "this will never execute";
}

никогда не выполнит и

do {
// INSERT CODE HERE
std::cout << "this will execute only once";
} while (false);

выполнится один раз.

9

основы

Самое важное различие между while а также do-while это в do-Whileблок кода выполняется как минимум один раз; то есть do-while цикл запускается хотя бы один раз, хотя данное условие ложно. Это означает, что while является Вход контролируемый а также do-while является Контролируемый выход.

Чтобы выразить это по-другому:

  • while— ваше состояние находится в начале блока цикла и делает
    возможно никогда не войти в петлю.
  • do while— ваше состояние находится в конце блока цикла и делает
    Обязательно ввести цикл хотя бы один раз.

Посмотреть на себя:

используя пока:

 int n=1;
while(n<1)
std::cout << "This does not get printed" << endl;

используя do-while:

int n=1;
do
std::cout << "This one gets printed" << endl;
while(n<1);

Мера производительности

do-while Лучше, если компилятор не компетентен в оптимизации. do-while имеет только один условный переход, в отличие от for а также while которые имеют условный переход и безусловный переход. Для процессоров, которые конвейерны и не предсказывают переходы, это может существенно повлиять на производительность узкого цикла.

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


Синтаксис

За while

while(condition is true)
{
something
}

За do=while

do
{
something
}while(condition is true)

Рабочий пример

while петля

#include <iostream>

int main()
{
int number, i = 1, factorial = 1;

std::cout << "Enter a positive integer: ";
std::cin >> number;

while ( i <= number) {
factorial *= i;      //factorial = factorial * i;
++i;
}

std::cout<<"Factorial of "<< number <<" = "<< factorial;
return 0;
}

Выход:

Введите положительное целое число: 4
Факториал 4 = 24

Поток:

  • Первоначально, я = 1, тестовое выражение я <= число верно и факториально
    становится 1.
  • Переменная i обновлена ​​до 2, тестовое выражение истинно, факториал
    становится 2.
  • Переменная i обновлена ​​до 3, тестовое выражение истинно, факториал
    становится 6.
  • Переменная i обновлена ​​до 4, тестовое выражение истинно, факториал
    становится 24
  • Переменная i обновлена ​​до 5, тестовое выражение ложно и цикл while
    прекращено.

do-while петля

#include <iostream>

int main()
{
double number, sum = 0;

// loop body is executed at least once
do
{
std::cout << "Enter a number: ";
std::cin >> number;
sum += number;
}
while(number != 0.0);

std::cout << "Sum = " << sum;

return 0;
}
4

Простой ответ: цикл while будет выполняться, только если условие внутри оператора while истинно.
Цикл do while будет выполнен один раз, независимо от условия оператора while.

#include <iostream>
using namespace std;

int main(int argc, char *argv[]){
int i = 1;
while( i < 1){     // this loop will never execute as 1 is not smaller then 1
i++;            // if the loop was working we would get print 2 here
cout << i << endl;
}

cout << i << endl; // this one will print outside of loop value 1

do{
i++;            // increase i to 2
cout << i << endl;  // this will print 2
} while (i < 1);   // This loop will execute at least once and as the condition of 2 is not smaller then 1 it will exit after one execution
return 0;
}
2

Разница между while и do-while заключается в том, что в

while (<condition>)
{
//statements
}

мы можем контролировать, вводить ли цикл, используя условие теста.
Тогда как в

do
{
//statements
} while (<condition>);

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

2

Чтобы четко ответить на ваш первый вопрос:

  1. Почему в C ++ есть разные циклы? -> Наследие. Другие языки (в частности, C) до C++ была эта особенность, так C++ решил иметь это.

  2. Почему на других языках это было? -> Это становится грязным, но хорошее объяснение состоит в том, что в ранних языках часто не было оптимизирующих компиляторов, поэтому ваш код отображался прямо в машинный код. Предоставление различных синтаксисов цикла позволило программистам писать структурированный код, который все еще генерирует хороший машинный код для своего конкретного случая.


На практике редко можно увидеть истинное do {} while () петля. Это может быть потому, что for (или на основе диапазона for) а также while () {} имеют строго большие возможности, чем do {} while (): Безусловная итерация первого цикла возможна для каждого цикла, но обратное неверно. В очень распространенном случае итерации (возможно, пустой) последовательности, имеющей гарантированное выполнение тела цикла, например do {} while () на самом деле не так.

Существует множество ответов с примерами и пояснениями к циклам, поэтому я не буду повторять это здесь. Добавлю хоть что то самое что я лично видел do {} while () по иронии судьбы, используется не для зацикливания, а для этот.

1

Цикл do-while выполняет задачу перед условием в while (). Это для ситуаций, когда вы пытаетесь запрашивать одно и то же для каждого неправильного действия (т. Е. Аутентификации пользователя, неправильного входа в меню). С другой стороны, простой цикл while выполняется до тех пор, пока условие не станет истинным (Примечание. В большинстве случаев люди используют циклы for вместо while для определения счетчика, инициализации, задания условия и увеличения / уменьшения — все в одной строке).

1
По вопросам рекламы [email protected]