Выбрать главу

Обратите внимание на оператор if в приведенной выше программе. Если значение переменной i равно нулю, то оператор if дает ложный результат. А если значение переменной i не равно нулю, то оператор if дает истинный результат, когда значение переменной i оказывается четным, и ложный результат, если оно нечетное. Благодаря этому допускается деление только на четные и ненулевые значения. Несмотря на то что данный пример служит лишь для целей демонстрации, подобные конструкции иногда оказываются весьма полезными. Использование пробелов и круглых скобок

В выражении на C# допускается наличие символов табуляции и пробелов, благо даря которым оно становится более удобным для чтения. Например, оба приведенных ниже выражения, по существу, одинаковы, но второе читается легче. х=10/у*(127+х); х = 10 / у * (127 + х);

Скобки могут служить для группирования подвыражений, по существу, повышая порядок предшествования заключенных в них операций, как в алгебре. Применение лишних или дополнительных скобок не приводит к ошибкам и не замедляет вычис ление выражения. Поэтому скобки рекомендуется использовать, чтобы сделать более ясным и понятным порядок вычисления как для самого автора программы, так и для тех, кто будет разбираться в ней впоследствии. Например, какое из двух приведенных ниже выражение легче читается? х = у/3-34*temp+127; х = (у/3) - (34*temp) + 127; Предшествование операторов

В табл. 4.2 приведен порядок предшествования всех операторов в С#: от самого вы сокого до самого низкого. В таблицу включен ряд операторов, рассматриваемых далее в этой книге. Наивысший порядок () [] . ++ (постфиксный) -- (постфиксный) checked new sizeof typeof unchecked ! ~ (приведение типов) + (унарный) - (унарный) ++ (префиксный) -- (префиксный) * / % << >> < > <= >= is == != & ^ | && || ?? ?: = op= => Наинизший порядок

ГЛАВА 5. Управляющие операторы

В этой главе речь пойдет об операторах, управляющих ходом выполнения программы на С#. Управляющие операторы разделяются на три категории: операторы выбора, к числу которых относятся операторы if и switch, итерационные операторы, в том числе операторы цикла for, while, do-while и foreach, а также операторы пере хода: break, continue, goto, return и throw. За исклю чением оператора throw, который является неотъемлемой частью встроенного в C# механизма обработки исключи тельных ситуаций, рассматриваемого в главе 13, все осталь ные управляющие операторы представлены в этой главе. Оператор if

Оператор if уже был представлен в главе 2, а здесь он рассматривается более подробно. Ниже приведена полная форма этого оператора: if(условие) оператор; else оператор;

где условие — это некоторое условное выражение, a опe- ратор — адресат операторов if и else. Оператор else не является обязательным. Адресатом обоих операторов, if и else, могут также служить блоки операторов. Ниже приведена общая форма оператора if, в котором исполь зуются блоки операторов. if(условие) { последовательность операторов } else { последовательность операторов }

Если условное выражение оказывается истинным, то выполняется адресат операто ра if. В противном случае выполняется адресат оператора else, если таковой суще ствует. Но одновременно не может выполняться и то и другое. Условное выражение, управляющее оператором if, должно давать результат типа bool.

Ниже приведен пример простой программы, в которой операторы if и else используются для того, чтобы сообщить, является ли число положительным или отрицательным. // Определить, является ли числовое значение положительным или отрицательным. using System; class PosNeg { static void Main() { int i; for(i=-5; i <= 5; i++) { Console.Write("Проверка " + i + "); if(i < 0) Console.WriteLine("отрицательное число”); else Console.WriteLine("положительное число"); } } }

Результат выполнения этой программы выглядит следующим образом. Проверка -5: отрицательное число Проверка -4: отрицательное число Проверка -3: отрицательное число Проверка -2: отрицательное число Проверка -1: отрицательное число Проверка 0: положительное число Проверка 1: положительное число Проверка 2: положительное число Проверка 3: положительное число Проверка 4: положительное число Проверка 5: положительное число

Если в данном примере значение переменной i оказывается меньше нуля, то вы полнятся адресат оператора if. В противном случае выполняется адресат оператора else, одновременно они не выполняются. Вложенные операторы if

Вложенным называется такой оператор if, который является адресатом другого оператора if или же оператора else. Вложенные операторы if очень часто приме няются в программировании. Что же касается их применения в С#, то не следует забы вать, что любой оператор else всегда связан с ближайшим оператором if, т.е. с тем оператором if, который находится в том же самом блоке, где и оператор else, но не с другим оператором else. Рассмотрим следующий пример. if (i == 10) { if(j < 20) a = b; if(k > 100) с = d; else a = с; // этот оператор else связан с оператором if(k > 100) } else a = d; // этот оператор else связан с оператором if(i == 10)

Как следует из комментариев к приведенному выше фрагменту кода, последний оператор else не связан с оператором if(j < 20), поскольку они не находятся в одном и том же блоке, несмотря на то, что этот оператор является для него ближай шим оператором if без вспомогательного оператора else. Напротив, последний опе ратор else связан с оператором if(i == 10). А внутренний оператор else связан с оператором if(k > 100), поскольку этот последний является для него ближайшим оператором if в том же самом блоке.

В приведенном ниже примере программы демонстрируется применение вложен ного оператора if. В представленной ранее программе определения положительных и отрицательных чисел о нуле сообщалось как о положительном числе. Но, как прави ло, нуль считается числом, не имеющим знака. Поэтому в следующей версии данной программы о нуле сообщается как о числе, которое не является ни положительным, ни отрицательным. // Определить, является ли числовое значение // положительным, отрицательным или нулевым. using System; class PosNegZero { static void Main() { int i; for(i=-5; i <= 5; i++) { Console.Write("Проверка " + i + ": "); if(i < 0) Console.WriteLine("отрицательное число"); else if(i == 0) Console.WriteLine("число без знака"); else Console.WriteLine ("положительное число"); } } }

Ниже приведен результат выполнения этой программы. Проверка -5: отрицательное число Проверка -4: отрицательное число Проверка -3: отрицательное число Проверка -2: отрицательное число Проверка -1: отрицательное число Проверка 0: число без знака Проверка 1: положительное число Проверка 2: положительное число Проверка 3: положительное число Проверка 4: положительное число Проверка 5: положительное число Конструкция if-else-if

В программировании часто применяется многоступенчатая конструкция if-elseif, состоящая из вложенных операторов if. Ниже приведена ее общая форма. if(условие) оператор; else if (условие) оператор; else if (условие) оператор; else оператор;

Условные выражения в такой конструкции вычисляются сверху вниз. Как только обнаружится истинное условие, выполняется связанный с ним оператор, а все осталь ные операторы в многоступенчатой конструкции опускаются.

Если ни одно из условий не является истинным, то выполняется последний опера тор else, который зачастую служит в качестве условия, устанавливаемого по умол чанию. Когда же последний оператор else отсутствует, а все остальные проверки по условию дают ложный результат, то никаких действий вообще не выполняется.

В приведенном ниже примере программы демонстрируется применение многосту пенчатой конструкции if-else-if. В этой программе обнаруживается наименьший множитель заданного целого значения, состоящий из одной цифры. // Определить наименьший множитель заданного // целого значения, состоящий из одной цифры. using System; class Ladder { static void Main() { int num; for(num = 2; num < 12; num++) { if((num % 2) == 0) Console.WriteLine("Наименьший множитель числа " + num + " равен 2."); else if((num % 3) == 0) Console.WriteLine("Наименьший множитель числа " + num + " равен 3."); else if((num % 5) == 0) Console.WriteLine("Наименьший множитель числа " + num + " равен 5."); else if((num % 7) == 0) Console.WriteLine("Наименьший множитель числа " + num + " равен 7."); else Console.WriteLine(num + " не делится на 2, 3, 5 или 7."); } } }

Вот к какому результату приводит выполнение этой программы. Наименьший множитель числа 2 равен 2 Наименьший множитель числа 3 равен 3 . . . Наименьший множитель числа 4 равен 2 Наименьший множитель числа 5 равен 5 Наименьший множитель числа 6 равен 2 Наименьший множитель числа 7 равен 7 Наименьший множитель числа 8 равен 2 Наименьший множитель числа 9 равен 3 Наименьший множитель числа 10 равен 2 11 не делится на 2, 3, 5 или 7.

Как видите, последний оператор else выполняется лишь в том случае, если не удается выполнить ни один из предыдущих операторов. Оператор switch

Вторым оператором выбора в C# является оператор switch, который обеспечивает многонаправленное ветвление программы. Следовательно, этот оператор позволяет сделать выбор среди нескольких альтернативных вариантов дальнейшего выполнения программы. Несмотря на то что многонаправленная проверка может быть организо вана с помощью последовательного ряда вложенных операторов if, во многих слу чаях более эффективным оказывается применение оператора switch. Этот оператор действует следующим образом. Значение выражения последовательно сравнивается с константами выбора из заданного списка. Как только будет обнаружено совпадение с одним из условий выбора, выполняется последовательность операторов, связанных с этим условием. Ниже приведена общая форма оператора switch. switch(выражение) { case константа1: последовательность операторов break; case константа2: последовательность операторов break; case константа3: последовательность операторов break; default: последовательность операторов break; }