Новая версия сайта находится на стадии beta-тестирования

Урок #5

Довольно часто нам приходится писать программы с повторением каких-либо определённых операций. Например, возведение в степень. Как нам известно, возведение любого числа в натуральную степень делается посредством многократного умножения числа на само себя. Или же факториал - умножение всех чисел от 1 до n. Без циклов тут не обойтись.

Цикл while

Начнём с самого простого цикла: "пока условие истинно, выполнять некие действия; как только оно стало ложным - выйти из цикла». А описывается этот цикл так: while (условие) {оператор}

Как мы видим, все предельно просто. Есть единственное «но»: условие и оператор должны быть такими, что бы результат условия мог стать ложным. В ином случае цикл никогда не прекратится.

Простой пример программы с циклом, которая вычисляет 2 в заданной пользователем степени:

#include <iostream>
using namespace std;
int main() {
    int n, res = 1, i = 0;
    cin >> n;
    while (i < n) {
        res *= 2;
        i++;
    }
    cout << res << endl;
}
5
32
Для продолжения нажмите любую клавишу...

Обратите внимание, что тип int почти всегда 4-х битный, поэтому максимальное значение в этом типе - 2^24. Для получения результата до 2^64 можно воспользоваться типом unsigned long long.

Попробуйте сами написать код для вычисления факториала числа.

Цикл do while

Название цикла говорит само за себя: "Делать, пока". То есть сначала выполняется оператор, а потом уже проверяется условие. Он очень похож на while, но с некой особенностью. Цикл while может так и не выполняться (например, условие всегда ложное), а цикл do while обязательно выполняться хотя бы один раз. Лучше это рассмотреть на конкретном примере:

#include <iostream>
using namespace std;
int main() {
    while (false) {
        cout << "1\n";
    }

    do {
        cout << "2\n";
    } while (false);
}
2
Для продолжения нажмите любую клавишу...

Самый крутой цикл: for

Данный цикл является самым мощным циклом из всех остальных. В данном цикле присутствуют всего три блока: блок инициализации, блок условия и блок изменения переменной. В первом блоке мы придаем начальные значения переменным и, если надо, объявляем их как новые. Во втором блоке располагается условие выхода из цикла, как в while. В третьем блоке изменяется значение переменной цикла.

Вы уже написали вычисление факториала числа на цикле while. Давайте же перепишем программу с использованием цикла for.

#include <iostream>
using namespace std;
int main() {
    int n, res = 1;
    cin >> n;
    for (int i = 2; i <= n; i++)
        res *= i;
    cout << res << endl;
}
5
120
Для продолжения нажмите любую клавишу...

Как видно из примера, код стал намного проще и компактнее.

Специальные операторы управления циклом

В C++ присутствуют целых два специальных оператора управления циклом. Это break и continue. Бывает, что выполнение цикла нужно остановить прямо во время его выполнения. Например, будем бесконечно вводить натуральные числа и считать их сумму. Как только будет введено отрицательное число - закончить ввод и вывести результат в консоль. Для этого нам понадобится оператор break. Он безжалостно и бесцеремонно прекращает работу цикла. Данная программа написана ниже:

#include <iostream>
using namespace std;
int main() {
    int n, res = 0;
    while (true) {
        cin >> n;
        if (n >= 0)
            res += n;
        else break;
    }
    cout << res << endl;
}
2
1
6
-1
9
Для продолжения нажмите любую клавишу...

Оператор continue используется реже. Если программа встретится с этим оператором, она вернётся к началу цикла. При этом все инструкции, которые будут размещены в цикле после continue, будут пропускаться. Следующий код наглядно демонстрирует применение этого оператора.

#include <iostream>
#include <cmath>
using namespace std;
int main() {
    int n;
    while (true) {
        cin >> n;
        if (n < 0) continue;
        cout << sqrt(n);
    }
}
4
2
9
3
81
9
-1
Для продолжения нажмите любую клавишу...

Обратите внимание, что функция sqrt() находится в библиотеке cmath. Поэтому перед её использованием стоит подключить нужную библиотеку.

Возможные вопросы по теме:

Вопросов еще нет

Добавляйте свои вопросы в комментарии. Лучшие попадут в статью :)

Урок #4 Урок #6