Основи програмування на С ++ для початківців

Цикли while і do while в C++

цикл while и цикл do whileМы с вами уже рассмотрели одну из конструкций повторения в языке C – цикл for. В этой статье будут рассмотрены еще два цикла: while і do while. Они очень похожи между собой. їх синтаксис:

цикл while в C++
Рис.1 – синтаксис while
цикл do while в C++
Рис.2 – синтаксис do while

Отличие состоит только в том, що при початку виконання циклуwhile, сразу происходит проверка условия. Если оно возвращает ложь (false), то тело цикла не выполнится ни разу. А при использовании do while, сразу выполнится оператор(-ы) в теле цикла, а потім буде перевірено умова в круглих дужках ( ) после ключевого слова while. И аналогично, при возврате false, цикл завершает работу, иначе – выполняется следующий шаг (итерация). То есть тело цикла do while виконається хоча б один раз, при будь-якому розкладі.

Поговорим о них в отдельности. Начнем с while. Как говорилось выше, чтобы выполнилось тело цикла, необходимо чтобы при проверке условия в круглых скобках ( ), была возвращена истина (true).

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

Це може бути або введене користувачем з клавіатури значення змінної, яка присутня в перевірочному умови циклу. Або це може бути збільшення або зменшення керуючоїзмінної, которая так же задействована в проверочном условии.

Розглянемо приклад зі зміною значення керуючої змінної в тілі циклу. Постановка задачи: пользователь хочет пополнить карточный счет через терминал. Он вводит сумму с клавиатуры. Предусмотреть в программе возможность изменения ошибочно введенной суммы.

керуюча зміннаexit объявляется и инициализируется единицей до цикла while – рядок 9. Тому при вході в цикл, перевірити умови while (exit == 1)  вернет true (докладніше про це можна почитати почитать здесь)  і програма перейде до виконання тіла циклу. Подобное условие часто записывают таким способом: while (exit). С таким условием программа работает, как и с предыдущим. Объясняется это тем, що будь-яке значення змінноїexitотличное от нуля будет восприниматься компилятором, як true. Тело цикла будет выполняться, пока пользователь не изменит значение этой переменной на 0. Тогда while (exit) буде рівнозначноwhile (0). То есть проверочное условие ложно. Такая запись встречается чаще, так как она более короткая, хотя и не настолько ясна, как та, что в примере. К этому просто надо привыкнуть.

У рядках 16 – 17 пользователю задается вопрос и предлагается сделать выбор:  cout << “Оплатить и выйти – нажмите 0. Изменить сумму – нажмите 1: “; То есть если он совершил ошибку при вводе суммы пополнения, у него есть возможность исправить её, нажав 1.

Як тільки користувач введе вірну суму і натисне 0 (что соответствует “Оплатить и выйти”), произойдет выход из цикла и программа продолжит работу. В итоге на экране покажется сообщение о сумме пополнения счета – строки 20 – 22.

Результат:

цикл while в C++

Эту же задачу можно решить применяя цикл do while. В этом случае, изначально значение переменной exit може бути яким завгодно. Цикл в любом случае выполнит тело и предложит сделать выбор. Смотрим:

Запустив программу, увидите, что несмотря на то, что переменная exit спочатку дорівнює 0,  тіло циклу do while выполнится. Это потому, что проверка условия производится ниже тела –  в строке 18.   Зверніть увагу на крапку з комою ;  після закриває круглої дужки.  для циклу do while она обязательна.

Сравнивая циклы forwhileіdo while   видно, что они похожи. Только в цикле for всё необходимое для его нормальной работы собрано в одной строке (объявление и инициализация управляющей переменной, проверочное условие, изменение управляющей переменной).

Тоді як в циклахwhile і do while управляющая переменная объявлена до цикла, а ее изменение происходит ниже в теле. Яку конструкцію повторення використовувати – решать вам. найчастіше циклиwhileі do while застосовуються тоді, когда неизвестно изначально, сколько будет повторений (как в нашем примере).  Варто ще пам'ятати, что в отличии от циклов whileіdo while , керуюча змінна циклуfor хоч я знаю за межами його тіла (то есть при выходе из цикла, она уничтожается).

Предлагаю так же обучающее видео на тему циклов в C . В нём рассмотрен и цикл for:

Вопросы оставляйте в комментариях. По можливості діліться статтею з друзями в соціальних мережах.  Задачи по теме уже есть!

14 думки про "Цикли while і do while в C++

  1. Я ось так вирішив перше завдання. А чи можна якось спростити цей код?

    #include
    using namespace std;

    int main()
    {
    setlocale(LC_ALL, “rus”);

    int amount = 0;
    int sum = 0;
    int number;

    do
    {
    cin >> number;
    сума + = число;
    кількість ++;

    } while (number != 0);
    cout << endl;
    amount–;
    cout << amount << endl;
    cout << sum << endl;
    cout << sum / amount<< endl;

    return 0;
    }

  2. #include
    #include
    using namespace std;// скорочення типу (cout<>)

    int main()
    {
    setlocale(LC_ALL, “rus”);// включення російської мови
    INT Summa = 0;
    int kol_vo = 0;
    int chislo = 0;
    int a ;

    while(a > 0)
    {

    cout <> a;
    chislo = chislo + a;
    summa = chislo + a;
    ++kol_vo;

    }
    kol_vo = kol_vo-1;
    cout << "колличество вводов:" << kol_vo << endl;
    cout << "Сумма введенных чисел:" << сума << endl;
    cout << "соеднее введеных чисел:" << summa / kol_vo << endl;

    Геч ();
    return 0;
    }

  3. хлопців, у мене програма зациклюється на місці
    (Будь ласка, введіть тільки ”у\или \n\”)
    Не підкажете, у чому моя помилка?

    1. Вибачте, код скопіювали не зовсім вірно.

      1. І знову, кхм.
        #include
        using namespace std;

        int main()
        {
        setlocale (LC_ALL,”rus”);
        INT число = 0;
        голець відповідь = «у»;

        while (відповісти == «у»)
        {
        cout <> number;
        cout << number << " в квадраті одно " << number * number << endl;
        cout <> answer;

        if (!(відповідь = «у») || (відповідь = «п»))
        {
        while ((answer != «А») || (answer != «П»))
        {
        cout <> answer;
        }
        }
        }
        return 0;
        }

  4. як написати програму
    дані N чисел з них потрібно знайти скільки негативних чисел, скільки позитивних чисел і скільки нулів

      1. редактор сожрал строку … але п ​​+ = … , за аналогією, має бути зрозуміло.

  5. Думаю варто уточнити, що цикл for погано спрацює, якщо крок зміни керуючої змінної – не ціла кількість, або якщо керуюча змінна – дробове число.

залишити коментар

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *