Циклы в языке программирования C#
Что мы делаем ежедневно? Думаю, у каждого из нас свой список дел. Однако раз за разом повторяются одни и те же операции для достижения одних и тех же целей. Это и есть цикл. В программировании циклы используются при обработке множеств / файлов или же для вычисления математических выражений.Выделяют несколько видов циклов:
- while … do (с предусловием );
- do … while (с постусловием);
- for (с параметром)
Цикл с параметром (цикл for)
Может использоваться в ситуациях, когда до входа в цикл известно количество итераций (повторений цикла). Имеет следующий вид:
for(<инициализация>; <условие>; <порядок выполнения>)
{
<действия>
}
- Инициализация — установка начальных параметров счетчика;
- Условие — условие выхода из цикла, как только оно вернет ложь — произойдет выход из цикла;
- Порядок выполнения — команда увеличения счетчика.
Действия, выполняемые циклически, называются телом цикла. Рассмотрим наиболее общий пример: поиск факториала числа. Факториал числа вычисляется по формуле:
N = 1 * 2 * 3 * ... * N
Как вы видите, мы заранее знаем, сколько раз должно повториться тело цикла, потому можем использовать счетчик.
int n = Convert.ToInt32(Console.ReadLine()); // Пользователь вводит число.
int factorial = 1;
for(int i = 2; i <= n; i++) // Вычисление факториала.
{
factorial *= i;
}
Console.WriteLine(factorial); // Выводим факториал пользователю.
Итак, пользователь вводит любое число. После чего, мы вычисляем факториал по вышеуказанной формуле. Начальное значение факториала необходимо установить в единицу. Цикл начинаем с двойки и повторяем до тех пор, пока счетчик меньше или равен введенному пользователем значению. Если использовать оператор «меньше», мы потеряем умножение на старшее число при вычислении факториала. Порядок выполнения указан как i++, это значит, что на каждой итерации цикла счетчик i увеличивается на единицу. В виде порядка управления может выступать и более сложная математическая формула.
Цикл while (цикл с предусловием)
В данном случае действия цикла повторяются до тех пор, пока выполняется указанное условие. Этот цикл функционирует по принципу: «Сперва думаем, после делаем». В общем виде выглядит так:
while(<Условие>)
{
<Действия>
}
Рассмотрим пример вычисления факториала при помощи while.
int n = Convert.ToInt32(Console.ReadLine()); // Пользователь вводит число.
int factorial = 1;
int i = 2;
while(i <= n) // Вычисление факториала.
{
factorial *= i;
i++; // Увеличиваем счетчик.
}
Console.WriteLine(factorial); // Выводим факториал пользователю.
Чтобы не получить бесконечного цикла, необходимо изменять параметр, проверяемый в условии. Именно для этого мы увеличиваем i.
Цикл do…while (цикл с постусловием)
Этот вид цикла подобен while, с той лишь разницей, что проверка условия производится после выполнения тела цикла.
do
{
<Действия>
} while(<Условие>);
И снова рассмотрим вычисление факториала.
int n = Convert.ToInt32(Console.ReadLine()); // Пользователь вводит число.
int factorial = 1;
int i = 2;
do // Вычисление факториала.
{
factorial *= i;
i++; // Увеличиваем счетчик.
} while(i <= n);
Console.WriteLine(factorial); // Выводим факториал пользователю.
Цикл foreach
Допустим, мы имеем массив значений, не важно каких: числа, строки, символы… Для перебора массива удобно использовать этот вид цикла. Выглядит он следующим образом:
foreach(var <Элемент массива> in <Массив>)
{
<Действия>
}
Предположим, у нас есть список городов, и нужно найти все города, начинающиеся с заданного символа.
var sym = Console.ReadKey(); // Читаем символ с клавиатуры
var cities = {"Москва", "Казань", "Петергоф", "Пермь", "Минск", "Сан-Диего", "Вызима"};
var founded = ""; // Найденные города.
foreach(var city in cities)
{
if(city.StartsWith(sym))
{
founded += city + " ";
}
}
Console.WriteLine(founded);
Пользователь вводит символ, после чего для каждого элемента массива проверяется, начинается ли он с заданного символа. И, если условие выполняется, элемент массива запоминается в результирующей строке. Главным плюсом foreach является то, что он исключает возможность выхода за границы массива.
Управление циклом. Команды break и countinue
Для управления циклом в языке C# используются два оператора: break и continue.Оператор break используется для прерывания выполнения цикла. Пусть, нам нужно найти некоторый элемент в массиве. Так, используя цикл, мы можем выйти из цикла, как только найдем искомый элемент.
int index = 0;
var wanted = Console.ReadLine();
var array;
for(int i = 0; i < array.Length; i++)
{
if(array[i] == wanted)
{
index = i;
break;
}
}
Так мы находим индекс искомого слова в массиве, при этом не выполняем лишних операций после того, как найдем искомый элемент.Оператор continue используется для перехода к следующей итерации цикла. Рассмотрим задачу: необходимо вычислить сумму пяти частных вида:
1 / (i - a)
Как вы видите, при i = a будет получена ошибка «Деление на ноль». В данном случае мы можем пропускать значение счетчика, которое приводит к ошибке.
var sum = 0;
for(int i = 0; i < n; i++)
{
if (i - a == 0)
{
continue;
}
sum+= 1 / (i - a);
}
Вот мы и рассмотрели основы работы с циклами в C#. Удачных вам экспериментов, коллеги.
Источник: Циклы C#