Циклы. Операторы цикла for, while, do…while

Циклы. Операторы цикла for, while, do…while


Содержание



1. Понятие цикла в языке программирования

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

Для реализации циклического процесса, в языках программирования применяются циклы. Язык программирования C/C++ имеет в наличии удобные для работы операторы цикла.

2. Виды операторов цикла в языке C++

В языке C++ существует 3 вида операторов цикла:

  • цикл for;
  • цикл while с предусловием;
  • цикл do…while с постусловием.

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

3. Цикл for. Общая форма оператора цикла for

В языке C++ цикл for может иметь очень широкую реализацию и применение. Цикл for еще называется циклом с параметром.

Общая форма оператора цикла for:

for (инициализация; выражение; прирост)
{
    // последовательность операторов
    // ...
}

где

  • инициализация – операция присваивания, в которой устанавливается начальное значение переменной цикла. Эта переменная есть счетчиком, который управляет работой цикла. Количество переменных, управляющих циклом for, может быть две и больше;
  • выражение – условное выражение, в котором проверяется значение переменной цикла. На этом этапе определяется дальнейшее выполнение цикла;
  • прирост – определяет, как будет изменяться значение переменной цикла после каждой итерации.

Цикл for выполняется до тех пор, пока значение выражение равно true. Как только значение выражение станет false, выполнение цикла прекращается и выполняется оператор, который следует за циклом for.

4. Примеры использования оператора цикла for

Пример 1. Найти сумму всех целых чисел от 100 до 300. Фрагмент кода, который решает данную задачу.

// сумма чисел от 100 до 300
int sum;
int i;

sum = 0;
for (i = 100; i<=300; i++)
    sum = sum + i;
// sum = 40200

Пример 2. Дано натуральное число n. Вычислить сумму:

Фрагмент кода, который решает данную задачу.

// s = 1 + 1/2 + 1/3 + ... + 1/n
int n;
float s = 0;
int i;

// ввод значения n
n = 4;
for (i = 1; i<=n; i++)
    s = s + 1.0/i;
// s = 2.08333

В данном примере, чтобы получить вещественное значение, вместо числа 1 (целый тип) вводится число 1.0 (вещественный тип). Операция деления

1.0/i

дает вещественный результат.

Пример 3. Вычислить сумму

Фрагмент кода, который решает данную задачу.

float s;
int i;

s = 0;
for (i=50; i>=1; i--)
    s = i + Math::Sqrt(s);
s = Math::Sqrt(s);
// s = 1.7579

В данном примере значение счетчика i в цикле for изменяется по убыванию. Это значение уменьшается на 1 в каждой итерации цикла. При решении подобных задач значение счетчика цикла должно изменяться от последнего к первому значению. В данном случае от 50 до 1.

В вычислениях использована функция Sqrt() из библиотеки Math.

5. Какие существуют варианты реализации цикла for?

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

В цикле for может отсутствовать любой из элементов заголовка цикла:

  • инициализация;
  • выражение;
  • прирост.

Пример оператора цикла for, в котором есть 2 управляющие переменные. Найти значения произведения:

D = (1 + cos(9)) · (2 + cos(8)) · … · (9 + cos(1))

Фрагмент кода, который решает данную задачу.

// D = (1 + cos(9))*(2 + cos(8))* ... *(9 + cos(1))
int i, j;
float d;

d = 1;
for (i = 1, j = 9; i<=9; i++, j--)
    d = d * (i + Math::Cos(j));

В вышеприведенном фрагменте кода в цикле for используются две переменные, которые изменяют свое значение (i, j).

6. Цикл while. Общая форма

Цикл while называется циклом с предусловием. Общая форма цикла while следующая:

while (выражение)
{
    // последовательность операторов
    // ...
}

где выражение – любое допустимое выражение в языке C++. Последовательность операторов выполняется до тех пор, пока условное выражение возвращает значение true. Как только выражение становится равным false, выполнение цикла while прекращается и управление передается следующему за циклом while оператору.

7. Примеры использования оператора цикла while

 Пример 1. Дано вещественное число a. Найти такое наименьшее n, при котором

Соображения. В начале значение суммы есть меньше чем значение a. При прохождении каждой итерации значение суммы постепенно увеличивается. В какой-то момент (при каком-то значении n) эта сумма станет выше значения a. Этот момент (значение n) нужно зафиксировать. Для вычисления n, удобно подходит цикл while.

Фрагмент кода, который решает данную задачу.

float a;
int n;
float sum;

// ввод значения a
a = 2.2;
n = 1;
sum = 1.0/n;

while (sum < a)
{
    n++;
    sum = sum + 1.0/n;
}
// n = 5; sum = 2.283334

Пример 2. Дано натуральное число. Определить количество цифр 3 в нем.

Фрагмент кода, который решает данную задачу.

// количество цифр 3 в числе
int n; // заданное натуральное число
int k; // количество цифр 3 в числе
int t, d; // дополнительные переменные

// ввод значения n
n = 12343;
t = n; // делаем копию из n
k = 0;
while (t>0)
{
    d = t % 10; // выделить последнюю цифру
    if (d == 3) k++;
    t = t / 10; // уменьшить разрядность числа
}
// k = 2

В данном примере, значение исходного числа будет делиться на 10 при каждой итерации. Таким образом, будет уменьшаться разрядность числа. На каждой итерации, с помощью операции % языка C++ берется остаток от деления на 10, то есть определяется последняя цифра числа. Если эта цифра равна 3, то счетчик k увеличивается на 1.

8. Общая форма оператора цикла do…while

Цикл do … while целесообразно использовать в случаях, когда итерацию нужно сделать хотя бы 1 раз. В отличие от циклов for и while, в цикле do…while условие проверяется при выходе из цикла (а не при входе в цикл). Цикл do…while еще называется циклом с постусловием.

Общая форма оператора цикла do…while:

do
{
    // последовательность операторов
    // ...
}
while (выражение);

где выражение – условное выражение, в котором проверяется значение переменной цикла. На этом этапе определяется дальнейшее выполнение цикла.

Фигурные скобки в этом цикле необязательны.

Цикл работает следующим образом. Сначала происходит выполнение тела цикла. Потом проверяется значение выражение (условное выражение). Если значение выражение есть истинным (true), выполняется снова тело цикла. Как только значение выражение станет false, выполнение цикла прекращается

9. Примеры использования оператора цикла do…while

Пример. Используя цикл do…while, найти значение суммы:

S = 1 + 3 + … + 99

Фрагмент кода, который решает данную задачу.

// s = 1 + 3 + ... + 99
int t;
int s;

s = 0;
t = 1;
do
{
    s = s + t;
    t = t + 2;
}
while (t<=99);

// s = 2500

10. Вложенные циклы. Примеры использования

Вложенные циклы могут быть использованы, например, при работе с двумерными (многомерными) массивами (обнуление массива, вычисление сумм, произведений и прочее).

Пример 1. Вычислить произведение

D = 1 · (1 + 2) · (1 + 2 + 3) · … · (1 + 2 + … + 9)

Фрагмент кода, который решает данную задачу.

// D = 1 * (1+2) * (1+2+3) * ... * (1+2+...+9)
float d; // результат - произведение
int i, j; // счетчики циклов
int s; // дополнительная переменная

d = 1;
for (i = 1; i<=9; i++)
{
    s = 0;
    for (j = 1; j<=i; j++)
        s = s + j;
    d = d * s;
}
// d = 2.571912E+09

В данном примере в цикле for со счетчиком i выполняется цикл for со счетчиком j.

Пример 2. Дан двумерный массив целых чисел размером 6×9. Записать во все элементы массива значение 5.

int M[6][9]; // двумерный массив целых чисел
int i, j;

for (i=0; i<6; i++)
    for (j=0; j<9; j++)
        M[i][j] = 5;

11. Что такое бесконечный цикл?

Бесконечный цикл – это цикл, который никогда не заканчивается.

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

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

Пример 1. Бесконечный цикл с оператором for:

for (; ;)
{
    // последовательность операторов
    // ...
}

Пример 2. Бесконечный цикл while.

int x;

x = 5;
while (x<10)
{
    // бесконечный цикл while, значение x не возрастает,
    // условие x<10 выполняется всегда, невозможно выйти из цикла
}

Вышеприведенный фрагмент кода, с логической точки зрения, есть ошибочным. Такой цикл выполняется без конца. Так как значение переменной x не возрастает. Это значит, что x всегда будет меньше 10.


Связанные темы