Может кто-нибудь объяснить цель использования двух разных типов циклов while? Я новичок в программировании. Также предоставьте примеры ситуаций с правильным циклом while, если это возможно.
Я понимаю, как использовать цикл while. Вот что я сделал:
bool myBool = true;
int i = 0;
while (myBool) {
if (i > 10) {
myBool = false;
}
i = i + 1;
}
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;
}
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);
выполнится один раз.
Самое важное различие между 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
Поток:
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;
}
Простой ответ: цикл 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;
}
Разница между while и do-while заключается в том, что в
while (<condition>)
{
//statements
}
мы можем контролировать, вводить ли цикл, используя условие теста.
Тогда как в
do
{
//statements
} while (<condition>);
код должен войти в цикл хотя бы один раз, прежде чем он сможет выйти, используя условие.
Поэтому, если мы хотим войти в цикл хотя бы один раз, мы должны использовать do-while, тогда как, если мы хотим проверить и решить, входить в цикл или нет, мы должны использовать while.
Чтобы четко ответить на ваш первый вопрос:
Почему в C ++ есть разные циклы? -> Наследие. Другие языки (в частности, C
) до C++
была эта особенность, так C++
решил иметь это.
Почему на других языках это было? -> Это становится грязным, но хорошее объяснение состоит в том, что в ранних языках часто не было оптимизирующих компиляторов, поэтому ваш код отображался прямо в машинный код. Предоставление различных синтаксисов цикла позволило программистам писать структурированный код, который все еще генерирует хороший машинный код для своего конкретного случая.
На практике редко можно увидеть истинное do {} while ()
петля. Это может быть потому, что for
(или на основе диапазона for
) а также while () {}
имеют строго большие возможности, чем do {} while ()
: Безусловная итерация первого цикла возможна для каждого цикла, но обратное неверно. В очень распространенном случае итерации (возможно, пустой) последовательности, имеющей гарантированное выполнение тела цикла, например do {} while ()
на самом деле не так.
Существует множество ответов с примерами и пояснениями к циклам, поэтому я не буду повторять это здесь. Добавлю хоть что то самое что я лично видел do {} while ()
по иронии судьбы, используется не для зацикливания, а для этот.
Цикл do-while выполняет задачу перед условием в while (). Это для ситуаций, когда вы пытаетесь запрашивать одно и то же для каждого неправильного действия (т. Е. Аутентификации пользователя, неправильного входа в меню). С другой стороны, простой цикл while выполняется до тех пор, пока условие не станет истинным (Примечание. В большинстве случаев люди используют циклы for вместо while для определения счетчика, инициализации, задания условия и увеличения / уменьшения — все в одной строке).