Третьей формой оператора цикла является цикл do... while. Он имеет форму:
do
оператор;
while (условие);
Отличие от предыдущей формы цикла while заключается в том, что условие проверяется после выполнения тела цикла, поэтому данный формат циклов называется циклом с постусловием. Предположим, требуется прочитать символы с клавиатуры до тех пор, пока не будет введен символ "звездочка".
int ch;
do
ch = Console.Read();
while (ch!='*');
В операторах while и do также можно использовать операторы break и continue.
Как легко заметить, операторы цикла взаимозаменяемы. Оператор while соответствует оператору for:
For (; условие;)
Оператор
Пример чтения символов с терминала можно переписать в виде:
int ch;
ch = Console.Read();
while (ch!= '*')
ch = Console.Read();
Итерационные циклы
Циклический процесс, выполняющийся до достижения некоторого условия, называется итерационным. Учитывая неизвестность конечного числа шагов итерационного алгоритма, необходимо предусмотреть вариант зацикливания и сформулировать корректное условие для выхода из цикла. В самом простом случае, а также на этапе отладки алгоритма, достаточно поставить лимит числа шагов с выдачей сообщения в случае его исчерпания.
В итерационных алгоритмах заданная погрешность используется для проверки модуля разности найденного приближенного и точного значений. В случае, когда точное значение неизвестно, допустимо оценивать разность между соседними итерациями.
Значащими цифрами числа называются все цифры в его десятичной записи, кроме крайних левых и крайних правых нулей.
При решении задач, как правило, нет необходимости хранить промежуточные итерации – достаточно получения окончательного результата и (в итерационных алгоритмах) числа шагов, проделанных для достижения условия – для оценки скорости сходимости алгоритма.
Часто в задачах для вычисления очередного слагаемого удобно рекуррентно использовать предыдущее слагаемое, а не организовывать дополнительный (внутренний) цикл.
Примеры программ
Простые циклы
Вычислить значение факториала f=n! (n≤20) с использованием трех вариантов цикла. (f = n! = 1*2*3*…*n).
Внешний вид формы показан на рисунке 4.1.
Рисунок 4.1 – Главная форма приложения
В данном случае число n будем вводить с помощью компонента NumericUpDown (счетчик). В его свойства Minimum и Maximum можно задать соответственно минимальное и максимальное значения числа n (в нашем случае: 1 и 20). А свойство Value позволяет получить или установить текущее значение счетчика. При проектировании формы свойству Value было присвоено значение 10. Свойство Value имеет тип decimal, поэтому, чтобы преобразовать его в значение другого типа (у нас – в int), нужно использовать функции преобразования типов:
int n = Convert.ToInt32(numericUpDown1.Value.ToString());
Оператор цикла for:
private void button1_Click(object sender, EventArgs e) { int n = Convert.ToInt32 (numericUpDown1.Value.ToString()); long f = 1; for (int i = 1; i <= n; i++) f *= i; label2.Text = "n! = " + f.ToString(); } |
Оператор цикла while
private void button1_Click(object sender, EventArgs e) { long f = 1; int i = 1; int n = Convert.ToInt32 (numericUpDown1.Value.ToString()); while (i <= n) { f *= i; i++; } label2.Text = "n! = " + f.ToString(); } |