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




 

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

<выражение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 */

Ход работы

1 В соответствии с индивидуальным заданием разработать программу с применением операторов ветвления, выбора варианта, разрыва, перехода (при составлении программы использовать операторы if…else, switch, break, goto, операцию (?:) в двух-трех вариантах).

2 Набрать программу и устранить ошибки.

3 Изучить работу операторов, различные возможности их применения.

4 Получить результаты.

5 Оформить отчет и сделать выводы по работе, изучив контрольные вопросы по теме.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-09-06 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: