Урок 5.3. Условный оператор if

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

Условный оператор предназначен для организации разветвлений в программах. Условный оператор if является составным и может быть использован в одной из двух форм:

     if (<выражение>) <оператор>                          или       

    if (<выражение>) <оператор1>           

    else <оператор2>

Обратим внимание на то, что в общих формах записи оператора if отсутствует признак конца оператора(;). Дело в том, что ранее определенная синтаксическая конструкция <оператор> уже включает в себя признак конца. Если <оператор> простой, то он будет завершен точкой с запятой. Если <оператор> является блоком, то блок будет определен парными фигурными скобками, и правая фигурная скобка определяет конец блока.

Оператор if работает следующим образом:

1. Форма записи if(<выражение>) <оператор>. Вначале вычисляется значение выражения <выражение>. Если оно ИСТИНА (т.е. его значение отлично от нуля), то выполняется <оператор>. Если значение ЛОЖЬ (выражение равно нулю), то <оператор> пропускается. Форма записи if(<выражение>) <оператор> соответствует алгоритмической схеме, представленной на рис.5.1.

Рис.5.1. Алгоритмическая схема выполнения if(<выражение>) <оператор>

Допустим, например, что если d равно c, то нам необходимо d увеличить на единицу, а  c увеличить на 3. При любых других условиях d и c должны остаться без изменения. В этом случае можно записать такой условный оператор:

if (d==c) ++d,c+=3;

В этом примере в качестве <оператор> используется оператор-выражение с запятой. Этот же пример перепишем по-другому:

if (d==c) ++d; c+=3;

Разница в том , что теперь здесь два оператора: оператор if и оператор-выражение c+=3. Теперь в случае истинности (d==c) все будет по-прежнему: d увеличится на единицу и c увеличится на три. Но в случае ложности (d==c) d не изменится, а с увеличится на 3. Вновь видоизменив этот пример,

if (d==c) {++d;c+=3;}

возвращаемся к первоначальному эффекту; в случае ложности (d==c) d и c не изменяются, т. к. эти операторы находятся в блоке и логически рассматриваются как один оператор – блок.

2. Форма записи if (<выражение>) <оператор1> else <оператор2>. Как и в предыдущем случае, вначале вычисляется значение <выражение>. Если оно отлично от нуля, т.е. истинно, то выполняется <оператор1>, иначе выполняется <оператор2>. Алгоритмическая схема выполнения для этой формы записи условного оператора представлена на рис.5.2.

 

Рис.5.2. Алгоритмическая схема выполнения if (<выражение>) <оператор1> else <оператор2>

Например, если необходимо вычислить z, равное max из a и b, то можно записать:

if (a>b) z=a;
else z=b;

Наличие точки с запятой после z=a обязательно, т.к. это есть оператор, входящий в состав оператора if.

Если первая сокращенная форма оператора if позволяет в программе выполнить или пропустить какое-либо действие, то вторая полная форма if-else позволяет выполнить одно из двух действий. Однако зачастую необходимо осуществить выбор из большого числа вариантов.

Рассмотрим цепочку операторов:

if (<выражение1>) <оператор1> else if (<выражение2>) <оператор2>
else if (<выражение3>) <оператор3> else <оператор4>

Такая цепочка вполне допустима, т. к. на месте оператора может быть любой оператор, в том числе и оператор if в той или иной форме. Однако в такой записи достаточно сложно разобраться, поэтому перепишем цепочку так, чтобы else оказалось под соответствующим if:

if (<выражение1>) <оператор1>
else 
     if (<выражение2>) <оператор2>
     else 
         if (<выражение3>) <оператор3>
         else <оператор4>

Сопоставим последний else с ближайшим if, и это будет новый оператор, который включает в себя уже образованный. Схематично это отобразится следующим образом:

Таким образом, мы пришли к канонической форме if-else и теперь понятно, как она будет работать. Выражения вычисляются по порядку; если какое-либо выражение истинно, то выполняется сопоставленный с ним оператор и на этом завершается выполнение всей цепочки. Последний оператор цепочки <оператор4> может быть диагностическим вариантом – реакцией программы на тот случай, если ни одно из условий не выполнено. Рассмотрим конкретный пример организации разветвлений в программе.

Допустим, необходимо рассчитать оплату за пользование электроэнергией. Причем плата за электроэнергию производится на следующих условиях: за первые израсходованные 5000 квт/ч оплачивается 0.4 лея за 1 квт/ч, за вторые 5000 взимается 0.6 лея за 1 квт/ч, за третьи 5000 взимается 0.8 лея за квт/ч и, наконец, за израсходованную электроэнергию свыше 15000 квт/ч оплачивается 1.2 лея за каждый превышающий квт/ч. Фрагмент программы, реализующей эти вычисления, может быть записан следующим образом:

if(kwh<=5000)      /*kwh - кол-во израсходованной электроэнергии */
       st=kwh*0.4; /*st - плата за электроэнергию */
else 
     if(kwh<=10000)
           st=(5000*0.4)+(10000-kwh)*0.6;
     else 
          if(kwh<=15000)
                st=(5000*0.4)+(5000*0.6)+(15000-kwh)*0.8;
          else 
                st=(5000*0.4)+(5000*0.6)+(5000*0.8)+(kwh-15000)*1.2;

Из примера видно,что фрагмент состоит из оператора if-else, для которого часть else представляет собой другой оператор if-else.
Рассмотрим еще два простых примера,сопоставляя фрагменты программ а) и б).

Фрагмент а):

if(n>0)         

            if(a>b)          

                        z=a;    

            else         

                        z=b;

Фрагмент б):

if(n>0){                             

               if(a>b)  

                         z=a;
            
}

else

         z=b;

B чем разница между ними? Разница в том, что фрагмент а) представляет собой сокращенную форму if, которой в качестве <оператор> стоит if-else; фрагмент б) представляет собой полную форму if-else, в которой в качестве <оператор1> использована сокращенная форма if. Фрагмент б) внешне отличается от фрагмента а) только наличием фигурных скобок, определяющих блок, которые, как мы видим, играют существенную роль при интерпретации этих операторов. Существует правило интерпретации вложенных конструкций if-else, которое гласит, что else соответствует ближайшему if, кроме тех случаев, когда имеются фигурные скобки.

рассказать друзьям и получить подарок

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Translate Переводчик

Подписка на новости

SmartResponder.ru
Ваш e-mail: *
Ваше имя: *

Хостинг для Wordpress сайтов