Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
У с л о в н ы й о п е р а т о р
С помощью условного оператора реализуются разветвляющиеся вычислительные процессы. Разветвляющимися процессами называются такие, в которых в зависимости от значения некоторого признака обработка данных производится по одному из возможных направлений (по одной из ветвей). В условном операторе в зависимости от выполнения проверяемого условия вычисление производится по одной из двух возможных ветвей (если количество ветвей вычислительного процесса свыше двух, то в этом случае обычно используется оператор swith, который в дальнейшем рассматривается в разделе «Оператор варианта»). Синтаксическая диаграмма условного оператора:
Выражение в скобках после if является логическим выражением. Если значение выражения истинно (т. е. отлично от нуля), то выполняется оператор 1. Если выражение ложно (т. е. его значение равно нулю) и существует else -часть, то выполняется оператор 2, а при отсутствии альтернативы else не выполняется никаких действий. В примерах по определению y = |x| и x = |x| показано применение оператора if с фразой else и без нее. y = |x| x = |x|
да нет да нет
if (x< 0) if (x< 0) y=-x; x=-x; else y=x; В первом случае в переменную y необходимо записать значения x или –x, в зависимости от значения x. Во втором случае требуется изменить знак переменной x, если ее значение отрицательное, else -часть в этом операторе отсутствует. Если в какой-либо ветви необходимо выполнить несколько операторов, их нужно ограничивать фигурными (операторными) скобками, в этом случае все они воспринимаются компилятором, как один оператор. да нет да нет
а) б) На рис. а) представлена блок-схема оператора if с операторными скобками, при выполнении которого операторы x=-x; и y=x; будут исполняться только при условии x< 0. if (x< 0) { x=-x; y=x; } Если операторные скобки не поставить: if (x< 0) x=-x; y=x; то оператор y=x; будет исполняться независимо от значения x рис. б). Такие же рассуждения применимы и к ветви else. Если в операторе: if (x< 0) { x=-x; y=x; } else y=x; не проставить операторные скобки, компилятор определит ошибку в синтаксисе программы. В этом случае в операторе if при x< 0 выполняется оператор x=-x;. Так как далее фраза else не встречается, то компилятор определяет, что оператор if завершился. Затем должен выполняться оператор y=x;, вне зависимости от значения x. После этого встречается ключевое слово else. Это является ошибкой, поскольку с этого слова оператор начинаться не может. Операторы 1 и 2, изображенные на синтаксической диаграмме условного оператора, в свою очередь могут быть условными операторами.
if (B1) if (B2) if (B3) S1; Else S2; Else if (B4) S3; Else S4; Else S5;
Здесь B1, B2, B3, B4 – некоторые логические выражения, принимающие значения соответствующие true или false; S1, S2, S3, S4, S5 – операторы (например, операторы присваивания). Каждое слово " else " в условном операторе относится к ближайшему слову " if", не связанному с каким-либо словом " else".
Схема действия записанного выше условного оператора наглядно изображена на приведенной ниже блок-схеме.
false true
false true
false true false true
Условные операторы, многократно вложенные друг в друга, трудно понимать и в программах их применять не рекомендуется. Кроме того, отсутствие else -части в одной из вложенных друг в друга if -конструкций может привести к неоднозначному толкованию записи. Эту неоднозначность компилятор разрешает тем, что else связывает с ближайшим if, у которого нет своего else. Например, в if (n > 0) if (а > b) z = a; else z = b; else относится к внутреннему if, что показано с помощью отступов.
да нет
да нет
Если требуется иная интерпретация, необходимо должным образом расставить фигурные скобки: if (n > 0) { if (а > b) z = a; } else z = b;
да нет
да нет
Для удобства восприятия текста программы с помощью отступов недвусмысленно показывается, к какому if относится else. Однако компилятор не воспринимает эту информацию и относит else к внутреннему if, если не расставлены операторные скобки. Искать такого рода ошибки особенно тяжело. Здесь уместен следующий совет: вложенные if лучше обрамлять фигурными скобками.
|