Лекція 4. Розгалуження та булеві вирази. Цикли
1. Оператори розгалуження
При написанні програми не вдається обмежитися тільки операторами присвоєння. Для більшості реальних алгоритмів характерна широка розгалуженість обчислювального процесу, коли в залежності від конкретних вхідних даних або проміжкових результатів доводиться застосовувати різні правила обробки даних.
Для задання розгалужень у програмах служать так звані оператори вибору, які у мовах програмування, зазвичай, представляються у двох формах – як умовний оператор, або як оператор багатоваріантного вибору.
Умовний оператор. Використовується для кодування розгалуження, коли вибір напрямку подальших дій визначається у залежності від виконання або невиконання певної умови. У мовах програмування цей оператор ще називають оператором if.
Формат умовного оператора для мови C:
if (вираз) оператор1;
[else оператор2;].
Тут if (якщо) і else (інакше) є службовими словами. Механізм реалізації оператора if: якщо задана умова істинна, то виконується оператор_1, якщо ж умова хибна, то виконується або оператор_2 (якщо він є), або керування передається на наступний за if оператор програми.
Для задання умови використовуються наступні операції:
Операція
Опис
Приклад застосування
!
Логічне заперечення
!(a>b) - a не більше b
<
Менше
a<b
>
Більше
a>b
<=
Менше або рівне
a<=b
>=
Більше або рівне
a>=b
==
Рівне
a==b
!=
Не дорівнює
a!=b
&&
Логічне І
(a>0)&&(a<b)
||
Логічне АБО
(a<0)||(a>b)
2. Оператор вибору
Оператор вибору switch необхідний у тих випадках, коли в залежності від значень змінної треба виконати ті чи інші оператори:
switch (вираз)
{
case значення_1: Оператори_1; break;
case значення_2: Оператори_2; break;
case значеніе_3: Оператори_3; break;
...
case значеніе_n: Оператори_n; break;
default: Оператори; break;
}
Оператор break необхідний для того, щоб здійснити вихід з оператора switch. Якщо оператор break не зазначений, то будуть виконуватися наступні оператори зі списку, не дивлячись на те, що значення, яким вони позначені, не збігається зі значенням виразу.
3. Оператори циклу
Циклічний процес (цикл) - повторення одних і тих же дій.
Тіло циклу - послідовність дій, які виконуються в циклі.
Змінні, що змінюються всередині циклу і впливають на його закінчення, називаються параметрами циклу.
При написанні циклічних алгоритмів слід пам'ятати наступне. Для того, щоб цикл закінчився, тіло циклу має обов'язково впливати на умову входу в цикл.
В С для зручності користувача передбачено три оператори, що реалізують циклічний процес: while, do .. while і for.
Цикл з передумовою
Оператор, що реалізую цикл з передумовою в С++, має вигляд:
while (умова) оператор;
або
while (умова)
{
оператор 1;
оператор 2;
...
оператор n;
}
де умова - логічний вираз, змінна або константа, за істинності якої виконується оператор або група операторів.
Цикл з післяумовою
Оператор циклу з післяумовою має наступний вигляд:
do
{
оператор_1;
оператор_2;
...
оператор_n;
}
while (умова);
Особливістю даного циклу є те, що незалежно від умови, оператор (група операторів) виконається хоча б один раз.
Цикл з параметром
В С існує оператор циклу з параметром наступної структури:
for (початкове_присвоєння; вираз; приріст)
{
оператор1;
оператор2;
...
}
Алгоритм роботи циклу for наступний:
- Виконуються початкове_присвоєння.
- Обчислюється значення виразу, якщо воно не дорівнює 0 (true), то виконується перехід до п.3. В іншому випадку виконання циклу завершується.
- Виконується оператор.
- Управління передається оператору приріст, після чого здійснюється перехід до п.2, тобто знову обчислюється значення виразу і т.д.
4. Оператори передачі управління
В С є чотири оператори передачі управління, які примусово змінюють порядок виконання команд: goto, break, continue і return.
Оператор безумовного переходу:
goto мітка;
де мітка - звичайний ідентифікатор, що застосовують для безумовного переходу, він передає управління оператору з міткою:
мітка: оператор;
Оператор break здійснює негайний вихід з циклів while, do .. while і for, а також з оператора вибору switch.
Оператор continue перериває виконання даного кроку циклу.
Оператор return вираз завершує виконання функції і передає управління в точку її виклику. Якщо функція повертає значення типу void, то вираз в записі оператора відсутній. В іншому випадку вираз повинен мати скалярний тип.