C++. Операторы break и continue. Особенности применения. Примеры использования

Операторы break и continue. Особенности применения. Примеры использования


Содержание


Поиск на других ресурсах:




1. Особенности применения оператора break

В языке C++ существуют операторы break и continue, которые используются для управления ходом выполнения циклического процесса. Эти операторы могут быть применены только в теле цикла.

Оператор break предназначен для искусственного прерывания выполнения:

  • последовательности итераций в операторах цикла for, while или do-while;
  • последовательности операторов в операторе выбора switch.

Чаще всего оператор break используется в сочетании с оператором условия if. В этом случае, происходит проверка некоторого условия, и в случае успеха вызывается оператор break.

Пример. В нижеследующем примере при достижении переменной i значения 3 происходит безусловный выход из цикла путем вызова оператора break. Продемонстрирован вызов break для всех видов операторов.

#include <iostream>
using namespace std;

void main()
{
  int i, j;

  // Оператор break

  // 1. Цикл for
  cout << "Loop for:" << endl;
  for (i = 0; i < 5; i++) // цикл по i
  {
    if (i == 3)
      break; // выход из цикла for

    // этот оператор выполняется
    cout << "i = " << i << endl;
  }

  // 2. Цикл while
  cout << "Loop while:" << endl;
  i = 0;
  while (i < 5)
  {
    if (i == 3)
      break; // выход из цикла while
    cout << "i = " << i << endl;
    i++;
  }

  // 3. Цикл do-while
  cout << "Loop do-while:" << endl;
  i = 0;
  do
  {
    if (i == 3)
      break; // выход из цикла do-while
    cout << "i = " << i << endl;
    i++;
  } while (i < 5);
}

Результат выполнения программы

Loop for:
i = 0
i = 1
i = 2
Loop while:
i = 0
i = 1
i = 2
Loop do-while:
i = 0
i = 1
i = 2

 

2. Особенности применения оператора continue

Оператор continue предназначен для перехода к выполнению следующей итерации цикла. Если в теле цикла встречается оператор continue, то:

  • выполнение текущей итерации останавливается;
  • происходит переход к следующей итерации цикла.

Оператор continue может быть применен во всех видах циклов: for, while, do-while.

В большинстве случаев вызов оператора continue осуществляется при выполнении некоторого условия в операторе if.

Пример. В примере демонстрируется использование оператора continue для всех видов циклов C++. В задаче, при достижении переменной i значения 3 происходит переход к следующей итерации с помощью инструкции continue.

#include <iostream>
using namespace std;

void main()
{
  int i, j;

  // Оператор continue

  // 1. Цикл for
  cout << "Loop for:" << endl;
  for (i = 0; i < 5; i++) // цикл по i
  {
    if (i == 3)
      continue; // переход к следующей итерации

    // этот оператор выполняется
    cout << "i = " << i << endl;
  }

  // 2. Цикл while
  cout << "Loop while:" << endl;
  i = 0;
  while (i < 5)
  {
    if (i == 3)
    {
      i++; // увеличить счетчик - обязательно
      continue; // переход к следующей итерации
    }

    cout << "i = " << i << endl;
    i++;
  }

  // 3. Цикл do-while
  cout << "Loop do-while:" << endl;
  i = 0;
  do
  {
    if (i == 3)
    {
      i++; // увеличить счетчик - обязательно
      continue; // переход к следующей итерации
    }
    cout << "i = " << i << endl;
    i++;
  } while (i < 5);
}

Результат работы программы

Loop for:
i = 0
i = 1
i = 2
i = 4
Loop while:
i = 0
i = 1
i = 2
i = 4
Loop do-while:
i = 0
i = 1
i = 2
i = 4

 

3. Оператор break. Примеры решения задач с использованием циклов
3.1. Вычисление суммы чисел, введенных с клавиатуры. Цикл for

Пользователь вводит числа с клавиатуры. Окончание ввода – число 0. Вычислить сумму чисел, которые введет пользователь. В программе использовать операторы for и break.

Решение задачи на языке C++ следующее

#include <iostream>
using namespace std;

void main()
{
  // Вычисление суммы чисел, вводимых с клавиатури
  int number, summ = 0;

  cout << "Enter numbers (0-exit):" << ::endl;

  // вечный цикл
  for (;;)
  {
    // ввод числа
    cout << "number = ";
    cin >> number;

    // если ввести 0, то выход из цикла
    if (number == 0)
      break;

    // увеличить сумму на величину числа
    summ += number;
  }

  // отобразить сумму
  cout << "summ = " << summ << endl;
}

 

3.2. Вычисление значения числа π по формуле

Вычислить значение числа π, используя формулу с заданной точностью.

#include <iostream>
using namespace std;

void main()
{
  // Вычислить значение числа Пи с заданной точностью

  // 1. Объявить внутренние переменные
  int n; // количество знаков после запятой
  double eps; // точность
  int i, k;
  double pi; // искомое число Pi
  double t;

  // 2. Ввести количество знаков после запятой
  cout << "Enter the number of decimal places: n = ";
  cin >> n;

  // 3. Формирование точности вычислений
  eps = 1;
  i = 0;
  while (i < n)
  {
    eps /= 10; // разделить на 10 n раз
    i++;
  }

  // 4. Цикл вычисления числа Pi
  pi = 1;
  i = 1;
  k = 1;
  t = 0;

  while (1) // вечный цикл
  {
    t = pi;
    i = i + 2;
    k = -k;
    pi = pi + k * 1.0 / i;

    // проверка, достигнута ли желаемая точность
    if (fabs(pi - t) < eps)
      break; // если точность достигнута, выйти из цикла
  }

  // 5. Вывести результат
  pi = 4 * pi;
  cout << "pi = " << pi << endl;
  cout << "i = " << i << endl;
}

В примере для выхода из цикла while используется оператор break.

 

4. Оператор continue. Примеры решения задач
4.1. Вычисление суммы элементов последовательности

Дана последовательность вещественных чисел, которая завершается числом 0. Вычислить сумму элементов последовательности, которые имеют значения в пределах [-5; 5].

Решение задачи на C++ следующее

#include <iostream>
using namespace std;

void main()
{
  // Вычисление суммы чисел, находящихся в указанных пределах
  // конец ввода - значение 0
  const double MIN = -5.0; // нижний предел
  const double MAX = 5.0; // верхний предел
  double number; // вводимое число
  double summ = 0; // указанная сумма

  cout << "Enter numbers (exit - 0):" << ::endl;

  // цикл do-while
  do
  {
    // ввод числа
    cout << "=> ";
    cin >> number;

    // если число за допустимыми пределами
    if ((number < MIN) || (number > MAX))
      continue; // то перейти к следующей итерации цикла

    // вычислить сумму, если введено коректное число
    summ += number;

  } while (number != 0); // числа вводятся до числа 0

  // отобразить сумму
  cout << "summ = " << summ << endl;
}

 

4.2. Вычисление суммы элементов массива в соответствии с условием

Вычислить сумму элементов массива, лежащих на парных позициях. Поскольку в C++ элементы массива нумеруются с 0, то парными будем считать позиции 1, 3, 5, и т.д.

Решение задачи с использованием оператора continue следующее.

#include <iostream>
using namespace std;

void main()
{
  // Вычислить сумму элементов массива, лежащих на парных позициях

  // 1. Объявить внутренние переменные
  const int MAX = 10; // максимально-возможное количество элементов в массиве
  double A[MAX]; // указанный массив
  int n; // количество элементов в массиве
  double summ; // искомая сумма

  // 2. Ввести количество элементов в массиве
  cout << "Enter number of items in the array (1..10): ";
  cin >> n;

  // 3. Проверка, корректно ли введены данные
  if ((n < 1) || (n > MAX)) return;

  // 4. Ввод массива
  cout << "Enter the array:" << endl;
  for (int i = 0; i < n; i++)
  {
    cout << "A[" << i << "] = ";
    cin >> A[i];
  }

  // 5. Вычисление суммы
  summ = 0;
  for (int i = 0; i < n; i++)
  {
    // проверка, позиции на парность
    if (i % 2 == 0)
      continue; // если позиция парная, то перейти к следующей итерации
    summ = summ + A[i]; // елси позиция непарная, вычислить сумму
  }

  // 5. Вывести сумму
  cout << "summ = " << summ << endl;
}

 

5. Как работает оператор break в случае вложенных циклов? Пример

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

#include <iostream>
using namespace std;

void main()
{
  int i, j;

  // Если циклы вложенные
  for (i = 0; i < 5; i++) // цикл по i
  {
    for (j = 0; j < 5; j++) // цикл по j
    {
      if (j == 0) break; // виход из цикла по j
        cout << "j = " << j << endl;
    }

    // этот оператор выполняется
    cout << "i = " << i << endl;
  }
}

Результат выполнения программы

i = 0
i = 1
i = 2
i = 3
i = 4

 

6. Можно ли использовать операторы break и continue в операторе if?

Нет, нельзя. Однако, оператор break может еще использоваться как составная оператора switch.

Если попробовать использовать оператор break в конструкции if, то компилятор сгенерирует ошибку со следующим сообщением

a break statement may only be used within a loop or switch

Если попробовать вызвать оператор continue в конструкции if, то компилятор сгенерирует ошибку со следующим сообщением

a continue statement may only be used within a loop

 


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