Полное руководство. С# 4.0 - Шилдт Герберт
Шрифт:
Интервал:
Закладка:
Результат выполнения этой программы выглядит следующим образом.Проверка -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 равен 211 не делится на 2, 3, 5 или 7.
Как видите, последний оператор else выполняется лишь в том случае, если неудается выполнить ни один из предыдущих операторов.Оператор switch
Вторым оператором выбора в C# является оператор switch, который обеспечиваетмногонаправленное ветвление программы. Следовательно, этот оператор позволяетсделать выбор среди нескольких альтернативных вариантов дальнейшего выполненияпрограммы. Несмотря на то что многонаправленная проверка может быть организована с помощью последовательного ряда вложенных операторов if, во многих случаях более эффективным оказывается применение оператора switch. Этот оператордействует следующим образом. Значение выражения последовательно сравниваетсяс константами выбора из заданного списка. Как только будет обнаружено совпадениес одним из условий выбора, выполняется последовательность операторов, связанныхс этим условием. Ниже приведена общая форма оператора switch.switch(выражение) { case константа1: последовательность операторов break; case константа2: последовательность операторов break; case константа3: последовательность операторов break; default: последовательность операторов break;}
Заданное выражение в операторе switch должно быть целочисленного типа (char,byte, short или int), перечислимого или же строкового. (О перечислениях и символьных строках типа string речь пойдет далее в этой книге.) А выражения другихтипов, например с плавающей точкой, в операторе switch не допускаются. Зачастуювыражение, управляющее оператором switch, просто сводится к одной переменной.Кроме того, константы выбора должны иметь тип, совместимый с типом выражения.В одном операторе switch не допускается наличие двух одинаковых по значениюконстант выбора.
Последовательность операторов из ветви default выполняется в том случае, еслини одна из констант выбора не совпадает с заданным выражением. Ветвь default неявляется обязательной. Если же она отсутствует и выражение не совпадает ни с однимиз условий выбора, то никаких действий вообще не выполняется. Если же происходитсовпадение с одним из условий выбора, то выполняются операторы, связанные с этимусловием, вплоть до оператора break.
Ниже приведен пример программы, в котором демонстрируется применение оператора switch.// Продемонстрировать применение оператора switch.using System;class SwitchDemo { static void Main() { int i; for(i=0; i<10; i++) switch(i) { case 0: Console.WriteLine("i равно нулю"); break; case 1: Console.WriteLine("i равно единице"); break; case 2: Console.WriteLine("i равно двум"); break; case 3: Console.WriteLine("i равно трем"); break; case 4: Console.WriteLine("i равно четырем"); break; default: Console.WriteLine("i равно или больше пяти"); break; } }}
Результат выполнения этой программы выглядит следующим образом.i равно нулю.i равно единице.i равно двум.i равно трем.i равно четырем.i равно или больше пяти.i равно или больше пяти.i равно или больше пяти.i равно или больше пяти.i равно или больше пяти.