Оператори вибору

До операторів вибору відносять оператор умовного переходу if та оператор-перемикач switch. Оператор умовного переходу if використовується для розгалуження процесу обчислень на два напрямки і має такий формат запису:

if (вираз) оператор 1;
else
оператор 2;,

де вираз — це вираз, який має логічне значення (true — «істина» або false — «неправда»).
Реалізується оператор if таким чином: спочатку обчислюється вираз і, якщо значення виразу не дорівнює нулю («істина»), виконується оператор 1, в протилежному випадку —оператор 2 і далі управління передається оператору, що є наступним з умовних операторів if, наприклад:

if ( i < j ) і++;
else
{ j = i-3; i++; }

У записі оператора if друга частина (тобто else) може бути відсутня і тоді, якщо вираз приймає значення «неправда», виконується зразу наступний оператор програми, що розташований за умовним. Таку конструкцію називають “пропуск оператора”.
Коли у будь-якій гілці розгалуження необхідно виконати декiлька операторів, їх слід розташовувати у блоці, інакше компiлятор не зможе зрозуміти, де закінчується розгалуження. блок може включати різні оператори, у тому числі описи та інщi умовні оператори, але не може складатися з одних описів. Слiд ураховувати, що змінна, яка описана у такому блоці, за межами блока не існує. Синтаксис C++ припускає, що у випадку застосування вкладених умовних операторів кожне else відповідає найближчому до нього попередньому if. Наприклад:

if (с > d && (с > r || с = = 0)) d++; 
else
{d /= с; с = 0 } — декілька умов слід об’єднати знаками логічних операцій, а сукупність операцій необхідно розмістити у блоці; обчислення найбільшого значення серед трьох змінних а, b, с:
if (а > b)
{ if (а > с) max = а; 
else max = с; }
else { if (b > c) max = b; 
else max = c; } — у цьому фрагменті програми фігурні дужки можуть бути відсутні, тому що компілятор відносить частину else до найближчого if; if(p++) ps++; — вираз не використовує операцій відношення.
Оператор-перемикач switch називають оператором множинного розгалуження. Він використовується для вибору одного а багатьох варіантів рішення і має таку форму запису:

switch (L)
{
  case к.в.1: оператор 1; [break;]
  case к.в.2: оператор 2; [break;]
  ..................................................
  case к.в.n: оператор n; [break;]
  [default: оператор n+1;]
} 

де switch, case, default — службові слова;
break — оператор (необов’язковий) здійснює вихід з оператopa switch;
L — будь-який вираз одного з цілих типів; к.в.1, …, к.в.n — константні вирази, які неможуть повтoрюватися і не можуть містити змінних чи викликів функцій; зазвичай, це ціла або символьна константа; оператор 1; …  – будь-які оператори мови C++.
У процесі виконання цього оператора спочатку обчислюється значення виразу L, потім це значення порівнюється (послідовно зверху донизу) зі значеннями константних виразів к.в.1, …, к.в.n. У випадку збігу значень L і одного з цих константних виразів та якщо наприкінці гілки розгалуження немає оператора break, виконуються всі оператори,починаючи з відповідної гілки. За наявності оператора break виконується тільки оператор,що знаходиться у відповідній гілці розгалуження, і керування передається оператору, який розташований за межами oпeратора switch. Якщо значення виразу L не збігається з жодним із значень константних виразів, то виконується гілка default і здійснюється вихід з оператора switch. У випадку, коли в операторі switch відсутня гілка default (вона необов’язкова) і значення L не збігається з жодним із значень константних виразів,відбувається вихід з оператора switch.
Наведемо фрагмент програми з використанням оператора switch:

int а=2;
 switch (а)
 {
  case 1: func1( );
  case 2: func2( );
  case 0: 
  case 4: func3( );
  default: printf ("good bye \n");
}

Тут оператор switch передбачає реалізацію функцій func2(), func3() і default: printf (“good bye \n”);.
Фрагмент програми можна записати по-іншому:

int а=2;
 switch (а)
 {
  case 1: funcl( ); break;
  case 2: func2( ); break;
  case 0: ...
  case 4: func4( ); break;
  default: printf ("good bye \n");
}

Оператор-перемикач приводить до виконання тільки гілки case 2: func2( ); break; після чого здійснюється вихід із switch.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *