Цикл for в языке Си. В чем его отличие от аналогичного оператора в Паскале. Использование в теле цикла операторов break и continue.

Наиболее часто применяемая конструкция цикла использует оператор for:

for(S1; C; S2) { Q1; Q2;...}

Здесь S1 – действие, которое выполняется перед повторением группы операторов Q1, Q2, … , образующих тело цикла;

C – условие, при выполнении которого тело цикла повторяется. Если условие C не выполнено, то тело цикла обходится и цикл завершается;

S2 – действие, которое выполняется вслед за последним оператором тела цикла. После этого управление передается на проверку условия завершения цикла.

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

s=0;

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

s=s+a[j];

В приведенном примере тело цикла состоит из единственного оператора, который можно не заключать в фигурные скобки. Перед началом цикла в переменную j заносится 0 и поскольку это значение меньше 10, то к содержимому переменной s прибавляется значение первого элемента массива a[0]. После первого завершения тела цикла к счетчику j добавляется 1 и тело цикла повторяется. Так продолжается до тех пор, пока значение счетчика не увеличится до 10, при котором условие повторения цикла уже не выполняется.

Если счетчик цикла используется только в теле цикла и значение этой переменной за пределами цикла сохранять не нужно, то стандарт C++ позволяет определить такую суперлокальную переменную непосредственно в операторе for:

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

Значение счетчика (индекса) может не только увеличиваться при каждом повторении цикла, но и уменьшаться:

s=0;

for(j=9; j>=0; j--)

s=s+a[j];

В этом примере массив a суммируется, начиная с последнего элемента.

Иногда цикл по счетчику в обратном порядке организуют следующим образом:

count=20;

for(s=0; count; count--)

s += a[count];

В этом примере условием повторения цикла является положительное значение счетчика count, которое воспринимается как "истина". Как только содержимое счетчика станет равным нулю (т.е. "лжи"), цикл завершит свою работу.

В отличие от языка Паскаль, где оператор for допускает только увеличение или уменьшение счетчика цикла только на 1, оператор for в языках C, C++ позволяет изменять значение управляющей переменной произвольным образом. Эта переменная может быть вещественного типа, и ее значение может меняться не только по закону арифметической прогрессии, но и любым сколь угодно сложным способом. Например, можно просуммировать только элементы массива с четными индексами:

s=0;

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

s=s+a[j];

Действие S1, выполняемое при входе в цикл, может состоят не только из единственного оператора, засылающего в счетчик цикла начальное значение. Если нужно выполнить несколько операторов, то их разделяют запятыми (список действий, аналогичный экзотической форме оператора присваивания). В приведенных выше примерах очистку переменной s тоже можно было внести в оператор заголовка цикла:

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

s=s+a[j];

Аналогичный список из нескольких операторов можно использовать и в качестве действия S2, выполняемого вслед за последним оператором тела цикла. В приведенном ниже примере оператор цикла вычисляет n-й член последовательности чисел Фибоначчи:

for(x=1,y=1,i=2; i<n; z=x+y, x=y, y=z, i++);

Иногда в программах можно встретить на первый взгляд бессмысленный оператор for:

for(;;){Q1;Q2;...;}

Судя по описанию оператора for, тело такого цикла должно выполняться бесконечное число раз. Однако такие циклы могут оказаться полезными в DOS-приложениях для организации ожидания какого-либо события, появление которого проверяется в теле цикла. Если событие произошло (например, ввод информации со стороны пользователя состоялся, или по каналу связи поступило долгожданное сообщение), то из тела цикла можно выйти с помощью оператора break или goto. В среде Windows существуют и более эффективные (с точки зрения загрузки процессора) средства, контролирующие появление того или иного события.

В паскале

Цикл for существует в двух формах:

for счетчик:=значение to конечное_значение do

тело_цикла;

for счетчик:=значение downto конечное_значение do

тело_цикла;

Счетчик – это переменная любого из перечисляемых типов (целого, булевого, символьного, диапазонного, перечисления). Начальные и конечные значения могут быть представлены не только значениями, но и выражениями, возвращающими совместимые с типом счетчика типы данных. Если между начальным и конечным выражением указано служебное слово to, то на каждом шаге цикла значение параметра будет увеличиваться на единицу. Если же указано downto, то значение параметра будет уменьшаться на единицу.

Количество итераций цикла for известно именно до его выполнения, но не до выполнения всей программы. Так в примере ниже, количество выполнений цикла определяется пользователем. Значение присваивается переменной, а затем используется в заголовке цикла. Но когда оно используется, циклу уже точно известно, сколько раз надо выполниться.

var

i, n: integer;

begin

write ('Количество знаков: ');

readln (n);

for i := 1 to n do

write ('(*) ');

readln

end.

Билет 3

Наши рекомендации