Цикл do. . . while
Цикл do…while в C# — это версия while с постпроверкой условия. Это значит, что условие цикла проверяется после выполнения тела цикла. Следовательно, циклы do…while удобны в тех ситуациях, когда блок операторов должен быть выполнен как минимум однажды. Ниже приведена общая форма оператора цикла do-while:
do {
операторы;
} while (условие);
При наличии лишь одного оператора фигурные скобки в данной форме записи необязательны. Тем не менее они зачастую используются для того, чтобы сделать конструкцию do-while более удобочитаемой и не путать ее с конструкцией цикла while. Цикл do-while выполняется до тех пор, пока условное выражение истинно. В качестве примера использования цикла do-while можно привести следующую программу, расчитывающую факториал числа:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
try
{
// Вычисляем факториал числа
int i, result = 1, num = 1;
Console.WriteLine("Введите число:");
i = int.Parse(Console.ReadLine());
Console.Write("nnФакториал {0} = ", i);
do
{
result *= num;
num++;
} while (num <= i);
Console.Write(result);
}
catch (FormatException ex)
{
Console.WriteLine("Вы ввели не число. {0}",ex.Message);
}
finally
{
Console.ReadLine();
}
}
}
}
Цикл foreach
Цикл foreach служит для циклического обращения к элементам коллекции, представляющей собой группу объектов. В C# определено несколько видов коллекций, каждая из которых является массивом. Ниже приведена общая форма оператора цикла foreach:
foreach (тип имя_переменной_цикла in коллекция) оператор;
Здесь тип имя_переменной_цикла обозначает тип и имя переменной управления циклом, которая получает значение следующего элемента коллекции на каждом шаге выполнения цикла foreach. А коллекция обозначает циклически опрашиваемую коллекцию, которая здесь и далее представляет собой массив. Следовательно, тип переменной цикла должен соответствовать типу элемента массива. Кроме того, тип может обозначаться ключевым словом var. В этом случае компилятор определяет тип переменной цикла, исходя из типа элемента массива. Это может оказаться полезным для работы с определенного рода запросами. Но, как правило, тип указывается явным образом.
Оператор цикла foreach действует следующим образом. Когда цикл начинается, первый элемент массива выбирается и присваивается переменной цикла. На каждом последующем шаге итерации выбирается следующий элемент массива, который сохраняется в переменной цикла. Цикл завершается, когда все элементы массива окажутся выбранными.
Пример использования цикла foreach:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// Объявляем два массива
int[] myArr = new int[5];
int[,] myTwoArr = new int[5, 6];
int sum = 0;
Random ran = new Random();
// Инициализируем массивы
for (int i = 1; i <= 5; i++)
{
myArr[i-1] = ran.Next(1, 20);
for (int j = 1; j <= 6; j++)
myTwoArr[i - 1, j - 1] = ran.Next(1, 30);
}
// Вычисляем квадрат каждого элемента одномерного массива
foreach (int fVar in myArr)
Console.WriteLine("{0} в квадрате равно {1}",fVar,fVar*fVar);
Console.WriteLine();
// Вычислим сумму элементов многомерного массива
foreach (int fTwoVar in myTwoArr)
sum += fTwoVar;
Console.WriteLine("Сумма элементов многомерного массива: {0}",sum);
Console.ReadLine();
}
}
}
Попробуйте запустить данный пример несколько раз и вы наглядно увидите, что элементы массива изменяются каждый раз (с помощью метода Random.Next), и соответственно опрашиваются в цикле foreach. Мой результат:
