На этом шаге мы рассмотрим синтаксис этой конструкции и пример ее использования.
Конструкция цикла позволяет многократно выполнять определенный набор команд. В языке C# существует несколько циклических конструкций, и со всеми ними мы познакомимся. Но начнем с цикла while. У него достаточно простой синтаксис. Описание начинается с ключевого слова while. В круглых скобках после ключевого слова while указывается некоторое условие (выражение со значением логического типа). Затем в фигурных скобках указывается блок из команд, формирующих тело цикла. Общий синтаксис цикла while, таким образом, следующий:
while (условие) { // Команды }
Выполняется конструкция цикла while так. Сначала проверяется условие (в круглых скобках после ключевого слова while). Если условие истинно (значение true), то выполняются команды в теле цикла. После этого снова проверяется условие. Если оно истинно, то снова выполняются команды в теле цикла, после чего опять проверяется условие, и так далее. Конструкция цикла выполняется до тех пор, пока при проверке условия оно не окажется ложным (значение false). Если при проверке условия оно оказывается ложным, команды в теле цикла не выполняются, работа цикла завершается и управление передается следующей инструкции после конструкции цикла. Схема выполнения цикла while проиллюстрирована на рисунке 1.
Рис.1. Выполнение циклической конструкции while
Стоит заметить, что команды в теле цикла выполняются блоком, то есть условие в очередной раз проверяется только после того, как выполнены все команды в теле цикла. Условие, указанное в круглых скобках после ключевого слова while, должно быть таким, чтобы при выполнении команд в теле цикла оно в принципе могло измениться. Проще говоря, чтобы в конструкции цикла начали выполняться команды, условие в самом начале должно быть равно true. А чтобы конструкция цикла в какой-то момент завершила выполнение, условие должно стать равным false. Иначе получим бесконечный цикл.
Если в теле цикла всего одна команда, то фигурные скобки можно не использовать.
Далее мы рассмотрим небольшой пример, в котором используется оператор конструкция while. Программа очень простая - в ней вычисляется сумма первых n нечетных чисел 1 + 3 + 5 + ... + (2n - 1) (значение параметра n в программе определяется с помощью переменной).
Интересующий нас программный код представлен ниже.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pr38_1 { class Program { static void Main() { // Количество слагаемых в сумме, индексная // переменная и значение суммы: int n=10, k=1, s=0; // Отображение сообщения: Console.Write ("Сумма 1 + 3 + 5 +...+ {0} = ", 2*n-1); // Конструкция цикла: while( k <= n ) { s+=2*k-1; // Добавляем слагаемое в сумму k++; // Новое значение индексной переменной } // Отображение вычисленного значения: Console.WriteLine(s); Console.ReadLine(); } } }
Результат выполнения программы проедставлен на рисунке 2.
Рис.2. Результат работы приложения
В программе мы объявляем три целочисленные переменные. Переменная n со значением 10 определяет количество слагаемых в сумме. Переменная k с начальным значением 1 нам нужна для подсчета количества слагаемых, добавленных к значению суммы. Эту переменную будем называть индексной. Переменная s с начальным значением 0 нам понадобится для записи в эту переменную значения суммы. Перед началом вычислений командой
Console.Write ("Сумма 1 + 3 + 5 +...+ {0} = ", 2*n-1);
Console.Write ("Сумма 1 + 3 + 5 +...+ {0} = ", 2*n-1);
Здесь мы учли, что если вычисляется сумма n нечетных чисел, то последнее слагаемое в такой сумме равно 2n - 1.
Для вычисления суммы использована конструкция цикла while. В циклической конструкции указано условие k<=n - то есть цикл будет выполняться до тех пор, пока значение переменной k не превышает значения переменной n. Поскольку начальное значение переменной k равно 1, а значение переменной n равно 10, то при первой проверке условия k<=n его значение равно true (условие истинно). Поэтому начинается выполнение команд в теле цикла. Там их всего две. Сначала командой s+=2*k-1 к текущему значению суммы прибавляется очередное слагаемое, после чего командой k++ значение индексной переменной увеличивается на единицу.
После выполнения команд в теле цикла снова проверяется условие k<=n. Для использованных начальных значений переменных при второй проверке условие опять окажется истинным. Будут выполнены команды в теле оператора, потом снова начнется проверка условия. И так далее. Последний раз условие k<=n окажется истинным, когда значение переменной k будет равно значению переменной n. На этой итерации к значению переменной s прибавляется значение 2*n-1, а значение переменной k станет больше на единицу значения переменной n. В результате мри проверке условия k<=n оно окажется ложным, и конструкция цикла завершит свою работу.
По завершении цикла в переменную s записана искомая сумма нечетных чисел. Поэтому командой Console.WriteLine(s) вычисленное значение отображается в консольном окне.
На следующем шаге мы закончим изучение этого вопроса.