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

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

Синтаксис структуры for:

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

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

Структура for работает следующим образом: Сначала выполняется выражение1 (оно может состоять и из ряда выражений, разделенных запятой т.е. может использоваться операция последования). Это выражение задает начальные значения переменной (или переменных) цикла. Затем проверяется выражение2 – условие продолжения цикла. Если условие истинно (возвращает true – ненулевое значение), то выполняется тело цикла – оператор, записанный в структуре for. После завершения тела цикла выполняется выражение3, определяющее обычно изменение переменной цикла. Затем опять проверяется условие, записанное как выражение2, и при истинности этого условия выполнение цикла продолжается. Как только в каком-нибудь цикле выражение2 вернет false (нулевое значение), цикл прерывается и управление передается оператору, расположенному следом за структурой for.

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

Найти сумму ряда .

#include<iostream.h>

main()

{

int N;

cout <<"N=";

cin >>N;

double S=0;

for(int i=0;i<N; i++) S+=1/double(i+1);

cout <<"S="<<S;

}

Здесь первое выражение в структуре for вводит целую переменную i, являющуюся счетчиком циклов, и инициализирует ее значением 0. Второе выражение проверяет условие завершения цикла. В данном случае цикл должен завершиться, когда переменная i, используемая в теле, примет значение, равное значению переменной N, введенное пользователем с клавиатуры. Третье выражение структуры for увеличивает после каждого выполнения цикла значение i на 1 с помощью операции инкремента.

Теперь рассмотрим этот же приме пример, но с использованием в структуре for операции запятая. Если объявить переменные i и S до начала цикла, собственно цикл можно весь разместить в заголовке структуры for:

#include<iostream.h>

main()

{

int N,i;

cout << "N=";

cin >>N;

double S;

for(i=0,S=0; i<N; S+=1/double(i+1),i++);

cout <<"S="<<S;

}

В этом примере первое выражение структуры for включает в себя два оператора, разделенных операцией запятая и задающих начальные значения переменной S, накапливающей сумму, и переменной цикла i. Третье выражение структуры for включает также два оператора - формирование суммы и постфиксный инкремент переменной цикла i. После структуры for стоит точка с запятой, что означает пустое тело цикла.

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

Выражения в структуре for являются необязательными. Иногда может отсутствовать первое выражение, если начальное значение управляющей переменной задано где-то в другом месте программы. Если отсутствует второе выражение, предполагается, что условие продолжения цикла всегда истинно и таким образом создается бесконечно повторяющийся цикл. Выйти из такого цикла можно, проверив в теле цикла какие-то условия и прервав выполнение передачей управления за пределы цикла оператором goto или применить другие способы прерывания. Может отсутствовать в структуре for и третье выражение, если приращение переменной осуществляется операторами в теле структуры или если приращение не требуется.

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

for (; i<10;) …;

пропущено первое условие и третье.

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

Операторы цикла for могут быть вложенными.

Операторы прерывания цикла

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

Один из возможных вариантов решения этой задачи – использование оператора break. Оператор break прерывает выполнение тела любого цикла for, do или while и передает управление следующему за циклом выполняемому оператору.

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

#include<iostream.h>

main()

{

double A,B;

while(1){

cout <<"Введите значения больше нуля:"<<endl;

cout <<"A=";

cin >>A;

cout <<"B=";

cin >>B;

if ((A<=0)||(B<=0)) cout <<"Неправильные значения"<<endl;

else break; // Прерывание цикла

  }

}

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

Описанные способы прерывали выполнение цикла. Имеется еще процедура continue, которая прерывает только выполнение текущей итерации, текущего выполнения тела цикла и передает управление на следующую итерацию.

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

 

 

#include<iostream.h>

main()

{

int N;

cout <<"N=";

cin >> N;

double P=1;

for (int i=1; i<N; i++)

if (i==5) continue; // Прерывание текущей итерации цикла

else P*=1/double(i-5);

cout <<"P="<<P;

}

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

Дата: 2019-02-02, просмотров: 270.