Шаг 40.
Язык программирования C#. Начала
Управляющие инструкции. Цикл do-while

    На этом шаге мы рассмотрим особенности использования этой конструкции.

    Синтаксис циклической конструкции 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.




Предыдущий шаг Содержание Следующий шаг