Оператор цикла с предусловием
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Оператор цикла с предусловием (while) реализует структурную схему ЦИКЛ_ПОКА и является наиболее общим по сравнению с другими конструкциями цикла, которые легко моделируются с помощью оператора цикла с предусловием и, вообще говоря, могут считаться несколько избыточными в языке, в основном служащими для удобства программирования.

Оператор цикла с предусловием выполняет повторяющиеся действия до тех пор, пока заданное условие истинно, и выглядит следующим образом:

while (условие входа в цикл)   оператор;

если тело цикла состоит из одного оператора или

 while (условие входа в цикл)  { оператор1;

                                                          оператор2;

                                                            …

                                                          оператор n;

                                                           }

если тело цикла состоит из нескольких операторов (составной оператор).

Если условие входа в цикл сразу ложно, ни один из операторов, входящих в тело цикла, не выполнится ни разу, то есть цикл будет полностью пропущен.

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

while (true) – заголовок, а в теле цикла ставят оператор принудительного выхода из тела цикла по выполнению какого-нибудь условия.

Пример

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

 

#include <iostream>

int main( )

{ int dig, sum = 0, cnt = 0, middle;

cout << “Введите число”;

cin >> dig;

cnt++;

sum = cnt;

while (dig != 0)

  { cout << “Введите число”;

      cin >> dig;

      cnt++;

      sum += dig;

   }

cnt--;

if (cnt != 0) { middle = sum / cnt;         // с точностью до целого

                   cout << “Среднее арифметическое = “ << middle << endl;

                       }

         else cout << “Последовательность пустая” << endl;  

return 0;

}

 

Оператор цикла с постусловием

Цикл с постусловием реализует алгоритмическую структуру ЦИКЛ_ДО. Синтаксис его следующий:

do {оператор; }

while ( условие продолжения цикла );

Или

do { оператор1;

      oператор2;

       …

      оператор n;

     }

while (условие продолжения цикла);

Действия в теле цикла выполняются до тех пор, пока условие продолжения цикла не станет ложным или равным нулю.

Например, оператор

do

{ cin >> r; }

while (r != 13);

Будет выполняться до тех пор, пока пользователь не наберет число 13.

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

Тело оператора цикла do while обязательно должно содержать действия, влияющие на условие продолжения цикла.

Пример

Вычислить квадратный корень вещественного аргумента x с заданной точностью ↋ (Eps) по итерационной формуле:

yn = (yn-1 + x / yn-1) / 2, где

yn-1 – предыдущее приближение к корню (в начале вычислений выбирается произвольно),

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

#include <iostream>

#include <cmatch>

 

int main( )

{ double x, Eps;                          // аргумент и точность

double yp, y = 0;                           // предыдущее и последующие приближение

cout << “Введите аргумент и точность”;

cin >> x >> Eps;

do

  { yp = y;

      y = (yp + x /yp) / 2;

   }

while (fabs(y – yp) > Eps);

cout << “корень из  “ << x << “равен ” << y <<endl;

return 0;

}

 

Оператор цикла с параметром

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

Синтаксис оператора:

for (выражение1; выражение2; выражение3) оператор;

в случае, если тело цикла состоит из одного оператора или

for (выражение1; выражение2; выражение3)

{ оператор1;

оператор2;

оператор n;

}

если тело цикла состоит из нескольких операторов (составной оператор).

Здесь выражение1 называется инициализирующим выражением и выполняется один раз перед тем, как будет произведен анализ выражения2. Выражение2 называется условием выполнения цикла. Выражение2 анализируется перед каждой итерацией цикла. Если выражение2 истинно (отлично от 0), то цикл продолжает свою работу, иначе прекращается. Выражение3 обычно служит для изменения параметров цикла, например, для приращения счетчика. На месте выражения1 и выражения3 могут быть записаны последовательности операторов через запятую. Эти последовательности операторов обязательно заканчиваются точкой с запятой.

Любая из частей оператора for может быть опущена (точки с запятой при этом надо оставить на своих местах!).

Например, оператор, вычисляющий сумму чисел от 1 до 100, выглядит следующим образом:

for (int i = 1, S = 0; i <= 100; i++)

S += i;

Пример

Найти все делители натурального числа (целого положительного).

 

#include <iostream>

int main( )

{ int num, half, div;

cout << “Введите число:”;

cin >> num;

for (half = num / 2, div = 2; div <= half; div++)

  if (!(num % div))

         cout << div << endl;

return 0;

}

 

Оператор for в языке С++ обладает очень большими возможностями.

1) Приращение счетчика может быть в порядке убывания.

for (i = 5, r = 1; i >= 1; i--)

r = r * y;

2) Приращение счетчика может быть отличным от единицы.

for (n = 5; n <= 61; n += 15)

    cout << n;

3) Счетчик может изменяться не только путем сложения и вычитания.

for (k = 100; k < 185; k *= 1.2)

  cout << k;

4) В качестве счетчика может использоваться выражение.

 for (k = 1; z < 200; z = 5 * k + 23)

cout << z;

5) Неполный список выражений в заголовке цикла.

for (p = 2; p <= 200;)

  p = p + n / k;

В этом случае приращение определяется в теле цикла.

6) Первое выражение в заголовке цикла может быть произвольным.

for (cout << “Вводите числа”; p <= 30;)

     cin >> p;

 

Операторы передачи управления

В С++ есть четыре оператора, изменяющих естественный порядок выполнения вычислений:

- оператор безусловного перехода goto;

- оператор выхода из цикла break;

- оператор перехода к следующей итерации цикла continue;

- оператор возврата из функции return.

 

Оператор goto

Оператор безусловного перехода имеет формат:

goto метка;

В теле той же функции должна присутствовать ровно одна конструкция вида:

метка: оператор;

Оператор передает правление на помеченный оператор.

Использование этого оператора оправдано в двух случаях: принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей; переход из нескольких мест функции в одно.

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

 

Оператор break

Оператор break служит для продолжения работы программы после принудительного окончания текущего цикла. Например,

for (; ;) { …

             if (выражение) break;

          }

Такой цикл for (его называют открытым) выполняется бесконечно, break передает управление на первый оператор после цикла.

 

Оператор continue

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

Пример

Найти сумму положительных элементов последовательности из 100 чисел.

 

#include <iostream>

int main( )

{ int а, s = 0;

for (i = 1; i <= 100; i++)

  { cout << “Введите число:”;

         cin >> a;

        if (a <=0 ) continue;

         s += a;

   }  

cout << “Сумма положительных элементов:” << s << endl;

return 0;

}

 

Оператор return

Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова. Этот оператор мы видим в конце главной функции main() любой программы на языке С++ и увидим позже, когда будем писать в программах пользовательские функции. Синтаксис оператора:

return выражение;

Выражение должно иметь скалярный тип.

 

Порядок выполнения работы

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

 

Контрольные вопросы

1. Какова структура оператора цикла с параметром? Как выполняется цикл с параметром?

2. Могут ли параметр цикла, его начальное и конечное значения в цикле с параметром в языке С++ быть разных типов? Обоснуйте ответ.

3. Может ли цикл быть вложен внутрь другого? Если да, то какова глубина этой вложенности?

4. Для цикла с параметром напишите его полный эквивалент с помощью циклов с пред- и постусловием.

 

Содержание отчета

1. Титульный лист отчета

2. Запись алгоритма решения каждой задачи

3. Тексты программы на языке С++

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

Дата: 2019-04-23, просмотров: 184.