Смекни!
smekni.com

Циклические конструкции в языках программирования высокого уровня (стр. 3 из 5)

Пример:

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

Printf ("i=%d&bsol;n", i);

if (i == 7){ Printf ("break loop! &bsol;n");

break; /* вывалиться из цикла */ }

printf("more&bsol;n");}

Printf ("finished, i=%d&bsol;n", i); /* печатает 7 */

В частности, с его помощью можно организовывать бесконечный цикл: for (;;){ /* заголовок бесконечного цикла */

операторы1;

if (условие2)

break;

операторы2; } ...продолжение...

Здесь в самом заголовке цикла не проверяется никаких условий, такой цикл продолжается бесконечно. Условие продолжения считается всегда истинным. Единственный способ выйти из него - это сделать break (при каком-то условии) в теле цикла, что и написано [2,3].

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

while(1){

...

}

2.3 Циклы в языке С++

Предположим, нам нужно вычислить сумму всех целых чисел от 0 до 100. Для этого воспользуемся оператором цикла for:

int sum = 0;int i;for (i = 1; i <= 100; i = i + 1)// заголовок циклаsum = sum + i; // тело цикла

Оператор цикла состоит из заголовка цикла и тела цикла. Тело цикла – это оператор, который будет повторно выполняться (в данном случае – увеличение значения переменной sum на величину переменной i). Заголовок – это ключевое слово for, после которого в круглых скобках записаны три выражения, разделенные точкой с запятой. Первое выражение вычисляется один раз до начала выполнения цикла. Второе – это условие цикла. Тело цикла будет повторяться до тех пор, пока условие цикла истинно. Третье выражение вычисляется после каждого повторения тела цикла.

Оператор for реализует фундаментальный принцип вычислений в программировании – итерацию. Тело цикла повторяется для разных, в данном случае последовательных, значений переменной i. Повторение иногда называется итерацией. Мы как бы проходим по последовательности значений переменной i, выполняя с текущим значением одно и то же действие, тем самым постепенно вычисляя нужное значение. С каждой итерацией мы подходим к нему все ближе и ближе. С другим принципом вычислений в программировании – рекурсией – мы познакомимся в разделе, описывающем функции. Любое из трех выражений в заголовке цикла может быть опущено (в том числе и все три). То же самое можно записать следующим образом:

int sum = 0;int i = 1;for (; i <= 100; ) {sum = sum + i;i = i + 1; }Заметим, что вместо одного оператора цикла мы записали несколько операторов, заключенных в фигурные скобки – блок. Другой вариант:int sum = 0;int i = 1;for (; ;) {if (i > 100)break; sum = sum + i;i = i + 1; }

В последнем примере мы опять встречаем оператор break. Оператор break завершает выполнение цикла. Еще одним вспомогательным оператором при выполнении циклов служит оператор продолжения continue. Оператор continue заставляет пропустить остаток тела цикла и перейти к следующей итерации (повторению). Например, если мы хотим найти сумму всех целых чисел от 0 до 100, которые не делятся на 7, можно записать это так:

int sum = 0;for (int i = 1; i <= 100; i = i+1) {if ( i % 7 == 0)continue; sum = sum + i; }

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

Другой формой оператора цикла является оператор while. Его форма следующая:

while (условие) операторУсловие – как и в условном операторе if – это выражение, которое принимает логическое значение "истина" или "ложь". Выполнение оператора повторяется до тех пор, пока значением условия является true (истина). Условие вычисляется заново перед каждой итерацией. Подсчитать, сколько десятичных цифр нужно для записи целого положительного числа N, можно с помощью следующего фрагмента:int digits =0;while (N > 0) {digits = digits + 1;N = N / 10;}

Третьей формой оператора цикла является цикл do while. Он имеет форму:

do { операторы } while ( условие);

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

char ch;do {ch = getch(); // функция getch возвращает// символ, введёный с// клавиатуры} while (ch != '*');

В операторах while и do также можно использовать операторы break и continue. Как легко заметить, операторы цикла взаимозаменяемы. Оператор while соответствует оператору for:

for ( ; условие ; ) оператор

Пример чтения символов с терминала можно переписать в виде:

char ch;ch = getch();while (ch != '*') {ch = getch();}Разные формы нужны для удобства и наглядности записи [4, 5, 6].

2.4 Циклы в языке Java

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

Основной оператор цикла в языке Java— оператор while — выглядит так:

while (лог.Вьгр) оператор

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

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

int i = 0;

double s = 0.0;

while ((s += 1.0 / ++i) < 10);

вычисляет количество i сложений, которые необходимо сделать, чтобы гармоническая сумма s достигла значения 10. Такой стиль характерен для языка С. Можно организовать и бесконечный цикл:

while (true) оператор

Конечно, из такого цикла следует предусмотреть какой-то выход, например, оператором break, как в листинге 1.5. В противном случае программа зациклится, и вам придется прекращать ее выполнение.

Если в цикл надо включить несколько операторов, то следует образовать блок операторов {}.

Другой оператор цикла — оператор do-while — имеет вид do оператор while (лог.Выр)

Здесь сначала выполняется оператор, а потом происходит вычисление логического выражения логического выражения. Цикл выполняется, пока логического выражения остается равным true.

В цикле do-while проверяется условие продолжения, а не окончания цикла. Существенное различие между этими двумя операторами цикла только в том, что в цикле do-while оператор обязательно выполнится хотя бы один раз. Например, пусть задана какая-то функция f(x), имеющая на отрезке, [о; b] ровно один корень. Ниже представлена эта программа:

class Bisection{

static double f(double x){

return x*x*x — 3*x*x +3; }

// Или что-то другое public static void main(String!] args){double a = 0.0, b = 1,5, с, y, eps = le-8;

do{с = 0.5 *(a + b); у = f(с);

if (Math.abs(y) < eps) break;// Корень найден. Выходим из цикла// Если на концах отрезка [а; с] // функция имеет разные знаки: if (f (а) * у < 0.0) b = с;

//Значит, корень здесь. Переносим точку b в точку с

//В противном случае: else а * с;

// Переносим точку а в точку с// Продолжаем, пока отрезок [а; Ь] не станет мал } while (Math, abs (b-a) >= eps); System.out.println("x = " +c+ ", f(" +c+ ") = " +y) }}

И еще один оператор цикла — оператор for — выглядит так:

for ( список.Выр ; лог.Выр; список.Выр2) оператор

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

Затем вычисляется логическое выражение лог.выр. Если оно истинно, true, то действует оператор, потом вычисляются слева направо выражения из списка выражений списокВыр2. Далее снова проверяется лог.выр. Если оно истинно, то выполняется оператор и списокВыр2 и т. д. Как только лог.выр станет равным false, выполнение цикла заканчивается. Короче говоря, выполняется последовательность операторов.

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

for (;;) оператор

В этом случае в теле цикла следует предусмотреть какой-нибудь выход.

Хотя в операторе for заложены большие возможности, используется он, главным образом, для перечислений, когда их число известно, например, фрагмент кода:

int s=0;

for (int k = 1; k <= N; k++) s += k * k;

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

for (int i = 0; i < N; i++){

if (i '== j) continue;

s += 1.0 / (i - j); }

Вторая форма содержит метку:

continue метка

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

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

оператор break метка применяется внутри помеченных операторов цикла, оператора варианта или помеченного блока для немедленного выхода за эти операторы. Следующая схема поясняет эту конструкцию:

Ml: { // Внешний блок

М2: { // Вложенный блок — второй уровень

М3: { // Третий уровень вложенности... if (что-то случилось) break M2; } &bsol;// Если true, то здесь ничего не выполняется // Здесь тоже ничего не выполняется}

// Сюда передается управление}

Поначалу сбивает с толку то обстоятельство, что метка ставится перед блоком или оператором, а управление передается за этот блок или оператор. Поэтому мне кажется что не стоит увлекаться оператором break с меткой [8].

2.5 Циклы в языке С#

Управляемые итерации, или циклы, в С# выполняют операторы for, while, do/while и foreach. В каждом случае исполняется простой или составной оператор, пока значение булевского выражения остается равным true. Исключение составляет foreach, производящий итерацию списка объектов. Цикл , for предоставляет механизм для прохода по циклу, при котором инициализируется некоторая локальная переменная и выполняется оператор в цикле до тех пор, пока заданное условие истинно, причем перед переходом к следующей итерации производится какой-нибудь простой шаг. Синтаксис цикла: