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

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


Зміст


1. Яку функцію виконує оператор умовного переходу if в програмах на C++?

Оператор умовного переходу if дозволяє організувати вибір ходу виконання програми. Вибір здійснюється на основі деякої умови. Якщо умова виконується, тоді виконання програми відбувається одним шляхом. В іншому випадку, програма виконується іншим шляхом.

2. Які форми (представлення) має оператор умовного переходу if в мові C++?

Оператор умовного переходу може мати такі представлення:

  • повну форму ‘if … else’;
  • скорочену форму ‘if’;
  • складену форму ‘if … else … if’.

При розв’язку задач, кожна з форм може заміняти одна одну. Одну й ту ж саму задачу можна розв’язувати декількома способами. Вибір тієї чи іншої форми оператора умовного переходу if залишається на розсуд програміста.



3. Який вигляд має повна форма оператора if?

Загальний вигляд повної форми оператора умовного переходу if:

if (вираз)
{
    // декілька операторів (інструкцій)
    // ...
}
else
{
    // декілька операторів (інструкцій)
    // ...
}

де вираз – умовний вираз (умова) згідно синтаксису мови C++.

Оператор if працює наступним чином. Якщо елемент вираз дає значення true (істина), тоді виконуються оператори одразу після слова if. В іншому випадку (значення виразу рівне false) виконуються оператори, що слідують після слова else.

Якщо після слова if або після слова else потрібно виконати тільки один оператор (а не декілька), тоді фігурні дужки { } можна опустити.

Загальна форма оператора, в якому після слів if та else потрібно виконати тільки один оператор, може мати такий вигляд:

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

4. Приклади використання повної форми оператора умовного переходу if

Приклад 1. Написати фрагмент коду, в якому обчислюється значення такого виразу:

задача C++ формула

float f, x;

// ввід x
// ...

if ((-8<=x)&&(x<=5))
    f = x*x+2*x-4;
else
    f = x-5;

У вищенаведеному прикладі на основі значення x обчислюється результуюче значення f.

Приклад 2. Дано значення n = 1..7, що є номером дня тижня. За значенням n визначити, вихідний цей день чи робочий. Результат записати в змінну fDayOff типу bool.

Фрагмент коду, що розв’язує дану задачу.

int n;
bool fDayOff;

n = 5;

if ((n>=1) && (n<=5))
    fDayOff = false; // fDayOff = false
else
    fDayOff = true;

5. Який вигляд має скорочена форма оператора if?

Інколи в програмах на C++ повну форму оператора if доцільно замінити на скорочену форму. Це необхідно у випадках, коли після слова else не потрібно виконувати ніяких інструкцій. В скороченій формі оператора if ключове слово else опускається.

Загальний вигляд скороченої форми оператора if:

if (вираз)
{
    // декілька операторів
    // ...
}

де вираз – умовний вираз (умова) згідно синтаксису мови C++.

Якщо після слова else потрібно виконати тільки один оператор, тоді фігурні дужки { } можна опустити:

if (вираз)
    оператор;

6. Приклади використання скороченої форми оператора if

Приклад 1. Дано три цілих числа a, b, c. Розробити програму, яка знаходить мінімальне значення між цими числами.

Фрагмент коду, що розв’язує дану задачу:

int a, b, c;
int min; // шукане мінімальне значення

a = 8;
b = -5;
c = 12;

// пошук мінімального значення
min = a;
if (min > b) min = b;
if (min > c) min = c; // min = -5

Приклад 2. Дано ціле число n = 1..3, яке є номером функції. За значенням змінної n обчислити значення відповідної функції:

1) x2+8;   2) -5x-1;     3) 10-x.

Фрагмент коду, що розв’язує дану задачу з допомогою скороченої форми оператора if

int n;
int x, f;

// ввід значень n, x
// ...

if (n==1) f = x*x + 8;
if (n==2) f = -5*x - 1;
if (n==3) f = 10 - x;

7. Складена форма оператора умовного переходу if … else if

Оператор умовного переходу if може мати більш складну форму, яка має такий загальний вигляд:

if (вираз1)
{
    // оператори
    // ...
}
else
if (вираз2)
{
    // оператори
    // ...
}
else

...

if (виразN)
{
    // оператори
    // ...
}
else
{
    // оператори
    // ...
}

де вираз1, вираз2, …, виразN – умовні вирази.

Умовні вирази обчислюються зверху вниз. Якщо в одному з виразів буде знайдено істинний результат (true), тоді будуть виконуватись оператори, що зв’язані з цією гілкою, а виконання всіх інших “гілок” опускається.

8. Приклади використання складеної форми if … else … if

Приклад 1. Дано номер місяця року n. За номером місяця визначити, скільки днів у цьому місяці.

Фрагмент коду, що розв’язує дану задачу.

int n;
int days;

// ввід n
// ...

if ((n==4)||(n==6)||(n==9)||(n==11)) days = 30;
else
if (n==2) days = 28;
else
    days = 31;

Приклад 2. Дано дійсне число x. Обчислити значення функції.

задача C++ формула

Фрагмент коду, що розв’язує дану задачу.

float x;
float f;

x = 5;

if (x<-2)
    f = 3*x*x - 8;
else
if ((-2<=x)&&(x<=4))
    f = -9*x*x - 12;
else
    f = 32 + x; // f = 37

9. Що таке вкладені оператори if?

Оператори if можуть бути вкладеними. Це означає, що замість операторів (див. п.п. 2, 4, 6 ) може бути інший оператор if. У мові C++ допускається до 256 вкладень операторів if.

Тут виникає правило стосовно останньої else-інструкції. Остання else-інструкція відноситься до найближчої if-інструкції, яка знаходиться всередині того ж програмного блоку (фігурні дужки { }) але ще не зв’язана з будь-якою іншою else-інструкцією. Щоб уникнути помилок, рекомендовано виділяти потрібні “гілки” виконання оператора if фігурними дужками { }.

Найпростіший загальний вигляд оператора if:

if (вираз)
{
    // вкладений оператор if
    if (вираз)
    {
        // оператори
        // ...
    }
    else
    {
        // оператори
        // ...
    }

    // ...
}

10. Приклад вкладених операторів if

Приклад. Фрагмент розв’язку квадратного рівняння з врахуванням усіх можливих значень коефіцієнтів рівнянь a, b, c.

float a, b, c; // коефіцієнти рівняння
float d; // дискримінант
float x1, x2; // корені рівняння

a = -1;
b = 1;
c = 5;
d = b*b - 4*a*c;

if (a==0)
{
    if (b!=0)
    {
        label1->Text = "Рівняння має 1 корінь";
        x1 = -c/b;
        label2->Text = x1.ToString();
    }
    else
    {
        label1->Text = "Невірно введені дані";
    }
}
else
{
    // a!=0
    if (d<0)
        label1->Text = "Рівняння не має коренів";
    else
    {
        if (d==0)
        {
            label1->Text = "Рівняння має 1 корінь";
            x1 = -b/(2*a);
            label2->Text = "x = " + x1.ToString();
        }
        else
        {
            label1->Text = "Рівняння має 2 корені";
            x1 = (-b - Math::Sqrt(d))/(2*a);
            x2 = (-b + Math::Sqrt(d))/(2*a);
            label2->Text = "x1 = " + x1.ToString();
            label3->Text = "x2 = " + x2.ToString();
        }
    }
}


Зв’язані теми