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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



 

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

<выражение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 Оформить отчет и сделать выводы по работе, изучив контрольные вопросы по теме.

 

Требования к содержанию отчёта приведены в лабораторной работе №1.

 

Индивидуальное задание к лабораторной работе №5

Вычислить значение функции

y = f(x), где

ì f1(z), если z < 0;

x = í f2(z), если 0 £ z £ 8;

î f3(z), если z > 8;

z = cos(с).

Значения функций приведены в таблице 5.1.

 

Таблица 5.1 - индивидуальное задание

Вар. f(x) f1(z) f2(z) f3(z) c
  x2+8x-6 z3-3z2 zln(z) Ez-e-z 5,1
  X3lnx2 e-z+3z ln|z| Cosz+z2 5,4
  X1/4+sinx 2z-ln|z| tgz-2z Sin3z 4,1
  X4+2sinx2 sinz+tgz cos3z+3/z Z2+lnz2 3,2
  Cosx3 z2+2sinz lnz+2z Ez+1/z 4,7
  Sinx+2lnx 2z+tgz lnz4+2z Cosz+2z 1,3
  Sin4x2 sinz2-z3 2sinz2 1,6
  Tgx-4x3 1/cos2z z-ln|z| Z3+sinz 1,5
  Lnx-e2x z2+ez cos4z/z3 Tg(z+1/z) 2,7
  2x-lnx 2cosz+1/z z3-2ln|z| Tg2z+z3 3,8
  3x-sinx 3tg3z 1/cos4z E2z+sinz 1,6
  4x2+cosx 3z/sinz z2+2sinz 2z-ln|z| 2,4
  +cosx z2+lnz2 ez+1/z Z4-sinz 4,1
  x1/3+2x ln|cosz| 2z+ez Tg2z 2,5
  Sin4x+2x z5/sin2z e-2z+tgz Cos4z+z1/3 3,2
  Tg4x+1/x z/sinz1/5 2ztg3z Z +8 1,4
  Ln(1/x) zsin2z-8 lnsinz0,8 -2,5 2,3
  e2x+4x cos(p /4)-z 1/(ez+1) arctg(z+3) 4,1
  Cosx4+x/2 sin(z+30°) lncos(pz/6) e-tg(z-2) 3,2
  2tgx+ex z+cos(p +z) z3+z1/3 Z4-lnz 2,8
  2lnx2 arccosz2 sinz+lncosz Z3-sin(p x) 1,7
  Cos2x/3 z2+ln(z+4) e(z-5)+sinz 2,2
  1/tgx4 e-4z+2+z2 cos(z1/3+2) Sin(p +4z2) 5,6
  e2x-x3 tg(z2+ ) ln(sinz+5) Z4+z2-cosz 3,4
  Tgx-2lnx arcsin(z+3) z3-z2+cosz Ln(z3+4z) 2,5
  Cosx4+x/2 lnsinz0,8 cos(p /4)-z Z/sinz1/5 3,7
  Ln(x+x2) 2ztg3z sin(p +4z2) Z3+z1/3 2,6
  Cosx4+2x tg(z+1/z) e2z+sinz Cosz1/5 3,8
  Sin4x+2x z2+lnz2 cos3z+3/z Cos(p /4)-z 5,8
  3ln(x2+5) z4-lnz sinz+tgz Sinz+lncosz 3,5

 

Контрольные вопросы для подготовки и самостоятельной работы

1 Какой тип должно иметь <выражение> в операторах if и switch?

2 Можно ли использовать оператор goto для передачи управления на else, метку case…; default:?

3 С помощью каких операторов можно досрочно завершить выполнение операторов if…else, switch?

4 Можно ли использовать в качестве <выражения> в операторе switch указатель?

5 Можно ли использовать в качестве константного <выражения> в операторе switch константу?

6 Обязательно ли использовать оператор break в операторе switch? Каково его действие? Что происходит при отсутствии break?

7 Какому из вложенных операторов if относится else при наличии и отсутствии операторных скобок ¢¢{¢¢ и ¢¢}¢¢.

8 Какие типы операндов допустимы в условной операции (?:)?

9 Объясните работу операторов в приведенных примерах.

10 Как объявить и использовать метки в программе?

Лабораторная работа №6

Операции С, их приоритеты и использование.
Преобразование типов

(4 часа)

Цель работы: Изучить основные логические, арифметические и другие операции С, научиться правильно составлять выражения С, изучить приоритеты операций С, научиться использовать преобразование типов.

Теоретические сведения

Язык С имеет мощную арифметическую и логическую основу, которая позволяет быстро, компактно и эффективно писать код программы. В С разработано множество базовых арифметических и логических операций, а также функции библиотеки математической поддержки языка. Операндами операций могут быть выражения определённых видов, зависящих от операции. В простейшем случае операндами являются переменные. Переменные, прежде чем они будут использованы, должны быть объявлены с определённым спецификатором типа.

Таблица 6.1 - допустимые операции над переменными

АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ
Операция Пояснение Пример
* Умножение A=b*c;
/ Деление (для целых – нацело) a=b/c;
% Остаток от деления (для целых) a=b%c;
<операция x> = + =; - =; * =; / =; % = составное присваивание Изменить и заменить a+=3; или a=a+3; a%=c; или a=a%c;
++ Инкремент(увеличить на 1) с++; или с=с+1; + + а
-- Декремент(уменьшить на 1) с--; или с=с-1; - - а
+ Бинарный плюс (сложение) A=b+c;
- Бинарный минус (вычитание) A=b-c;
ЛОГИЧЕСКИЕ ОПЕРАЦИИ
Операция Пояснение Пример
&& "И" a&&b
|| "ИЛИ" a||b
! "НЕ" !a
== "РАВНО" a= =b
!= "НЕ РАВНО" a!=b
> "БОЛЬШЕ" a>b
>= "БОЛЬШЕ ИЛИ РАВНО" a>=b
< "МЕНЬШЕ" a<b
<= "МЕНЬШЕ ИЛИ РАВНО" a<=b
ПОБИТОВЫЕ ОПЕРАЦИИ (ПОРАЗРЯДНЫЕ)
Операция Пояснение Пример
& “И” (and) 1&1=1; 1&0=0;0&0=0;
| “ИЛИ” (or) 1 | 1=1; 1 | 0 =1; 0 | 0=0;
^ “ИСКЛЮЧАЮЩЕЕ ИЛИ” (xor) 1^1 = 0; 1 ^ 0=1; 0^0=0;
~ “ОТРИЦАНИЕ” (not) ~1=0; ~0=;
<< “СДВИГ ВЛЕВО” (shl) 0001b<<2=0100b; (буква b означает что число двоичное)
>> “СДВИГ ВПРАВО” (shr) 0010b >> 1=0001b;
<операция >= составное присваивание. Изменить и заменить, где <операция > может быть: &,|,^,>>,<<. а&=b или a = &b a^=bилиa = a^b a<<=bили a<<b

 



Поделиться:


Последнее изменение этой страницы: 2016-04-26; просмотров: 434; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.28.50 (0.035 с.)