Выполнение этой программы дает следующий результат.

i

и

j :

i

и

j :

i

и

j :

i

и

j :

i

и

j :

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

Ниже приведен практический пример применения нескольких переменных управления циклом в операторе for. В этом примере программы используются две переменные управления одним циклом for для выявления наибольшего и наименьшего множителя целого числа (в данном случае — 100). Обратите особое внимание на условие окончания цикла. Оно опирается на обе переменные управления циклом.

// Использовать запятые в операторе цикла for для // выявления наименьшего и наибольшего множителя числа.

using System; >

class Comma {

static void Main() { int i, j;

Int smallest, largest; int num;

num = 100;

smallest = largest = 1;

for(i=2, j=num/2; (i <= num/2) & (j >= 2); i++, j—) {

if((smallest == 1) & ((num % i) == 0)) smallest = i;

if ( (largest == 1) & ((num % j) == 0)) largest = j;

}

Console.WriteLine("Наибольший множитель: " + largest);

Console.WriteLine("Наименьший множитель: " + smallest);

}

}

Ниже приведен результат выполнения этой программы.

Наибольший множитель: 50 Наименьший множитель: 2

Благодаря применению двух переменных управления циклом удается выявить наименьший и наибольший множители числа в одном цикле for. В частности, управляющая переменная i служит для выявления наименьшего множителя. Первоначально ее значение устанавливается равным 2 и затем инкрементируется до тех пор, пока не превысит половину значения переменной num. А управляющая переменная j служит для выявления наибольшего множителя. Ее значение первоначально устанавливается равным половине значения переменной num и затем декрементируется до тех пор, пока не станет меньше 2. Цикл продолжает выполняться до тех пор, пока обе переменные, i и j, не достигнут своих конечных значений. По завершении цикла оба множителя оказываются выявленными.

Условное выражение

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

// Условием выполнения цикла может служить любое выражение типа bool.

Using System;

class forDemo {

static void Main() { int i, j;

bool done = false;

for(i=0, j=100; !done; i++, j—) {

if(i*i >= j) done = true;

Console.WriteLine("i, j: " + i + " " + j);

}

}

}

Ниже приведен результат выполнения этой программы.

I, j

0 100

i/ j

1 99

I, j

2 98

I, j

3 97

If j

4 96

A j

5 95

A j

6 94

A j

7 93

j

8 92

A j

9 91

Ir j

10 90

В данном примере цикл for повторяется до тех пор, пока значение переменной done типа не окажется истинным (true). Истинное значение переменной done устанавливается в цикле, когда квадрат значения переменной i оказывается больше или равным значению переменной j.

Отсутствующие части цикла

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

// Отдельные части цикла for могут оставаться пустыми.

Using System;

class Empty {

static void Main() { int i;

for (i = 0; i < 10; ) {

Console.WriteLine("Проход №" + i);

i++; // инкрементировать переменную управления циклом

}

}

}

В данном примере итерационное выражение в определении цикла for оказывается пустым, т.е. оно вообще отсутствует. Вместо этого переменная i, управляющая циклом, инкрементируется в теле самого цикла. Это означает, что всякий раз, когда цикл повторяется, значение переменной i проверяется на равенство числу 10, но никаких других действий при этом не происходит. А поскольку переменная i инкрементируется в теле цикла, то сам цикл выполняется обычным образом, выводя приведенный ниже результат.

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