Полное руководство. С# 4.0 - Шилдт Герберт
Шрифт:
Интервал:
Закладка:
Выполнение этой программы дает следующий результат.Сумма равна 15
Обратите внимание на то, что процесс суммирования выполняется полностьюв операторе цикла for, и для этого тело цикла не требуется. В этом цикле особое внимание обращает на себя итерационное выражение.sum += i++
Подобные операторы не должны вас смущать. Они часто встречаются в программах, профессионально написанных на С#, и становятся вполне понятными, если разобрать их по частям. Дословно приведенный выше оператор означает следующее: сложить со значением переменной sum результат суммирования значений переменныхsum и i, а затем инкрементировать значение переменной i. Следовательно, данныйоператор равнозначен следующей последовательности операторов.sum = sum + i;i++;Объявление управляющих переменных в цикле for
Нередко переменная, управляющая циклом for, требуется только для выполнениясамого цикла и нигде больше не используется. В таком случае управляющую переменную можно объявить в инициализирующей части оператора цикла for. Например, в приведенной ниже программе вычисляется сумма и факториал чисел от 1 до 5,а переменная i, управляющая циклом for, объявляется в этом цикле.// Объявить переменную управления циклом в самом цикле for.using System;class ForVar { static void Main() { int sum = 0; int fact = 1; // вычислить факториал чисел от 1 до 5 for (int i = 1; i <= 5; i++) { sum += i; // Переменная i действует в цикле. fact *= i; } // А здесь переменная i недоступна. Console.WriteLine("Сумма равна " + sum); Console.WriteLine("Факториал равен " + fact); }}
Объявляя переменную в цикле for, не следует забывать о том, что область действияэтой переменной ограничивается пределами оператора цикла for. Это означает, чтоза пределами цикла действие данной переменной прекращается. Так, в приведенномвыше примере переменная i оказывается недоступной за пределами цикла for. Длятого чтобы использовать переменную управления циклом в каком-нибудь другом месте программы, ее нельзя объявлять в цикле for.
Прежде чем переходить к чтению следующего материала, поэкспериментируйтес собственными разновидностями оператора цикла for. В ходе эксперимента вы непременно обнаружите замечательные свойства этого оператора цикла.Оператор цикла while
Еще одним оператором цикла в C# является оператор while. Ниже приведенаобщая форма этого оператора:while (условие) оператор;
где оператор — это единственный оператор или же блок операторов, а условие означает конкретное условие управления циклом и может быть любым логическим выражением. В этом цикле оператор выполняется до тех пор, пока условие истинно. Кактолько условие становится ложным, управление программой передается строке кода,следующей непосредственно после цикла.
Ниже приведен простой пример программы, в которой цикл while используетсядля вычисления порядка величины целого числа.// Вычислить порядок величины целого числа.using System;class WhileDemo { static void Main() { int num; int mag; num = 435679; mag = 0; Console.WriteLine("Число: " + num); while(num > 0) { mag++; num = num / 10; }; Console.WriteLine("Порядок величины: " + mag); }}
Выполнение этой программы дает следующий результат.Число: 435679Порядок величины: 6
Приведенный выше цикл while действует следующим образом. Сначала проверяется значение переменной num. Если оно больше нуля, то переменная mag, выполняющая роль счетчика порядка величины, инкрементируется, а значение переменной numделится на 10. Цикл повторяется до тех пор, пока значение переменной num остаетсябольше нуля. Как только оно окажется равным нулю, цикл завершается, а в переменной mag остается порядок величины первоначального числового значения.
Как и в цикле for, в цикле while проверяется условное выражение, указываемоев самом начале цикла. Это означает, что код в теле цикла может вообще не выполняться, а также избавляет от необходимости выполнять отдельную проверку перед самимциклом. Данное свойство цикла while демонстрируется в следующем примере программы, где вычисляются целые степени числа 2 от 0 до 9.// Вычислить целые степени числа 2.using System;class Power { static void Main() { int e; int result; for(int i=0; i < 10; i++) { result = 1; e = i; while (e > 0) { result *= 2; e--; } Console.WriteLine("2 в степени " + i + " равно " + result); } }}
Результат выполнения этой программы приведен ниже.2 в степени 0 равно 12 в степени 1 равно 22 в степени 2 равно 42 в степени 3 равно 82 в степени 4 равно 162 в степени 5 равно 322 в степени 6 равно 642 в степени 7 равно 1282 в степени 8 равно 2562 в степени 9 равно 512
Обратите внимание на то, что цикл while выполняется только в том случае, еслизначение переменной е больше нуля. А когда оно равно нулю, как это имеет место напервом шаге цикла for, цикл while пропускается.Оператор цикла do-while
Третьим оператором цикла в C# является оператор do-while. В отличие от операторов цикла for и while, в которых условие проверялось в самом начале цикла,в операторе do-while условие выполнения цикла проверяется в самом его конце. Этоозначает, что цикл do-while всегда выполняется хотя бы один раз. Ниже приведенаобщая форма оператора цикла do-while.do {операторы;} while (условие);
При наличии лишь одного оператора фигурные скобки в данной форме записинеобязательны. Тем не менее они зачастую используются для того, чтобы сделать конструкцию do-while более удобочитаемой и не путать ее с конструкцией цикла while.Цикл do-while выполняется до тех пор, пока условное выражение истинно.
В приведенном ниже примере программы цикл do-while используется для представления отдельных цифр целого числа в обратном порядке.// Отобразить цифры целого числа в обратном порядке.using System;class DoWhileDemo { static void Main() { int num; int nextdigit; num = 198; Console.WriteLine("Число: " + num); Console.Write("Число в обратном порядке: "); do { nextdigit = num % 10; Console.Write(nextdigit); num = num / 10; } while(num > 0); Console.WriteLine(); }}
Выполнение этой программы дает следующий результат.Число: 198Число в обратном порядке: 891
Приведенный выше цикл действует следующим образом. На каждом его шагекрайняя слева цифра получается в результате расчета остатка от деления целого числа(значения переменной num) на 10. Полученная в итоге цифра отображается. Далее значение переменной num делится на 10. А поскольку это целочисленное деление, то в егорезультате крайняя слева цифра отбрасывается. Этот процесс повторяется до тех пор,пока значение переменной num не достигнет нуля.Оператор цикла foreach
Оператор цикла foreach служит для циклического обращения к элементам коллекции, которая представляет собой группу объектов. В C# определено несколько видов коллекций, к числу которых относится массив. Подробнее о цикле foreach речьпойдет в главе 7, где рассматриваются массивы.Применение оператора break для выхода из цикла
С помощью оператора break можно специально организовать немедленный выход из цикла в обход любого кода, оставшегося в теле цикла, а также минуя проверкуусловия цикла. Когда в теле цикла встречается оператор break, цикл завершается,а выполнение программы возобновляется с оператора, следующего после этого цикла.
Рассмотрим простой пример программы.// Применить оператор break для выхода из цикла.using System;class BreakDemo { static void Main() { // Использовать оператор break для выхода из этого цикла. for(int i=-10; i <= 10; i++) { if(i > 0) break; // завершить цикл, как только значение // переменной i станет положительным Console.Write(i + " "); } Console.WriteLine("Готово!"); }}
Выполнение этой программы дает следующий результат.-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 Готово!
Как видите, цикл for организован для выполнения в пределах от -10 до 10, но, несмотря на это, оператор break прерывает его раньше, когда значение переменной iстановится положительным.