Оператор if else и Оператор множественного выбора switch

Views: 1222


Оператор if else 

Мы уже много раз в примерах приводили строчки с использованием оператора IF. Настало время более подробно описать его работу и привести несколько примеров для практического использования.

Синтаксис оператора

if (Условие)
     {
         Блок инструкций 1
     }

Если условие истинно выполняется блок инструкций. В качестве условий может использоваться от переменной до выражения. Блок инструкций может содержать неограниченное количество выражений.

Примеры:

//
If ( too == 5) LATB=5;        // если переменная = 5, то в порт LATB загрузиться значение 5.

If ( too == 5 && boo == 13)  // если выражение истинно
{			     // если выражение выполнить блок команд
    LATB=5;
    LATC=9;
}
//

При помощи комбинации IF else можно использовать алгоритм ветвления в зависимости от условия. А используя множественные комбинации IF else/ IF else строить разветвленные логические программы.

Синтаксис оператора

if (Условие)
     {
         Блок инструкций 1 (БИ1)
     }
     else
     {
         Блок инструкций 2 (БИ2)
     }

Если условие истинно выполняется БИ1, если ложно БИ2.

Комбинации на 2,3,4 и более условий.

if (Условие 1)
{
   Блок инструкций 1 (БИ1)
}
else if (Условие 2)
{
   Блок инструкций 2 (БИ2)
}
else
{
   Блок инструкций 3 (БИ3)
}
//---------------------------------------------------------
if (Условие 1)
{
   Блок инструкций 1 (БИ1)
}
else if (Условие 2)
{
   Блок инструкций 2 (БИ2)
}
else if (Условие 3)
{
   Блок инструкций 3 (БИ3)
}
else
{
   Блок инструкций 4 (БИ4)
}

Пример это функция опроса двух кнопок и возвращающая код нажатой клавиши (только один раз в момент нажатия).

// функция обработки нажатия тактовой кнопки
char KLAVA (void)
{
     if (RA4==0)		// кнопка 01
     {
	if (KLNAJ!=1) 	    // проверяем бит, кнопка была нажата до этого?
	{
	     _delay(10000);	// подождем 10 мСек. задержка для устранения "дребезга"
	     if (RA4==0)    	// и еще раз проверим, кнопка нажата
	     {			// если Да 
	        KLNAJ=1;
	        return 1;  		// одно нажатие
	      }
	      else 	return 0;	// помеха 
	}
	else 	return 11;		// удержание кнопки
     }
     else if (RB0==0)		// кнопка 02
     {
	if (KLNAJ!=1) 	    // проверяем бит, кнопка была нажата до этого?				
	{
	    _delay(10000);		// подождем 10 мСек. задержка для устранения "дребезга"
	    if (RB0==0)    		// и еще раз проверим, кнопка нажата
	    {			// если Да 
		KLNAJ=1;
		return 2;  	// одно нажатие
	   }	
	   else	return 0;	// помеха 
	}
	else 	return 12;		// удержание кнопки
     }		
     else { KLNAJ=0; return 0; }  // кнопка не нажималась сбросим бит 						
}

Как видно из приведенных конструкций на этом принципе можно строить разнообразные ветвления программ в зависимости от создавшихся условий. Конечно комбинация IF else удобная конструкция для создания ветвлений, но иногда приводит к трудности по чтению текста программы.


Оператор множественного выбора switch case break default

Оператор switch представляет удобную альтернативу if else при работе с множественным выбором, хотя частенько комбинации из if else дают более компактный код.

Синтаксис оператора:

switch ( test ) { // загрузка значения переменной, функции или выражения

  case 1 : 
    // процесс01 если test == 1
    ...
    break; // прерывает дальнейшее выполнение процесс01

  case 5 : 
    // процесс02 если test == 5
    ...
    break; // прерывает дальнейшее выполнение процесс02

  default : // оператор может отсутствовать
    // процесс если ни одно условие оператора case не найдено
    ...

}

Количество элементов case может быть много, элемент default может быть отсутствовать.

Конструкция case может иметь вид

case 1 : 
  case 10:
// процесс если значение == 1 или 10

    break;

такая конструкция дает возможность выполнять условие ИЛИ для 2 и более значений.


Поделись этим!