Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
42
Добавлен:
16.02.2016
Размер:
123.39 Кб
Скачать

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

Следующим мощным механизмом управления ходом последовательности выполнения программы является использование циклов.

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

Проверка условия может осуществляться перед выполнением (циклы for, while) или после окончания (do-while) тела цикла.

Циклы могут быть вложенными друг в друга произвольным образом.

Циклы for

Синтаксис цикла for имеет вид:

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

Этот оператор работает следующим образом.

Сначала выполняется выражение1, если оно присутствует в конструкции. Затем вычисляется величина выражения2 (если оно присутствует) и, если полученный результат принял истинное значение, выполняется тело цикла (оператор_или_блок_операторов). В противном случае выполнение цикла прекращается и осуществляется переход к оператору, следующему непосредственно за телом цикла.

После выполнения тела цикла вычисляется выражение3, если оно имеется в конструкции, и осуществляется переход к пункту вычисления величины выражения2.

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

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

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

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

for( ; ; )

cout « "Бесконечный цикл...";

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

Типичная ошибка программирования циклов for - изменение значения счетчика как в конструкции (выражение3), так и в теле цикла. Это может приводить к таким негативным последствиям, как "выпадение" итераций.

Рассмотрим несколько примеров.

Для начала просуммируем набор из десяти целых чисел, начиная с 10.

#include <iostream.h>

int main()

{

int Sum = 0;

for(int i=10; i<20; i++)

Sum += i;

cout « "Сумма составит: " « Sum;

return 0;

}

Как видно из примера, при инициализации был объявлен счетчик i, с начальным значением 10, увеличивающийся с каждой итерацией на единицу. Тело цикла в данном случае состоит из одного единственного оператора, добавляющего к реэультируюшей величине Sum значение счетчика i в данной итерации.

Следующий фрагмент иллюстрирует применение оператора запятая" в цикле for:

for(int i=10, j=2; i<20; i++, j=i+17)

{

...

}

Таким обратом, первоначально инициализируются переменные i и j, а затем при каждой из 10-ти итерации будет вычисляться новое значение переменной j.

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

#include <iostream.h>

int. main ()

{

int delay;

// Начало вычислений

...

// Задержка 500 циклов

for(delay=500; delay>0; delay--);

// Пустой оператор, ничего делать

// не надо!

// Продолжение вычислений

...

return 0;

}

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

#include <iostream.h>

int main ()

{

int a = 0;

unsigned long fact = 1;

cout « "Введите целое число: ";

cin » a;

if((a >= 0) && (a < 33))

{

for<int i=l; i<=a; i++)

{

if(a != 0)

fact *= i; else

fact = 1;

}

cout « fact « '\n'; fact = 1; }

return 0;

}

В примере пользователю предлагается ввести целое число от 0 до 33. В организованном далее цикле от единицы до введенного числа производится собственно вычисление факториала.

Соседние файлы в папке ЯзыкС++Глушаков