Цикл – управляющая конструкция, предназначенная для многоразового выполнения одной или нескольких инструкций. Одно циклическое повторение, носит название – итерация.
Цикл 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;
}
Цикл выполняется следующим образом:
- инициализируется переменная – int i = 1;
- проверяется условие i <= 10:
- если значение true переходим к следующему шагу;
- если false - выходим из цикла;
- выполняется инструкция из тела цикла – p *= i;
- изменяется итератор – i++;
- переход на 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#.