Довольно часто нам приходится писать программы с повторением каких-либо определённых операций. Например, возведение в степень. Как нам известно, возведение любого числа в натуральную степень делается посредством многократного умножения числа на само себя. Или же факториал - умножение всех чисел от 1 до n. Без циклов тут не обойтись.
Начнём с самого простого цикла: "пока условие истинно, выполнять некие действия; как только оно стало ложным - выйти из цикла». А описывается этот цикл так: 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;
}
Обратите внимание, что тип int почти всегда 4-х битный, поэтому максимальное значение в этом типе - 2^24. Для получения результата до 2^64 можно воспользоваться типом unsigned long long.
Попробуйте сами написать код для вычисления факториала числа.
Название цикла говорит само за себя: "Делать, пока". То есть сначала выполняется оператор, а потом уже проверяется условие. Он очень похож на while, но с некой особенностью. Цикл while может так и не выполняться (например, условие всегда ложное), а цикл do while обязательно выполняться хотя бы один раз. Лучше это рассмотреть на конкретном примере:
#include <iostream>
using namespace std;
int main() {
while (false) {
cout << "1\n";
}
do {
cout << "2\n";
} while (false);
}
Данный цикл является самым мощным циклом из всех остальных. В данном цикле присутствуют всего три блока: блок инициализации, блок условия и блок изменения переменной. В первом блоке мы придаем начальные значения переменным и, если надо, объявляем их как новые. Во втором блоке располагается условие выхода из цикла, как в 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;
}
Как видно из примера, код стал намного проще и компактнее.
В 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;
}
Оператор continue используется реже. Если программа встретится с этим оператором, она вернётся к началу цикла. При этом все инструкции, которые будут размещены в цикле после continue, будут пропускаться. Следующий код наглядно демонстрирует применение этого оператора.
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n;
while (true) {
cin >> n;
if (n < 0) continue;
cout << sqrt(n);
}
}
Обратите внимание, что функция sqrt() находится в библиотеке cmath. Поэтому перед её использованием стоит подключить нужную библиотеку.