|
Программирование >> Обработка исключительных ситуаций
Операторы ветвления Операторы ветвления if и switch применяются для тою чтобы в зависимости от конкретных значений исходных данных обеспечить выполнение разных последовательностей операторов. Оператор if обеспечивает передачу управления на одну из двух ветвей вычислений, а оператор switch - на одну из произвольного чиста ветвей. Условный оператор if Условный оператор if используется для разветвления процесса вычислений па два направления. Структурная схема оператора приведена на рис. 4.1. Рис. 4.1. Структурная схема условного оператора Формат оператора: if ( логическоевыражение ) оператор 1; [ else оператора; ] false Выражения, блоки и пустые операторы Любое выражение, завершающееся точкой с занятой, рассматривается как оператор, выполнение которого заключается в вычислении выражения. Частным случаем выражения является пустой оператор : (он используется, когда по синтаксису оператор требуется, а по смыслу - нет). Примеры: 1-й; выполняется операция инкремента а * b + с; выполняется умножение с присваиванием fu!)( i. k ): выполняется вызов функции while( true ): цикл из пустого оператора (бесконечный) Блок, или составной оператор, - это последовательность описаний и операторов, заключенная в фигурные скобки. Блок воспринимается компилятором как один оператор и может использоваться всюду, где синтаксис требует одного оператора, а алгоритм - нескольких. Блок может содержать один оператор или быть пустым. начала вычисляется логическое выражение. Если оно имеет значение trjt, вы-олняется первый оператор, иначе - второй. После этого управление передается а оператор, следующий за условным. Ветвь else может отсутствовать. 1РИМЕЧАНИЕ- Операторы, входящие в условный, не должны иметь метку и не могут быть описаниями. 7.ти в какой-либо ветви требуется выполнить несколько операторов, их необхо-лмо заключить в блок, иначе компилятор не сможет понять, где заканчивается етвление. Блок может содержать любые операторы, в том числе описания и другие словные операторы (но не может состоять из одних описаний). Необходимо учи ывать, что переменная, описанная в блоке, вне блока не существует. Трпмеры условных операторов: а < 0 )b = 1: ,7 1 а<b&&(а>d11а==0)) b+ + : else { b *= а: а = 0: } 2 а<b)lffа<с)m = a: else т = с: If ( b <с ) m = b: else m = с: /. 3 - b >a ) max = b: else max - a: 4 } примере 1 отсутствует ветвь else. Подобная конструкция реализует пропуск ператора, поскольку присваивание либо выполняется, либо пропускается в за-иснмости от выполнения условия. Если требуется проверить несколько условий, их объединяют знаками логиче-ких условных операций. Например, выражение в примере 2 будет истинно в том лучае, если выполнится одновременно условие а <b и одно из условий в скобах. Если опустить внутренние скобки, будет выполнено сначала логическое И, . потом - ИЛИ. Оператор в примере 3 вычисляет наибольшее значение из трех неременных. Обратите внимание на то, что компилятор относит часть else к ближайшему ключе- iONiy слову 1 f . \онструкции, подобные оператору в примере 4 (вычисляется наибольшее значение из двух переменных), проще и нагляднее записывать в виде условней) опера щи, в данном случае следующей: ;. = b>a?b:a; ПРИМЕЧАНИЕ- Распространенная ошибка начинающих - неверная запись проверки на принадлежность диапазону. Например, чтобы проверить условие 0 < х < 1, нельзя записать его в условном операторе непосредственно, так как каждая операция отношении должна иметь два операнда. Правильный способ записи: if( 0 < X && х < 1)... 3 качестве примера подсчитаем количество очков после выстрела по мишени, тзображенной на рис. 4.2. Глава 4. Операторы I 2очка \ 0/1 2 У ! / Рис. 4.2. Мишень Как уже говорилось, тип переменных выбирается, исходя из их назначения. Координаты выстрела нельзя представить целыми величинами, так как это приведет к потере точности результата, а счетчик очков не имеет смысла описывать как вещественный. Программа приведена в листинге 4.1. Листинг4.1 . Выстрел по мишени using System; namespace ConsoleApplicationl { class Classl { static void MainO Console.WriteLineC Введите координату x ); string buf = Console.ReadLineO; double x = Convert.ToDoubleC buf ); Console.WriteLineC Введите координату у ); buf = Console.ReadLineO: double у = double.ParseC buf ); int kol = 0: if (x*x + y*y<l)kol=2; else if ( x * x + у * у < 4 ) kol = 1; Console.WriteLineC Результат = {0} очков , kol ); Даже такую простую программу можно еще упростить с помощью промежуточной переменной и записи условия в виде двух последовательных, а не вложенных, операторов if: double очко
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |