Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

C++ первый курс Alex Жив / C++ Перший курс / old / Lections 1 trim / ЛЕКЦІЯ №3 Умовний оператор

.doc
Скачиваний:
39
Добавлен:
23.03.2015
Размер:
41.47 Кб
Скачать

УМОВНІ ОПЕРАТОРИ

ОПЕРАТОР IF

ОПЕРАТОР IF-ELSE

УМОВНИЙ ОПЕРАТОР ? :

ОПЕРАТОР SWITCH

УМОВНІ ОПЕРАТОРИ

Для здійснення розгалуження в програмі використовуються так звані умовні оператори.

ОПЕРАТОР IF

Оператор if робить розгалуження програми залежно від результату перевірки деякої умови на істинність:

if (умова) оператор1;

Параметр умова може бути будь-яким виразом, але найчастіше воно містить оператори порівняння. Якщо умова, що перевіряється, має істинне значення (true), виконується оператор1. А якщо ні, то (false) виконання програми переходить до оператора, що йде за умовним оператором.

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

#include <iostream>

Using namespace std;

int Main ()

{

int b;

cin >>b;

if (b > 0) cout << "b - positive"; // якщо умова b > 0 на екран виводиться текст "b - positive"

if (b < 0) cout << "b - negative" ; // якщо умова b < 0 на екран виводиться текст "b - negative "

return 0 ;

}

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

ОПЕРАТОР IF-ELSE

Синтаксис оператора if із ключовим словом else має такий вигляд:

if (умова) Оператор1; else Оператор2;

Якщо параметр умова true, то виконується Оператор1, якщо false, те програма виконає Оператор2.

Слід зазначити, що комбінація if-else дозволяє значно спростити код програми. Як приклад розв'яжемо квадратне рівняння виду aх2 + bх + c = 0. Для рішення поставленого завдання скористаємося методом обчислення детермінанта:

#include <iostream.h>

#include <math.h> //містить математичні функції

#include <windows.h> //містить функцію перетворення кирилиці

int main ()

{

char S[200];

cout<< "\t\tпрограмма знаходить рішення квадратного рівняння

\n\n";

cout<<"\t\tпрограмму розробив Незнайка\n\n";

double a, b, c ; //коефіцієнти квадратного рівняння

double x1, x2 ; //рішення квадратного рівняння

double D; //дискримінант квадратного рівняння

//уведення значень коефіцієнтів

cout<<"\t\t\ta = ";cin>>a;

cout<<"\t\t\tb = ";cin>>b;

cout<<"\t\t\tc = ";cin>>c;

if ( a==0 ) //рішення лінійного рівняння

{

if( b==0 )

{

if ( c==0 ) { cout <<"Будь-яке значення\n";}

else { cout<< "Немає рішень\n";}

}

else { x1=-b/c ; cout<<"X = "<<x1<<'\n' ; }

}

else //рішення квадратного рівняння

{

D=a*a-2*a*c;

cout<<"\t\td = "<<D<<'\n';

if ( D<0 )cout<<"Немає рішень \n";}

else

{

x1=(-b+sqrt(D))/(2*a); cout<<"\t\t\tx1 = "<<x1<<'\n' ;

x2=(-b-sqrt(D))/(2*a); cout<<"\t\t\tx2 = "<<x2<<'\n' ;

}

}

return 0 ;

}

Типовою помилкою програмістів, що переходять на С и C++ є використання в умовних конструкціях оператора присвоювання замість оператора порівняння (= замість ==). Хоча мова С и дозволяє робити присвоєння в умовних операторах, тут слід бути особливо уважним - у більших проектах подібні помилки локалізуються із труднощами.

Ще одне зауваження: якщо умова не 0, то це вважається, що це true і буде виконаний оператор1, якщо 0, то це false і буде виконаний Оператор2. Тому на практиці часто зустрічаються записи виду:

if ( x ) cout<<”X<>0”; //якщо x<>0 виводить на екран текст ”X<>0”

УМОВНИЙ ОПЕРАТОР ? :

Замість операторів if-else цілком можна використовувати умовний оператор ? :, якщо вхідні в нього вираження є досить простими. Дана конструкція буде мати наступний синтаксис:

умова ? вираз1 : вираз2;

За аналогією з оператором if, даний умовний оператор працює так: якщо умова прийняла значення true, виконується вираз1, а якщо false – вираз2. Значення, що звичайно вертається, привласнюється який-небудь змінній.

Наприклад, розв'яжемо завдання знаходження максимуму із двох цілих змінних:

#include <iostream>

Using namespace std;

void main ()

{

int a = 10, b = 20, max ;

max = (a > b) ? a : b ;

cout << max ;

}

ОПЕРАТОР SWITCH

Ще однієї альтернативою керуючої конструкції if-else може служити оператор розгалуження switch. Він має наступний синтаксис:

switch(вираз)

{

case Константа1 : група операторів; [ break ; ]

case Константа2 : група операторів; [ break ; ]

[ default : група операторів; ]

}

Конструкція switch-case являє собою своєрідний "перемикач". Працює він у такий спосіб.

На першому етапі аналізується вираз й здійснюється перехід до тієї гілки програми, для якої його значення збігається із зазначеним константним виразом. Далі виконується оператор або група, які йдуть за відповідним case операторів доти, поки не зустрінеться ключове слово break (відбувається вихід з тіла оператора switch-case) або не буде досягнутий кінець блоку конструкції (відповідна фігурна дужка, що закривається, } ). Якщо значення виразу й константних виразів, зазначених в case, не збіжаться в жодному з випадків, виконається гілка програми, описана за допомогою ключового слова default. Ключові слова default і break не є обов'язковими й найчастіше програмісти навмисне їх опускають.

Подібний прийом може в деяких випадках спростити код програми, однак його слід застосовувати дуже акуратно. Наведений нижче фрагмент ілюструє роботу конструкції switch-case. Оголошена символьна змінна Answer служить для приймання із вхідного потоку відповіді користувача на запитання, чи продовжити роботу із програмою.

#include <iostream.h>

void main ()

{

char Answer ;

cout << "Продовжити роботу? " ;

cin >> Answer ;

switch ( Answer )

{

case 'y' :

case 'В :

case 'д' :

case 'Д' : cout << "Продовжимо...\n" ; break ;

default : cout << "Завершення...\n" ;

} // продовження роботи

}

Як видне із прикладу, користувачеві досить вибрати кожну з букв в, Y, д, Д, щоб продовжити виконання програми, або нажати будь-яку іншу клавішу для завершення.

Якщо ж помилково пропустити оператор break, на екран буде виведено відразу два повідомлення без виконання змістовної частини програми:

Продовжимо... Завершення...

Хоча оператор switch і допускає вкладення в себе аналогічних операторів, варто уникати подібних конструкцій, тому що код стає візуально погано сприйманим.