До операторів вибору відносять оператор умовного переходу 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.