Циклы

Обновлено: 19.02.2019

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

Цикл while

Цикл с предусловием while – проверяет условие в начале выполнения, и имеет следующий синтаксис:

while(условное_выражение)
{
    // инструкции
}

Выполняется до тех пор, пока условие – истинно(равно true).

Пример: вывод в консоль цифр от 1 до 9:

var n = 1;
while (n < 10)
{
    Console.WriteLine(n);
    n += 1;
}

Цикл do while

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

Пример: вычисление суммы чисел от 1 до 10:

int k = 1;
int s = 0;
do
{
    s += k;
    ++k;
}
while (k <= 10);
Console.WriteLine("Sum = {0}", s);

Цикл for

Цикл со счетчиком for – это цикл в котором счетчик изменяет значение от начального до конечного значения, с заданным шагом, и для каждого значения счетчика выполняется одна итерация.

Имеет следующий синтаксис:

for(инициализатор; логическое условие; итератор)
{
    // инструкции;
}

Разделы инициализатор, условие и итератор не являются обязательны. В итераторе может содержатся несколько инструкция, разделенных запятой – “,”.

Рассмотрим пример вычисления произведения чисел от 1 до 10:

int p = 1;
for (int i = 1; i <= 10; i++)
{
    p *= i;
}

Цикл выполняется следующим образом:

  1. инициализируется переменная – int i = 1;
  2. проверяется условие i <= 10:
    • если значение true переходим к следующему шагу;
    • если false - выходим из цикла;
  3. выполняется инструкция из тела цикла – p *= i;
  4. изменяется итератор – i++;
  5. переход на 2-й шаг.

Цикл foreach

Цикл foreach, или цикл просмотра – применяется к коллекциям(массивы, списки), перебирает все элементы коллекции, для каждой итерации берет один элемент.

var array = new[] { 1, 2, 3, 4, 5 }; //массив целых чисел
//в каждой итерации переменной item присваивается следующее значение массива
foreach (var item in array)
{
    Console.WriteLine(item);
}

Оператор goto

С помощью оператора безусловного перехода goto, также можно реализовать циклическое повторение:

byte x = 9;
label:
Console.WriteLine(x--);
if (x > 0)
{
    goto label; //перейти на label
}

Циклическое повторение не является циклом в прямом понимании этого слова.

Использование goto очень усложняет чтение кода программы. В некоторых языках программирования этот оператор запрещен к использованию, а в других его использование считается плохим примером. В C#, он присутствует, хотя на практике почти не используется. Здесь приводиться в цели обзора возможностей платформы .Net.

Операторы break и continue

Иногда необходимо выйти из цикла, не дождавшись его завершения, для этого используется оператор прерывания цикла - break.

int x = 0;
while (x < 100)
{
    // при значении x больше 7 состоится досрочное прерывание цикла
    if (x > 7)
        break;
    Console.WriteLine(x);
    x++;
}

Если нужно пропустить одну или несколько инструкций, и сразу перейти к следующей итерации, используется оператор – continue.

int b = 0;
for (int i = 1; i < 10; i++)
{
    b += 10;
    //при значении i = 4 в консоль ничего не выводиться
    if (i == 4)
        continue;
    Console.WriteLine("{0}. {1}", i, b);
}

Бесконечные циклы

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

Варианты реализации:

while(true)
{
    //тело цикла
}

for(;;)
{
    //тело цикла
}

do
{
    //тело цикла
}
while(true);

Пример использования бесконечного цикла для чтения текстовых строк из клавиатуры:

string text = "";
do
{
    Console.Write("Введите строку, или exit для прерывания ввода: ");
    var s = Console.ReadLine();
    if (s == "exit")
        break;
    else
        text += s + "\r\n";
}
while (true);

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

Поделиться: Vk Ok