Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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




При выполнении программы нередко возникает необходимость неоднократного повторения однотипных вычислений над различными данными (например, программа расчёта заработной платы для сотрудников). Для этих целей используются так называемые циклы.

Фрагмент программы, который многократно повторяет выполнение одного или нескольких операторов, называется циклом, а последовательность операторов, входящая в данный фрагмент – телом цикла.

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

Язык С++ имеет три оператора для организации цикла – while, do whileиfor.

Оператор цикла while

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

while(условие)

тело цикла;

Операторwhileорганизует повторное выполнение одного оператора или нескольких операторов, образующих тело цикла, до тех пор, пока условие истинно. В качестве условия обычно используется условное выражение. Если в теле цикла нужно выполнить несколько операторов, то они заключаются в фигурные скобки ({}), т.е. используется составной оператор.

Оператор while называют оператором цикла с предусловием, так как истинность условия проверяется перед входом в цикл. Следовательно, возможна ситуация, когда тело цикла не выполнится ни разу (если условие сразу ложно).

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

// Пример4.9.Цикл типа while. Вычислить значение f = n!.

#include <iostream>

using namespace std;

int main(){

long int f = 1; int n, i = 1;

cout<<"Vvedi n > 0: " ; cin>>n;

while(i <= n){

f = f * i;

i++;

}

cout<<"f = "<<f<<'\n';

system("pause");

}

// Пример 4.10.Определить количество цифр в заданном целом числе.

#include <iostream>

using namespace std;

int main(){

long num;

cout<<" Enter num: "; cin>>num;

cout<<" num = "<<num<<endl;

int k = 0;

while(num){

k++; num = num / 10;

}

cout<<"k = "<<k<<endl;

}

Оператор цикла dowhile

Если необходимо обеспечить выполнение цикла хотя бы один раз, то удобно использовать оператор цикла do – while, который называют оператором цикла с постусловием. Общая форма записи оператора имеет следующий вид:



Do

тело цикла;

while(условие);

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

// Пример4.11.Цикл типа do – while. Вычислить значение f = n!.

#include <iostream>

using namespace std;

int main(){

long int f = 1; int n, i = 1;

cout<<"Vvedi n > 0: " ; cin>>n;

do{

f = f * i; i++;

}while(i <= n);

cout<<"f = "<<f<<'\n';

}

Оператор цикла for

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

for(Выражение1; Выражение2; Выражение3) // заголовок цикла

тело цикла;

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

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



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

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

Любое выражение оператора цикла for может отсутствовать (но символы точка с запятой должны присутствовать). При этом для корректной работы такого цикла необходимо включить в его тело операторы, которые приведут к завершению цикла. Если в заголовке цикла отсутствует Выражение2, оно считается истинным.

При использовании цикла for следует избегать изменения управляющей переменной цикла в теле цикла.

// Пример4.12.Цикл типа for. Вычислить значение f = n!.

#include <iostream>

using namespace std;

int main(){

long int f = 1;

int n, i;

cout<<"Vvedi n > 0: " ; cin>>n;

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

f = f * i;

cout<<"f = "<<f<<'\n';

system("pause");

}

В цикле for имеется возможность объявить в выражении1 заголовка цикла одну или несколько переменных, но это объявление будет действительно только в пределах цикла:

for(int i = 1, j = 2; i <= 5; i++, j++) // заголовок цикла

тело цикла

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

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

if( i*i == VALUE) i = m;

где VALUE – заранее определённая величина.

 

// Пример 4.13.Вычислить сумму вида2+4+6+ +n, где n вводится.

#include <iostream>

using namespace std;

int main(){

int n, sum = 0;

cout<<"Enter n:"; cin>>n;

if(n % 2)n = n - 1;

for(int i = 2; i <= n; i+=2)

sum = sum + i;

cout<<" 2 + 4 + ... + " <<n<<" = "<<sum<<endl;

system("pause");

}

Способы организации бесконечных циклов

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

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

while(1){

тело цикла

}

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

const bool flag = true;

while(flag){

тело цикла

}

Бесконечный цикл можно организовать и с помощью оператора цикла for.

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

Вложенные циклы

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

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

// Пример1. Вывод на экран пяти строк с цифрами от 0 до 9.

// Вложенный цикл организован оператором for.

int i, j;

for(i = 0; i < 5; i++){

for(j = 0; j < 10; j++)

cout<<j<<' ';

cout<<endl;

}

// Пример 2. Ввод пяти значений месяца с проверкой правильности

// ввода. Вложенный цикл организован операторами for и do-while.

int i, den;

for(i = 1; i <= 5; i++){

do{

cout<<"Enter den: "; cin>>den;

}while(den < 1 || den > 31);

cout<<den<<endl;

}…

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

// Пример 4.14.Вычислить для каждого числа, вводимого с клавиатуры,

// его факториал. Построить диалог при вводе чисел.

#include <iostream>

using namespace std;

int main(){

long n; char flag = 'y';

while(flag == 'y'){

do{

cout<<"Enter number\n"; cin>>n;

}while(n < 0 || n == 0);

long k = 1;

for(int i = 1; i <= n; i++) k = k * i;

cout<<"Factorial chisla "<<n<<" = "<<k<<endl;

cout<<" Continue? (y/n)\n"; cin>>flag;

}

}


mylektsii.ru - Мои Лекции - 2015-2019 год. (0.011 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал