Оператор перемикач switch

ОПЕРАТОРИ МОВИ СІ

Зміст
ХАРАКТЕРИСТИКИ ОПЕРАТОРІВ
ОПИСУ ОПЕРАТОРІВ
Порожній оператор
Оператор безумовного переходу
Оператори умовного переходу
Оператор if
Оператор if-else
Оператор if-else if
Оператор перемикач switch
Оператори циклу
Оператор циклу for
Оператор циклу з передумовою while
Оператор циклу з постусловіем do-while
ПРАКТИЧНІ ЗАВДАННЯ
Прибираємо оператор goto
Спрощуємо логічні вираження
Взаємозамінність циклів
Компактний for
Обходимося без операторів умовного переходу
ЛАБОРАТОРНІ ЗАВДАННЯ
Лінійне рівняння
Введення російської літери
Таблиця множення
ASCII-таблиця
Машинний нуль і машинний епсилон
ДОДАТКОВІ ЗАВДАННЯ
СПИСОК

Характеристики операторів.
Всі оператори мови С можуть бути умовно розділені на наступні категорії:
- умовні оператори, до яких відносяться оператор умови if і оператор вибору switch;
- оператори циклу (for, while, do while);
- оператори переходу (break, continue, return, goto);
- інші оператори (оператор "вираз", порожній оператор).
Оператори в програмі можуть об'єднуватися в складені оператори за допомогою фігурних дужок. Будь-який оператор у програмі може бути позначений міткою, що складається з імені і наступного за ним двокрапки.
Всі оператори мови С, крім складених операторів, закінчуються крапкою з комою ";".

 

Описи операторів

Порожній оператор. Порожній оператор складається тільки з точки з комою. При виконанні цього оператора нічого не відбувається. Він зазвичай використовується в наступних випадках:

- в операторах do, for, while, if в рядках, коли місце оператора не потрібно, але з синтаксису потрібно хоча б один оператор;
- При необхідності позначити фігурну дужку.
Синтаксис мови С вимагає, щоб після мітки обов'язково слідував оператор. Фігурне ж дужка оператором не є. Тому, якщо треба передати управління на фігурну дужку, необхідно використовувати порожній оператор.
Приклад:
int main ()
{
;
{
if (...) goto a / * перехід на дужку * /
{...
}
a:;
}
return 0;
}

Оператор безумовного переходу

Використання оператора безумовного переходу goto в практиці програмування на мові С настійно не рекомендується, так як він ускладнює розуміння програм і можливість їх модифікацій.
Формат цього оператора наступний:
goto ім'я-мітки;
...
ім'я-мітки: оператор;
Оператор goto передає управління на оператор, позначений міткою ім'я-мітки. Приречений оператор повинен знаходитися в тій же функції, що і оператор goto, а використовувана мітка повинна бути унікальною, тобто одне ім'я-мітки не може бути використано для різних операторів програми. Ім'я-мітки - це ідентифікатор.
Будь-який оператор у складеному операторі може мати свою мітку. Використовуючи оператор goto, можна передавати управління всередину складеного оператора. Але потрібно бути обережним при вході у складений оператор, що містить оголошення змінних з ініціалізацією, оскільки оголошення розташовуються перед виконуваними операторами і значення оголошених змінних при такому переході будуть не визначені.

Оператори умовного переходу

Оператор if

Формат оператора:
if (вираз) оператор;
Виконання оператора if починається з обчислення виразу.
Далі виконання здійснюється за наступною схемою:
- Якщо вираз істинний (тобто відмінно від 0), то виконується оператор.
- Якщо вираз помилково, то виконується наступний за if оператор.
Після виконання оператора if значення передається на наступний оператор програми, якщо послідовність виконання операторів програми не буде примусово порушена використанням операторів переходу.
Приклад: if (i <j) i + +:
Оператор if-else
Формат оператора:
if (вираз) оператор-1; else оператор-2;
Виконання оператора if починається з обчислення виразу.
Далі виконання здійснюється за наступною схемою:
- Якщо вираз істинний (тобто відмінно від 0), то виконується оператор-1.
- Якщо вираз помилково (тобто дорівнює 0), то виконується оператор-2.
Після виконання оператора if значення передається на наступний оператор програми, якщо послідовність виконання операторів програми не буде примусово порушена використанням операторів переходу.
Приклад:
if (i <j) i + +:
else {j = i-3; i + +;}
Цей приклад ілюструє також і той факт, що на місці оператор-1, так само як і на місці оператор-2 можуть знаходитися складні конструкції.
Допускається використання вкладених операторів if. Оператор if може бути включений в конструкцію if або в конструкцію else іншого оператора if. Щоб зробити програму більш читабельною, рекомендується групувати оператори і конструкції у вкладених операторах if, використовуючи фігурні дужки. Якщо ж фігурні дужки опущені, то компілятор пов'язує кожне ключове слово else з найбільш близьким if, для якого немає else.
Приклади:
int main ()
{
int t = 2, b = 7, r = 3;
if (t> b)
{
if (b <r) r = b;
}
else r = t;
return (0);
}
В результаті виконання цієї програми r стане рівним 2.
Якщо ж у програмі опустити фігурні дужки, що стоять після оператора if, то програма буде мати наступний вигляд:
int main ()
{
int t = 2, b = 7, r = 3;
if (a> b)
if (b <c) t = b;
else
r = t;
return (0);
}
У цьому випадку r отримає значення рівне 3, так як ключове слово else відноситься до другого оператору if, який не виконується, оскільки не виконується умова, що перевіряється в першому операторі if.

Оператор if-else if

Наступний фрагмент ілюструє вкладені оператори if:
char ZNAC;
int x, y, z;
:
if (ZNAC == '-') x = y - z;
else if (ZNAC == '+') x = y + z;
else if (ZNAC == '*') x = y * z;
else if (ZNAC == '/') x = y / z;
else...
З розгляду цього прикладу можна зробити висновок, що конструкції використовують вкладені оператори if, є досить громіздкими і не завжди достатньо надійними. Іншим способом організації вибору з безлічі різних варіантів є використання спеціального оператора вибору switch.

Оператор перемикач switch

Оператор switch призначений для організації вибору з безлічі різних варіантів. Формат оператора наступний:
switch (вираз)
{[Оголошення]
:
[Case константне-вираз1]: [список-операторов1]
[Case константне-вираз2]: [список-операторов2]
:
:
[Default: [список операторів]]
}
Вираз, наступне за ключовим словом switch в круглих дужках, може бути будь-яким виразом, допустимими в мові С, значення якого повинно бути цілим.
Значення цього виразу є ключовим для вибору з декількох варіантів. Тіло оператора switch складається з декількох операторів, помічених ключовим словом case з наступним константним-виразом. Слід зазначити, що використання цілого константного вираження є істотним недоліком, властивим розглянутому оператору.
Так як константні вираз обчислюється під час трансляції, воно не може містити змінні або виклики функцій. Звичайно як константного вирази використовуються цілі або символьні константи.
Всі вирази в операторі switch повинні бути унікальні. Крім операторів, помічених ключовим словом case, може бути, але обов'язково один, фрагмент, позначений ключовим словом default.
Список операторів може бути порожнім, або містити один або більше операторів. Причому в операторі switch не потрібно укладати послідовність операторів у фігурні дужки.
Відзначимо також, що в операторі switch можна використовувати свої локальні змінні, оголошення яких знаходяться перед першим ключовим словом case, проте в оголошеннях не повинна використовуватися ініціалізація.
Схема виконання оператора switch наступна:
- Обчислюється вираз в круглих дужках;
- Обчислені значення послідовно порівнюються з константними виразами, наступними за ключовими словами case;
- Якщо одне з константних виразів збігається зі значенням висловлювання, то управління передається на оператор, позначений відповідним ключовим словом case;
- Якщо жодна з константних виразів не одно висловом, то управління передається на оператор, позначений ключовим словом default, а в разі його відсутності управління передається на наступний після switch оператор.
Відзначимо цікаву особливість використання оператора switch: конструкція зі словом default може бути не останньою у тілі оператора switch. Ключові слова case і default в тілі оператора switch істотні тільки при початковій перевірці, коли визначається початкова точка виконання тіла оператора switch. Всі оператори, між початковим оператором і кінцем тіла, виконуються незалежно від ключових слів, якщо тільки якийсь з операторів не передасть управління з тіла оператора switch. Таким чином, програміст повинен сам подбає про вихід з case, якщо це необхідно. Найчастіше для цього використовується оператор break.
Для того, щоб виконати одні й ті ж дії для різних значень вираження, можна помітити один і той же оператор декількома ключовими словами case.
Приклад:
int i = 2;
switch (i)
{
case 1: i + = 2;
case 2: i *= 3;
case 0: i / = 2;
case 4: i -= 5;
default:;
}
Виконання оператора switch починається з оператора, відміченого case 2. Таким чином, змінна i отримує значення, рівне 6, далі виконується оператор, позначений ключовим словом case 0, а потім case 4, мінлива i прийме значення 3, а потім значення - 2. Оператор, позначений ключовим словом default, не змінює значення змінної.
Розглянемо раніше наведений приклад, в якому ілюструвалося використання вкладених операторів if, переписаної тепер з використанням оператора switch.
char ZNAC;
int x, y, z;
switch (ZNAC)
{
case '+': x = y + z; break;
case '-': x = y - z; break;
case '*': x = y * z; break;
case '/': x = u / z; break;
default:;
}
Використання оператора break дозволяє в необхідний момент перервати послідовність виконуваних операторів у тілі оператора switch, шляхом передачі управління оператору, наступного за switch.
Відзначимо, що в тілі оператора switch можна використовувати вкладені оператори switch, при цьому в ключових словах case можна використовувати однакові вирази.
Приклад:
switch (a)
{
case 1: b = c; break;
case 2:
switch (d)
{
case 0: f = s; break;
case 1: f = 9; break;
case 2: f-= 9; break;
}
case 3: b-= c; break;
:
}

Оператори циклу

Оператор циклу for

Оператор for - це найбільш загальний спосіб організації циклу. Він має наступний формат:
for (вираз 1; вираз 2; вираз 3) тіло
Вираз 1 зазвичай використовується для встановлення початкового значення змінних, керуючих циклом. Вираз 2 - це вираз, що визначає умову, за якої тіло циклу буде виконуватися. Вираз 3 визначає зміна змінних, керуючих циклом після кожного виконання тіла циклу.
Схема виконання оператора for:
1. Обчислюється вираз 1.
2. Обчислюється вираз 2.
3. Якщо значення виразу 2 відмінно від нуля (істина), виконується тіло циклу, обчислюється вираз 3 і здійснюється перехід до пункту 2, якщо вираз 2 дорівнює нулю (брехня), то управління передається на оператор, наступний за оператором for.
Суттєво те, що перевірка умови завжди виконується на початку циклу. Це означає, що тіло циклу може жодного разу не виконатися, якщо умова виконання відразу буде хибним.
Приклад:
int main ()
{
int i, b;
for (i = 1; i <10; i + +) b = "i * i;" return 0;}
У цьому прикладі обчислюються квадрати чисел від 1 до 9.
Деякі варіанти використання оператора for підвищують його гнучкість за рахунок можливості використання декількох змінних, керуючих циклом.
Приклад:
int main ()
{
int top, bot;
char string [100], temp;
for (top = 0, bot = 100; top <bot; top + +, bot -)
{
temp = string [top];
string [bot] = temp;
}
return 0;
}
У цьому прикладі, реализующем запис рядка символів в зворотному порядку, для управління циклом використовуються дві змінні top і bot. Відзначимо, що на місці вираз 1 і вираз 3 тут використовуються декілька виразів, записаних через кому, і виконуваних послідовно.
Іншим варіантом використання оператора for є нескінченний цикл. Для організації такого циклу можна використовувати пусте умовний вираз, а для виходу з циклу зазвичай використовують додаткову умову і оператор break.
Приклад:
for (;;)
{
...
... break;
...
}
Так як згідно синтаксису мови С оператор може бути порожнім, тіло оператора for також може бути порожнім. Така форма оператора може бути використана для організації пошуку.
Приклад:
for (i = 0; t [i] <10; i + +);
У даному прикладі мінлива циклу i приймає значення номера першого елемента масиву t, значення якого більше 10.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: