Оператор цикла while (цикл с предусловием)
Оператор цикла while используется для организации циклического выполнения тела цикла, пока выполняется некоторое условие:
while (<выражение>) <тело оператора>;
В конструкции while вычисляется выражение. Если его значение true, то выполняется тело оператора и выражение вычисляется снова. Этот цикл продолжается до тех пор, пока значение выражения не станет false, после чего выполнение программы продолжается с места после тела оператора. Оператор, стоящий после закрывающей скобки, задает тело цикла.
Пример 5. Вычислить сумму чисел от 1 до 100.
Способ 1 |
Способ 2 |
int s = 0, i = 1; while(i <= 100) { s = s + i; i++; } |
int s = 0; i = 100; while(i > 0) { s = s + i; i--; } |
В теле цикла к сумме s (изначально = 0) прибавляется слагаемое i (изначально = 1) и это слагаемое увеличивается на 1. Цикл закончит свое выполнение, когда слагаемое i станет равным 101 и не будет выполняться условие i <= 100. |
В теле цикла к сумме s (изначально = 0) прибавляется слагаемое i (изначально = 100) и это слагаемое уменьшается на 1. Цикл закончит свое выполнение, когда слагаемое i станет равным нулю и не будет выполняться условие i > 0. |
В данном примере два оператора в теле цикла можно заменить одним, например, так:
Способ 3 |
Способ 4 |
Способ 5 |
int s = 0, i = 1; while(i <= 100) s += i++;
|
int s = 0; i = 100; while(i > 0) s += i--; |
int s = 0, i = 0; while(i < 100) s += i++; |
Способ 5 аналогичен способу 3. Различие выделено красным цветом. Разберитесь самостоятельно, как здесь работает цикл.
Пример 6. Найти наибольший общий делитель (НОД) двух натуральных чисел p и q.
Классическая задача на правильный выбор оператора цикла. Рассмотрим «медленный НОД», в котором большее из двух чисел уменьшается на значение меньшего, пока числа не сравняются. Цикл for использовать нельзя, т.к. число итераций заранее неизвестно. Для учёта случая равных p и q проверку условия следует выполнять перед первой итерацией:
Console.Write("p=");
int p = int.Parse(Console.ReadLine());
Console.Write("q=");
int q = int.Parse(Console.ReadLine());
int pp = p, qq = q;
while (p != q)
if (p > q) p -= q;
else q -= p;
Console.WriteLine("НОД({0},{1})={2}", pp,qq,p);
Пример 7. Найти сумму цифр заданного натурального числа n.
В данной задаче необходимо извлекать из числа десятичные цифры и добавлять их к сумматору. Легче эти цифры брать из младшего десятичного разряда и, разделив число на 10, удалять их из числа. Очевидно, что цикл работает, пока число больше 0.
Console.Write("n=");
int n = int.Parse(Console.ReadLine());
int s=0;
while (n > 0)
{ s += n % 10;
n /= 10;
}
Console.WriteLine("Сумма цифр равна {0}", s);