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

Условная тернарная операция (?:)

Синтаксис данной операции следующий:

<выражение1> ?<выражение2> : <выражение3>;

Результат операции будет равен <выражению2> в том случае, если <выражение1> истинно, в противном случае результат будет равен <выражению3>. Ниже показан пример реализации данной конструкции.

int result = (i<j) ? i : j ; // Переменной result присваивается наименьшее значение // (i или j), если i < j то i, иначе.

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

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

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

switch (<выражение>)

{

case <константное_выражение_1>:

<оператор 1>

[case <константное_выражение_2>:

<оператор 2>]

...

[case <константное_выражение_n>

<оператор n>]

[default:

<оператор>]

}

После вычисления выражения типа int в ( в заголовке оператора switch) результат сравнивается последовательно с константными_выражениями, стоящими после зарезервированных слов case, которые вместе с константными_выражениями являются внутренними метками оператора, После константных_выражений обязательно ставится признак метки ":". Сравнение значения выражения начинается с самого верхнего константного_выражения и далее, пока не будет установлено их соответствие. Тогда выполняются операторы после соответствующей метки case, на которую передается управление. Для того чтобы прекратить последовательное выполнение операторов и выйти из оператора switch, необходимо после группы операторов, принадлежащих выбранному case, поставить оператор break. Если break отсутствует, то последовательно выполняются все операторы, а метки не учитываются.

Последовательность операторов, стоящих после слова default (умолчание), выполняется тогда, когда значение выражения не совпадает ни с одним константным_выражением. Пример показывает возможности оператора switch. Функция error_message выводит одно из трех сообщений в зависимости от значения, когда ошибки (параметр error_code).

Пример

void error_message(int error_code)

{ switch(error_code)

{ 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 приведены в тексте программы */

#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...+9) : ");

scanf("%d",&s); //Условия для оператора switch:

if(s<0) //если s=0, то - a++, p++, h++

{ s=abs(s); //если s=1, то - p++, h++

flag='-'; //если s=2, то - h++

} //если s=3, то - a--

else flag=' '; //если s=4, то - p--

if(s<=9) //если s=5, то - h--

//если s=6..7, то - a=1, p=1, h=1

switch(s) //если s=8, то - a=0, p=0, h=0

{case 0: a++;

case 1: p++;

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

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...+9) : -9

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

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

Вы ввели -6

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

Результаты вычислений: a= 2.00 b=64.00

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]