Г. Шилдт - С#4.0 Полное руководство (1160795), страница 23
Текст из файла (страница 23)
Поэтому скобки рекомендуется использовать, чтобы сделать более ясным и понятным порядок вычисления как для самого автора программы, так и для тех, кто будет разбираться в ней впоследствии. Например, какое из двух приведенных ниже выражение легче читается? х = у/3-34*леер+127) х = (у/3) — (34*леер) + 1271 Предшествование операторов В табл. 4.2 приведен порядок предшесгвования всех операторов в С№: от самого высокого до самого низкого. В таблицу включен ряд операторов, рассматриваемых далее в этой книге.
о Э а > о о Э Е .О х м о о о а с з В И ! Е. ь о о о Е Ф а с 'о Э М о Э .о о Ы ь о Ь о (О о О л о о Э о о о а с Ш о К е О О а О о м и .О о о о а о ОО СЭ во о о 6 о ° $ о $: ФЧ Ф о о л х Ь% о— + с л и л л— 1И о ,л о о О " ф О о о 122 Часть!.
Язык С() е1зе ( последовательность операторов ) Если условное выражение оказывается истинным, то выполняется адресат оператора 1й. В противном случае выполняется адресат оператора е1зе, если таковой существует. Но одновременно не может выполняться и то и другое. Условное выражение, управляющее оператором йг, должно давать результат типа )зоо1. Ниже приведен пример простой программы, в которой операторы 1г и е1зе используются для того, чтобы сообщить, является ли число положительным или отрицательным. !/ Определить, является ли числовое значение положительным или отрицательным.
цзгпп Зузсеи4 с1ззз Розкее ( згатгс то1С Наьп() ( гпг 14 Гог (1=-5; 1 <= 5( 1++) Сопзо1е.нггте("Проверка " + 1 Ь ": "); 15(1 < 0) Сопзо1е.ит1сеььпе("отрицательное число"); е1зе Сопзо1е.итьсеььпе("положительное число"); ! ) Результат выполнения этой программы выглядит следующим образом. Проверка -5: отрицательное число Проверка -4: отрицательное число Проверка -3: отрицательное число Проверка -2: отрицательное число Проверка -1: отрицательное число Проверка О: положительное число Проверка 1: положительное число Проверка 2: положительное число Проверка 3: положительное число Проверка 4: положительное число Проверка 5." положительное число Если в данном примере значение переменной 1 оказывается меньше нуля, то выполнятся адресат оператора 15.
В противном случае выполняется адресат оператора е1ее, одновременно они не выполняются. Вложенные операторы Ы Вложенным называется такой оператор 1г, который является адресатом другого оператора 15 или же оператора е1зе. Вложенные операторы 15 очень часто применяются в программировании. Что же касается их применения в С)), то не следует забывать, что любой оператор е1зе всегда связан с ближайшим оператором 15, т.е. с тем Глава б. Управляюв(ие операторы 123 оператором г 5, который находится в том же самом блоке, где и оператор е1 ее, но не с другим оператором е1зе. Рассмотрим следующий пример.
11(1 == 10) 11(1 < 20) з = )М гт(К '> 100) с = С," е1зе а = с; О этот оператор е1зе связан с оператором гс(к > 100) ) е1зе а = с(; // этот оператор е1зе связан с оператором 11(1 == 10) Как следует из комментариев к приведенному выше фрагменту кода, последний оператор е1зе не связан с оператором 1г (3 < 20), поскольку они не находятся в одном и том же блоке, несмотря на то, что этот оператор является для него ближайшим оператором 15 без вспомогательного оператора е1з е. Напротив, последний оператор е1зе связан с оператором 11 (г == 10) . А внутренний оператор е1зе связан с оператором ) 1 ()с > 1 0 0 ), поскольку этот последний является для него ближайшим оператором г1 в том же самом блоке.
В приведенном ниже примере программы демонстрируется применение вложенного оператора гг. В представленной ранее программе определения полох<ительных и отрицательных чисел о нуле сообщалось как о положительном числе. Но, как правило, нуль считается числом, не имеющим знака. Поэтому в следующей версии данной программы о нуле сообщается как о числе, которое не является ни положительным, ни отрицательным. // Определить, является ли числовое значение // положительным, отрицательньп< или нулевым. оз1пд Бузсевп с1азз РозпедЕего ( зсасгс чогс Ма1п() ( гпг Гог(1=-5; г <= 5: 1++) ( Сопзо1е.пг1се("Проверка " + г гг(1 < О) сопзо1е.хг1геь1пе("отрицательное число" ); е1зе гт(г == О] Сопзо1е.игасевгпе("число без знака" ); е1зе Сопзо1е.нгтгевгпе("положительное число"); ) ) Ниже приведен результат выполнения этой программы.
Проверка Проверка Проверка Проверка Проверка Проверка Проверка Проверка Проверка Проверка Проверка -5: отрицательное число -4: отрицательное число -3: отрицательное число -2: отрицательное число -1: отрицательное число 0. "число без знака 1: положительное число 2: положительное число 3: положительное число 4: положительное число 5: положительное число 124 часть!. язык С() Конструкция 1Е-е1ве-1й В программировании часто применяется многостуленчап)ая консгдрукция 15-е1я- е1, состоящая из вложенных операторов 15. Ниже приведена ее общая форма.
15(условие) оператор; е1яе 15 (условие) оператор; е1яе 15 (условие) олераттор) е1яе оператор; Условные выражения в такой конструкции вычисляются сверху вниз. Как только обнаружится истинное условие, выполняется связанный с ним оператор, а все остальные операторы в многоступенчатой конструкции опускаются. Если ни одно из условий не является истинным, то выполняется последний оператор е1яе, который зачастую служит в качестве условия, устанавливаемого по умолчанию. Когда же последний оператор е1яе отсутствует, а все остальные проверки по условию дают ложный результат, то никаких действий вообще не выполняется.
В приведенном ниже примере программы демонстрируется применение многоступенчатой конструкции 15-е1яе-15. В этой программе обнаруживается наименьший множитель заданного целого значения, состоящий из одной цифры. цяьпч Нувгеш) с1авя Ьаасег ( ясасьс уогг( Мвтп(). ( гпс пцш) Вот к какому результату приводит выполнение этой программы. Наименьший множитель числа 2 равен 2 Наименьший множитель числа 3 равен 3 // Определить наименьший множитель заданного // целого значения, состоящий из одной цифры. Гог(пцш = 2) пцш < 12) пцш+ь) ( 11 ( (пцш $2) == 0) Сопво1е.нгьгеььпе("Наименьший множитель числа е1яе 11((пцш $3) == О) Сопяо1е.нгьгеььпе("Наименьший множитель числа е1яе 11((пвш $ 5) == 0) Сопво1е.Игтгевдпе("Наименьший множитель числа е1яе 11((пцш $7) == 0) Сопво1е.иг1гепьпе("Наименьший множитель числа е1яе сопяо1е.игьгепьпе(пош + " не делится на 2, 3, 5 ) ) пшя + " равен 2.
"); пцш ь " равен 3."); пцгп + " равен 5.")) пцш + " равен 7.")) или 7.")) Глава б. Управляющие операторы 125 Наименьший множитель Наименьший множитель Наименьший множитель Наименьший множитель Наименьший множитель Наименьший множитель Наименьший множитель 11 не делится на 2, 3 Как видите, последний оператор е1зе выполняется лишь в том случае, если не удается выполнить ни один из предыдущих операторов. Оператор ат№ЫсЬ Вторым оператором выбора в С№ является оператор знйгсЬ, который обеспечивает многонаправленное ветвление программы. Следовательно, этот оператор позволяет сделать выбор среди нескольких альтернативных вариантов дальнейшего выполнения программы. Несмотря на то что многонаправленная проверка может быть организована с помощью последовательного ряда вложенных операторов ЬГ, во многих случаях более эффективным оказывается применение оператора зи1ссЬ. Этот оператор действует следующим образом.
Значение выражения последовательно сравнивается с константами выбора из заданного списка. Как только будет обнаружено совпадение с одним из условий выбора, выполняется последовательность операторов, связанных с этим условием. Ниже приведена общая форма оператора знвгсЬ. знгссЬ(вьраженне) ( сазе константа1: последовательность оператороа Ьгеа(м саяе константа2: последовательность операторов Ьгеак; саяе константаз: последовательность операторов Ьгеак; г(етао1Г: последовательность операторов Ьгеа(сг Заданное выражение в операторе з н1ссЬ должно быть целочисленного типа (сЬаг, Ьуге, зйогг или впг), перечислимого или же строкового. (О перечислениях и символьных строках типа зсг1пд речь пойдет далее в этой книге.) А выражения других типов, например с плавающей точкой, в операторе аи1СОЬ не допускаются.
Зачасгую выражение, управляющее оператором знз ВсЬ, просто сводится к одной переменной. Кроме того, константы выбора должны иметь тип, совместимый с типом выражения. В одном операторе зивссь не допускается наличие двух одинаковых по значению констант выбора. числа 4 числа 5 числа б числа 7 числа 8 числа 9 числа 1 5 или равен 2 равен 5 равен 2 равен 7 равен 2 равен 3 О равен 2 7. 226 Часть (. Язык б№ Последовательность операторов из ветви бе1ац10 выполняется в том случае, если ни одна из констант выбора не совпадает с заданным выражением.
Ветвь с)егац1с не является обязательной. Если же она отсутствует и выражение не совпадает ни с одним из условий выбора, то никаких действий вообще не выполняется. Если же происходит совпадение с одним из условий выбора, то выполняются операторы, связанные с этим условием, вплоть до оператора Ьгеа)г. Ниже приведен пример программы, в котором демонстрируется применение оператора ях1ССЬ. // Продемонстрировать применение оператора яиьгсЬ. пя1по зувсеш; с1аяя змьссвбешо ( ясагьс човб Ма1п() ( ьпв 1; Гог(1=0; 1<10р 1++) яньссь().) ( сазе 0: Сопяо1е.нггсеьгпе("1 Ь ге а то саяе 1: Сопяо1е.нг1сеььпе("1 Ьгеак) саяе 2: Сопяо1е.нг1серйпе("1 Ьгеа)г; саяе 3: Сопяо1е.игьгевьпе("1 Ъгеато саяе 4: Сопяо1е.нгьсеЬтпе("1 Ьгеати бегап1С: Сопяо1е.нг1ге11пе("1 Ьгеак) ) равно нулю")," равно единице") равно двум") равно трем") равно четырем"); равно или больше пяти"); Результат выполнения этой программы выглядит следующим образом.
1 равно 1 равно 1 равно равно равно 1 равно равно 1 равно равно равно нулю. единице. двум. трем. четырем. или больше пяти. или больше пяти. или больше пяти. или больше пяти. или больше пяти. Как видите, на каждом шаге цикла выполняются операторы, связанные с совпадающей константой выбора, в обход всех остальных операторов. Когда же значение Глава 5. Управляющие операторы 127 переменной г становится равным или больше пяти, то оно не совпадает ни с одной из констант выбора, а следовательно, выполняются операторы из ветви г(егап1С. В приведенном выше примере оператором вы1ГСЬ управляла переменная 1 типа 1пс. Как пояснялось ранее, для управления оператором ви1ССЬ может быть использовано выражение любого целочисленного типа, включая и спас. Ниже приведен пример применения выражения и констант выбора типа сЬаг в операторе вы1ГСЬ.
// Использовать элементы типа спаг для управления оператором выьгап. овгпо Бувгеиг с1авв яи1сспоеио2 ( всасга того Ма1п() ( спал сп) Гог(оп='А'; оп<= 'Е'; спьь) Выьсап(СП) ( саве 'А': Сопво1е.иггсевгпе("аП Ьгеая) саве 'В': Сопво1е.нггсеььпе("сп Ьгеаг; саве 'С': Сопво1е.иггсевьпе("сп Ьгеак) саве 'Э': Сопво1е.нгьсевьпе("сЬ Ьгеа)с; саве 'Е': Сопво1е.нггсе11пе("сп Ьгеаг) содержит А") ) содержит В"); аодержит С"); содержит О") ) содержит Е")) Вот какой результат дает выполнение этой программы. сП содержит А сп содержит В сп содержит С сп содержит о ап содержит Е Обратите в данном примере внимание на отсутствие ветви а(е Еап1с в операторе виьгсЬ.