Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






У с л о в н ы й о п е р а т о р






 

С помощью условного оператора реализуются разветвляющиеся вычислительные процессы.

Разветвляющимися процессами называются такие, в которых в зависимости от значения некоторого признака обработка данных производится по одному из возможных направлений (по одной из ветвей).

В условном операторе в зависимости от выполнения проверяемого условия вычисление производится по одной из двух возможных ветвей (если количество ветвей вычислительного процесса свыше двух, то в этом случае обычно используется оператор 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 лучше обрамлять фигурными скобками.

 

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.