Возможна такая ситуация когда вам нужно выполнить блок кода несколько раз. В общем случае выражения выполняются последовательно: первое выражение выполняется первым, второе - вторым и т.д.
Языки программирования предоставляют различные возможности для создания более сложных структур исполнения выражений.
Выражения цикла позволяют выполнять выражения или группы выражений множество раз и имеют схожую структуру в большинстве языков программирования:
C# поддерживает следующие типы циклов.
Тип цикла | Описание |
---|---|
цикл while | Повторяет оператор или группу операторов пока заданое условие условие истина (true). Проверка условия происходит перед выполнением тела цикла. |
цикл for | Выполняет последовательность операторов множество раз и сокращяет код, который необходим для управления переменной цикла. |
цикл do...while | Похож на оператор while, за исключением того, что он проверяет условие после выполнения тела цикла. |
вложенные loops | Вы можете использовать один или несколько циклов внутри любого другого цикла while, for or do..while. |
Оператор цикла while в C# многократно выполняет оперторы в теле цикла пока заданое условие истина (true).
Синтаксис цикла while в C#:
while(condition)
{
statement(s);
}
Здесь statement(s) может быть одиночным оператором или блоком операторов, сondition может быть любым условием. Цикл прдолжает повторяться пока условие истина.
Когда условие становиться ложью, управление передается следующему оператору после окончания тела цикла.
Ключевая особенность цикла while в том, что операторы в теле цикла моут ни разу не запустится. Когда условие проверяется и результат оказывается ложью, тело цикла будет пропущено и будет выполнен первый оператор после цикла.
using System;
namespace Loops
{
class Program
{
static void Main(string[] args)
{
/* определение локальной переменной */
int a = 10;
/* запуск цикла while */
while (a < 20)
{
Console.WriteLine("значение a: {0}", a);
a++;
}
Console.ReadLine();
}
}
}
Если приведенный выше код скомпилировать и выполнить, это приведет к следующему результату:
значение a: 10
значение a: 11
значение a: 12
значение a: 13
значение a: 14
значение a: 15
значение a: 16
значение a: 17
значение a: 18
значение a: 19
Цикл for является структурой повторного управления, которая позволяет эффективно написать цикл, который нужно выполнить определенное количество раз.
Синтаксис цикла for в C#:
for ( init; condition; increment )
{
statement(s);
}
Вот процесс управления в цикле for:
using System;
namespace Loops
{
class Program
{
static void Main(string[] args)
{
/* запуск цикла for */
for (int a = 10; a < 20; a = a + 1)
{
Console.WriteLine("значение a: {0}", a);
}
Console.ReadLine();
}
}
}
Если приведенный выше код скомпилировать и выполнить, это приведет к следующему результату:
значение a: 10
значение a: 11
значение a: 12
значение a: 13
значение a: 14
значение a: 15
значение a: 16
значение a: 17
значение a: 18
значение a: 19
В отличие от циклов for и while, которые проверяют условия цикла вверху цикла, цикл do...while проверяет условие внизу цикла.
Цикл do...while похож на цикл while, за исключением того, что цикл do...while гарантированно запуститься хотя бы один раз.
Синтаксис цикла do...while в C#:
do
{
statement(s);
}while( condition );
Следует отметить, что условие находиться в конце цикла, и операторы statement(s) в цикле выполняются впервые перед проверкой цикла.
Если результат выполнения условия истина (true), управление передастся назад к do, и операторы statement(s) в цикле будут выполнены снова. Этот процесс повторяется до тех пор, пока результат выполнения условия не станет ложью (false).
using System;
namespace Loops
{
class Program
{
static void Main(string[] args)
{
/* определение локальной переменной */
int a = 10;
/* запуск цикла do */
do
{
Console.WriteLine("значение a: {0}", a);
a = a + 1;
} while (a < 20);
Console.ReadLine();
}
}
}
Если приведенный выше код скомпилировать и выполнить, это приведет к следующему результату:
значение a: 10
значение a: 11
значение a: 12
значение a: 13
значение a: 14
значение a: 15
значение a: 16
значение a: 17
значение a: 18
значение a: 19
C# позволяет использовать оди цикл внутри другого. Ниже показаны несколько примеров иллюстрирующих данную технологию.
Синтаксис для оператора вложенного цикла for в C# следующий:
for ( init; condition; increment )
{
for ( init; condition; increment )
{
statement(s);
}
statement(s);
}
Синтаксис для опертора вложенного цикла while в C# следующий:
while(condition)
{
while(condition)
{
statement(s);
}
statement(s);
}
Синтаксис для оператора вложенного цикла do...while в C# следующий:
do
{
statement(s);
do
{
statement(s);
}while( condition );
}while( condition );
И последние, вы можете вложить любой тип цикла в любой тип цикла по желанию. Например цикл for может быть вложен в цикл while или наоборот.
Данная программа использует вложенный цикл for для нахождения простых чисел от 2 до 100:
using System;
namespace Loops
{
class Program
{
static void Main(string[] args)
{
/* определение локальной переменной */
int i, j;
for (i = 2; i < 100; i++)
{
for (j = 2; j <= (i / j); j++)
if ((i % j) == 0) break; // если условие верно - не простое
if (j > (i / j))
Console.WriteLine("{0} простое число", i);
}
Console.ReadLine();
}
}
}
Если приведенный выше код скомпилировать и выполнить, это приведет к следующему результату:
2 простое число
3 простое число
5 простое число
7 простое число
11 простое число
13 простое число
17 простое число
19 простое число
23 простое число
29 простое число
31 простое число
37 простое число
41 простое число
43 простое число
47 простое число
53 простое число
59 простое число
61 простое число
67 простое число
71 простое число
73 простое число
79 простое число
83 простое число
89 простое число
97 простое число
Операторы управления циклом меняют последовательность исполнения операторов в теле цикла.
C# поддерживает следующие операторы управления циклом.
Оператор управления | Описание |
---|---|
Оператор break | Останавливает оператор цикла или switch и передает управление оператору располеженному сразу после оператора цикла или switch. |
Оператор continue | Сообщает циклу о необходимости пропустить оставшиюся часть тела цикла и перепроверить условие цикла для выбора дальнейшего действия. |
Оператор break в C# используется в двух случаях:
Если используются вложенные циклы ( т.е. один цикл внутри другого цикла), оператор break остановит выполнение только вложенного цикла.
Синтаксис для оператора break в C# следующий:
break;
using System;
namespace Loops
{
class Program
{
static void Main(string[] args)
{
/* определение локальной переменной */
int a = 10;
/* запуск цикла while */
while (a < 20)
{
Console.WriteLine("значение a: {0}", a);
a++;
if (a > 15)
{
/* останавливает выполнение цикла используя оператор break */
break;
}
}
Console.ReadLine();
}
}
}
Если приведенный выше код скомпилировать и выполнить, это приведет к следующему результату:
значение a: 10
значение a: 11
значение a: 12
значение a: 13
значение a: 14
значение a: 15
Оператор continue в C# работает примерно как оператор break. Вместо принудительной остановки, оператор continue принудительно запускает следующую итерацию цикла, пропуская операторы в теле цикла после оператора continue.
Для цикла for, оператор continue инициирует проверку условия с изменением управляюших переменных. Для циклов while и do...while, оператор continue инициирует пропуск кода до проверки цикла.
Синтаксис оператора continue в C# следующий:
continue;
using System;
namespace Loops
{
class Program
{
static void Main(string[] args)
{
/* определение локальной переменной */
int a = 10;
/* запуск цикла do */
do
{
if (a == 15)
{
/* пропуск итерации */
a = a + 1;
continue;
}
Console.WriteLine("значение a: {0}", a);
a++;
} while (a < 20);
Console.ReadLine();
}
}
}
Если приведенный выше код скомпилировать и выполнить, это приведет к следующему результату:
значение a: 10
значение a: 11
значение a: 12
значение a: 13
значение a: 14
значение a: 16
значение a: 17
значение a: 18
значение a: 19
Цикл становиться бесконечным циклом если условие никогда не станет ложным (false).
using System;
namespace Loops
{
class Program
{
static void Main(string[] args)
{
for (; ; )
{
Console.WriteLine("Эй! Я в ловушке.");
}
}
}
}
или
using System;
namespace Loops
{
class Program
{
static void Main(string[] args)
{
while(true)
{
Console.WriteLine("Эй! Я в ловушке.");
}
}
}
}