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