Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 24
Текст из файла (страница 24)
Операторы 115 х=10/у*(127ьх)т х = 10 / у * (127 ь х)т Скобки могут служить для группирования подвыражений, по существу, повышая порядок предшествования заключенных в них операций, как в алгебре. Применение лишних или дополнительных скобок не приводит к ошибкам и не замедляет вычисление выражения. Поэтому скобки рекомендуется использовать, чтобы сделать более ясным и понятным порядок вычисления как для самого автора программы, так и для тех, кто будет разбираться в ней впоследствии.
Например, какое из двух приведенных ниже выражение легче читается? х = у/3-34*Сеирь1274 х = (у/3) — (34*сеир) ь 1274 Предшествование операторов В табл. 4.2 приведен порядок предшествования всех операторов в С№: от самого высокого до самого низкого. В таблицу включен ряд операторов, рассматриваемых далее в этой книге. Таблица 4.2. Предшеотвование операторов в С№ Нвтвпыиий порппок Нвиииипий передок ГЛАВА Управляющие операторы в этой главе речь пойдет об операторах, управляющих ходом выполнения программы на С)). Управляющие операторы разделяются на три категории: операторы выбора, к числу которых относятся операторы 1й и зивссп, итерационные операторы, в том числе операторы цикла йог, ип11е, бо-иЫ1е и 1огеасЬ, а также операторы перехода: Ьгеах, сопгхппе, оого, гегпгп и СЬгож За исключением оператора сьгои, который является неотъемлемой частью встроенного в С)) механизма обработки исключительных ситуаций, рассматриваемого в главе 13, все остальные управляющие операторы представлены в этой главе.
Оператор ~й Оператор 1й уже был представлен в главе 2, а здесь он рассматривается более подробно. Ниже приведена полная форма этого оператора. 1Г)условие) оператор; е1ве оператор; где условие — это некоторое условное выражение, а оператор — адресат операторов 1й и е1зе. Оператор е1зе не является обязательным. Адресатом обоих операторов, 1й и е1зе, могут также служить блоки операторов.
Ниже приведена общая форма оператора 1Г, в котором используются блоки операторов. хй)условие) ( последовательиость операторов ) е1ве ( последовательиость операторов ) Если условное выражение оказывается истинным, то выполняется адресат оператора Ей. В противном случае выполняется адресат оператора е1 ее, если таковой существуег. Но одновременно не может выполняться и то и другое. Условное выражение, управляющее оператором 1г, должно давать результат типа Ьоо1. 118 часть (. йзмк с№ Ниже приведен пример простой программы, в которой операторы 1г и е1зе используются для того, чтобы сообщить, является ли число положительным или отрицательным. // Определить, является ли числовое значение // цоложительннм или отрицательньвт.
сагнэ зузвеит с1ааз Розпеп ( атаС1с чо1т( Ма1п() ( 1пв 1) Гос(1=-5т 1 <= 5; 1++) ( Сопао1е.нттье("Проверка " + 1 + ": "); 1№(1 < 0) Сопао1е.нтааеьгпе("отрицательное число"); е1ае Сопао1е.нтгветгпе("положительное число"); ) ) Результат выполнения этой программы выглядит следующим образом: Проверка -5: отрицательное число Проверка -4: отрицательное число Проверка -3: отрицательное число Проверка -2: отрицательное число Проверка -1: отрицательное число Проверка О: положительное число Проверка 1: положительное число Проверка 2: положительное число Проверка 3: положительное число Проверка 4: положительное число Проверка 5: положительное число Если в данном примере значение переменной 1 оказывается меньше нуля, то выполнятся адресат оператора 1г.
В противном случае выполняется адресат оператора е1зе. Но одновременно не выполняется ни то ни другое. Вложенные операторы ~Е Вложенным называется такой оператор 1г, который является адресатом другого оператора 11 или же оператора е1зе. Вложенные операторы 11 очень часто применяются в программировании. Что же касается их применения в С№, то не следует забывать, что любой оператор е1зе всегда связан с ближайшим оператором 1т, т.е. с тем оператором 11, который находится в том же самом блоке, где и оператор е1зе, но не с другим оператором е1ае. Рассмотрим следующий пример.
11 (1 == 10) ( 1№(3 < 20) а = Ьт 11 ()< > 100) с С) е1ае а = с; // этот оператор е1ае связан с // оператором 11(К > 100) ) е1зе а = о) // этот оператор е1ае связан с // оператором 11(1 == 10) Глава 5. упраеяеюо(ве операторы 119 Как следует из комментариев к приведенному выше фрагменту кода, последний оператор е1яе не связан с оператором 1г (З < 20), поскольку они не находятся в одном и том же блоке, несмотря на то, что зтот оператор является для него ближайшим оператором 11 без вспомогательного оператора е1яе. Напротив, последний оператор е1яе связан с оператором 1г (1 == 10). А внутренний оператор е1яе связан с оператором 1г ()< > 100), поскольку зтот последний является для него ближайшим оператором 1г в том же самом блоке. В приведенном ниже примере программы демонстрируется применение вложенного оператора 11. В представленной ранее программе определения положительных и отрицательных чисел о нуле сообщалось как о положительном числе. Но, как правило, нуль считается числом, не имеющим знака.
Позтому в следующей версии данной программы о нуле сообщается как о числе, которое не является ни положительным, ни отрицательным. // Определить, является ли числовое значение // положительным, отрицательным или нулевым. цягпо Буяоепы с1аяя Рояыееяеко ( ягакгс чо1б Иатп() ( 1по 1; ток(1=-5т 1 <= 5; 1+т) ( Сопяо1е.икгсе("Проверка " т 1 + ": ")т 11(1 < О) СОПяО1Е.ИК1СЕП1ПЕ(жбтрнцатЕЛЬНОЕ ЧИСЛО" ); е1яе 11(1 == О) Сопяо1е.Икгое11пе("число без знака"); е1яе Сопяо1е.ик1те51пе("полояоттельное число"); ) ) ) Ниже приведен результат выполнения этой программы.
Конструкция ~й-елее-й.й В программировании часто применяется многосшулеичатая конструкция 11-е1яе-гг, состоящая нз вложенных операторов 11. Ниже'приведена ее общая форма. 11 ( условие) оператор) е1яе 11 (условие) оператор; е1яе 11 (условие) Проверка Проверка Проверка Проверка Проверка Проверка Проверка Проверка Проверка Проверка Проверка -5: отрицательное число -4: отрицательное число -3: отрицательное число -2: отрицательное число -1: отрицательное число 0: число без знака 1: положительное число 2: положительное число 3: положительное число 4: положительное число 5: положительное число 120 Часть (.
Язык С№ оператор; е1зе оператор; Условные выражения в такой конструкции вычисляются сверху вниз. Как только обнаружится истинное условие, выполняется связанный с ним оператор, а все остальные операторы в многоступенчатой конструкции опускаются. Если ни одно из условий не является истинным, то выполняется последний оператор е1зе, который зачастую служит в качестве условия, устанавливаемого по умолчанию. Когда же последний оператор е1зе отсутствует, а все остальные проверки по условию дают ложный результат, то никаких действий вообще не выполняется. В приведенном ниже примере программы демонстрируется применение многоступенчатой конструкции 11-е18 е-11.
В этой программе обнаруживается наименьший множитель заданного целого значения, состоящий из одной цифры. // Определить наименьший множитель заданного // целого значения, состояший из одной цифры. цвапч зувсеш) с1авв Ьаеп(ег ( всасас чо1п( Маап() ( Ьпс пппш Гог(пцш = 2) пцш < 12) пцшь+) ( 11((пцш а 2) == О) Сопво1е.нг1сеЬ1пе("Наименьший множитель числа " + пцш + " равен 2."); е1зе 11((ппш $ 3) == О) Сопво1е.Иг1сеь№пе("Наименьший множитель числа " + пцш + " равен 3.")т е1ве 11((пшп Ъ 5) == О) Сопво1е.ИгасеЬЬпе("Наименьший множитель числа " + ппш + " равен 5.")) е1зе 18((пцш й 7) == О) Сопзо1е.нг1сеЬ1пе("Наименьший множитель числа " + пап + " 1з 7.")) е1ве Сопво1е.иг1гецапе(пцш + " не делится на 2, 3, 5 или 7.")т ) ) ) Вот к какому результату приводит выполнение этой программы: Наименьший множитель числа 2 равен 2 Наименьший множитель числа 3 равен 3 Наименьший множитель числа 4 равен 2 Наименьший множитель числа 5 равен 5 Наименьший множитель числа б равен 2 Наименьший мнопоктель числа 7 равен 7 Наименьший множитель числа 8 равен 2 Глава 5, Управляющие операторы 121 Наименьший множитель числа 9 равен 3 Наименьший множитель числа 10 равен 2 11 не делится на 2, 3, 5 нли 7.
Как видите, последний оператор е1зе выполняется лишь в том случае, если не удается выполнить ни один из предыдущих операторов. Оператор ви~1сь Вторым оператором выбора в С№ является оператор зн)гсЬ, который обеспечивает многонаправленное ветвление программы. Следовательно, этот оператор позволяет сделать выбор среди нескольких альтернативных вариантов дальнейшего выполнения программы. Несмотря на то что многонаправленная проверка может быть организована с помощью последовательного ряда вложенных операторов 1Г, во многих случаях более эффективным оказывается применение оператора зм№ссЬ.
Этот оператор действует следующим образом. Значение выражения последовательно сравнивается с константами выбора из заданного списка. Как только будет обнаружено совпадение с одним из условий выбора, выполняется последовательность операторов, связанных с этим условием. Ниже приведена общая форма оператора зм)сстт. знгссЬ(нырзженне) ( сазе константа1: последовательность операторов Ьтеаит сазе константа2; последовательность аператорое Ьтеаам сазе константа3: последовательность операторов Ьтеащ Невач1тм последовательность операторов Ьтеаам Заданное выражение в операторе змйссЬ должно быть целочисленного типа (сЬаг, Ьусе, зпогс или 1пс), перечислимого или же строкового. (О перечислениях и символьных строках типа зсг1по речь пойдет далее в этой книге.) А выражения'других типов, например с плавающей точкой, в операторе зм1ссЬ не допускаются.
Зачастую выражение, управляющее оператором змььсЬ, просто сводится к одной переменной. Кроме того, константы выбора должны иметь тип, совместимый с типом выражения. В одном операторе зн1ссЬ не допускается наличие двух одинаковых по значению констант выбора. Последовательность операторов из ветви с3егао1ь выполняется в том случае, если ни одна из констант выбора не совпадает с заданным выражением. Ветвь стегао1Ь не является обязательной. Если же она отсутствует и выражение не совпадает ни с одним из условий выбора, то никаких действий вообще не выполняется. Если же происходит совпадение с одним из условий выбора, то выполняются операторы, связанные с этим условием, вплоть до оператора Ьгеак.
122 Часть). Язык С№ Ниже приведен пример программы, в котором демонстрируется применение оператора знтссп. // Продемонстрировать применение оператора зн1гсЬ. цзьпд Бузгеш; с1азз зиьгсвпешо ( зсас1с чоьб Маьп() ( ьпс 1; Гог(1=0) 1<10) 1++) зи1ссЬ (1) ( сазе 0: Сопзо1е.Иг1севьпе("1 Ьгеак; сазе 1: Сопзо1е.игьсепьпе("). Ьгеакк сазе 2: Сопзо1е.игькевьпе("). Ьгеавш сазе 3: Сопзо1е.иг1се11пе("1 Ьгеавш сазе 4: Сопзо1е.Иг1сепьпе("1 Ьгеа)<) бетао1Г: Сопзо1е.иг1ке11пе("1 Ьгеакп ) равно нулю"); равно единице") равно двум"); равно трем"); равно четырем"); равно или больше пяти"); Результат выполнения этой программы выглядит следуюшим образом.