Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_Лаб_Гриф.doc
Скачиваний:
7
Добавлен:
14.11.2019
Размер:
2.81 Mб
Скачать

Умовна тернарна операція ( ? : )

Синтаксис даної операції наступний:

<Вираз_1> ? <Вираз_2> : <Вираз_3>

Результат операції буде дорівнювати <Виразу_2> у тому випадку, якщо <Вираз_1> є «Істина», у противному випадку результат буде дорівнювати <Виразу_3>. Нижче показаний приклад реалізації даної конструкції.

int result = (i < j) ? i : j; //Перемінній result привласнюється найменше

//значення (i або j), якщо i < j, то i, інакше - j.

Оператор варіанта switch

Оператор вибору варіанта switch заміняє декілька операторів if…else. Звичайно оператор switch використовується тоді, коли потрібно вибрати і виконати тільки одну послідовність операторів з декількох можливих, хоча можливості оператора switch не обмежуються цим випадком.

Синтаксис оператора switch

switch ( <Вираз> )

{

case <Константний_вираз_1> :

<Оператор_1>

[case <Константний_вираз_2> :

<Оператор_2>]

...

[case <Константний_вираз_n> :

<Оператор_n>]

[default :

<Оператор>_n+1]

}

Після обчислення Виразу типу int (у заголовку оператора switch) результат порівнюється послідовно з <Константними_виразами_і, що розташовані після зарезервованих слів case. Послідовності слів case разом з Константними_виразами, як і default, є внутрішніми мітками оператора switch. Після Константних_виразів обов'язково ставиться ознака мітки ":". Порівняння значення Виразу починається із самого верхнього Константного_вирази _1 і далі, поки не буде встановлена їхня відповідність. Тоді послідовно виконуються всі оператори після відповідної мітки case, на яку передається керування. Для того, щоб припинити послідовне виконання операторів і вийти з оператора switch, необхідно після групи операторів, що належать обраному case, поставити оператор break. Якщо break є відсутнім, то мітки не враховуються і послідовно виконуються всі оператори.

Послідовність операторів, що розташовані після слова default (умовчання), виконується тоді, коли значення Виразу у заголовку оператора switch не збігається з жодним Константним_виразом_і.

Приклад показує можливості оператора switch. Функція ermes( ) виводить одне з трьох повідомлень у залежності від значення коду помилки ercode.

Приклад використання оператора switch:

void ermes(int ercode)

{

switch(ercode)

{ case 1: printf("\n Повідомлення 1"); break;

case 2: printf("\n Повідомлення 2"); break;

case 3: printf("\n Повідомлення 3"); break;

default : printf("\n Невірний код помилки");

}

}

Приклад

/* ЗАНЯТТЯ N 5

Виконав студент групи ......... Петров Н.В.

Застосування операторів if, switch, тернарної операції (? :)

на прикладі простого калькулятора. Більш складні умови для

оператора switch приведені нижче та реалізовані в тексті програми */

//Умови для оператора switch:

//якщо s = 0, то - a++, p++, h++

//якщо s = 1, то - p++, h++

//якщо s = 2, то - h++

//якщо s = 3, то – a - -

//якщо s = 4, то - p - -

//якщо s = 5, то - h - -

//якщо s = 6..7, то - a = 1, p = 1, h = 1

//якщо s = 8, то - a = 0, p = 0, h = 0

#include <stdio.h>

#include <conio.h>

#include <math.h>

int main(void)

{ float a, b, rez;

int s, p, h;

char oper, flag = ' ';

clrscr( );

printf("\n Введіть через пробіл два числа: ");

scanf(" %f %f ", &a, &b);

printf(" Введіть знак операції (+ - * /): ");

oper1: oper=getche( );

switch(oper)

{ case '+': rez = a+b; break;

case '-': rez = a-b; break;

case '*': rez = a*b; break;

case '/': rez = a/b; break;

default : printf("\n Повторіть введення знака: ");

goto oper1;

}

printf("\n Результат операції: %5.2f\n", rez);

oper2: printf("\n Введіть цифру в інтервалі (-9 < S < +9) : ");

scanf("%d", &s);

if(s < 0)

{ s = abs( s );

flag = ' - ';

else flag = ' ';

if(s <= 9)

switch( s )

{ case 0: a++; //break є відсутнім

case 1: p++; //break є відсутнім

case 2: printf("\tВи ввели %c%d", flag, s); h++; ;

case 3: printf("\tВи ввели %c%d", flag, s); a - -; break;

case 4: printf("\tВи ввели %c%d", flag, s ); p - -; break;

case 5: printf("\tВи ввели %c%d", flag, s); h - -; break;

case 6: case 7: printf("\tВи ввели %c%d", flag, s);

a=1; p=1; h=1; break;

case 8: printf("\tВи ввели %c%d",flag,s);

a=0; p=0; h=0; break;

default: printf("\tВи ввели %c%d \n\

на границі інтервалу", flag, s); goto oper2;

}

else { printf("\tВи ввели число поза інтервалом (-9...+9)\n");

goto oper2;

}

printf("\n Результат switch: a=%5.2f p=%2d h=%2d\n", a, p, h);

getch( );

if (p = = 0) {b=10; a=10;}

else {b+= b / p; a+= a / p;}

printf("\n Результати обчислень: a=%5.2f b=%5.2f", a, b);

rez = ( b < a ) ? b : a;

printf("\n Результат тернарної операції: res=%5.2f", rez);

getch( );

return 0;

}

/* Введіть через пробіл два числа: 54 32

Введіть знак операції (+ - * /): /

Результат операції: 1.69

Введіть цифру в інтервалі (-9 < S < +9) : -9

Ви ввели -9 на границі інтервалу

Введіть цифру в інтервалі (-9 < S < +9) : -6

Ви ввели -6

Результат switch: a= 1.00 p= 1 h= 1

Результати обчислень: a= 2.00 b= 64.00

Результат тернарної операції: res = 2.00 */