ТОП 10:

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



Формат записи:

E1 ? E2 : E3;

где E1 – выражение целочисленного или вещественного типа; типы E1 и E2 должны совпадать и могут быть любыми.

Выполнение данной операции зависит от истинности E1:

- если E1 отлично от нуля, то вычисляется выражение E2, и результатом всей операции будет E2, при этом выражение E3 игнорируется;

- если E1 равно нулю, то вычисляется E3, которое и будет результатом всей операции, при этом E2 вычисляться не будет.

Логические выражения

Логические выражения вычисляются так же, как и арифметические – в соответствии с приоритетами. В них можно так же изменять порядок выполнения операций расстановкой круглых скобок.

Порядок и направление выполнения операций

В выражении различные операции можно комбинировать. Рассмотрим некоторые из них.

Например, выражение 2+2*2 будет равно 8 или 6? Операции, приведенные в таблице выше, будут вычислены раньше, или, как говорят, имеют более высокий приоритет, чем те, которые расположены ниже.

Рассмотрим ещё один пример: какой результат даст выражение 40/5*2? Приоритет выполнения операций “/” и “*” одинаков, но в зависимости от того, какая операция будет вычислена первой, в данном случае можно получить два ответа: 16 или 4. Таким образом, при выполнении операций необходимо учитывать их направление: слева на право или наоборот. Эти данные также приведены в таблице.

Операция Направление
!, - (унарный), +(унарный), ++, -- Справа налево
*, /, % Слева направо ®
<, <=, >, >= Слева направо ®
==, != Слева направо ®
&& Слева направо ®
|| Слева направо ®
? : Справа налево
=,+=,-=,*=,/=,%= Справа налево

Таким образом, при выполнении операций слева направо, первой из двух, имеющих одинаковый приоритет, будет выполнена левая операция, при выполнении справа налево – правая.


Задание:

Пример работы с АОС:

 
 

Через ОПЕРАЦИИ | РЕЖИМ САМОСТОЯТЕЛЬНОЙ РАБОТЫ | (ОПЕРАЦИИ: ЛОГИЧЕСКИЕ И УВЕЛИЧЕНИЯ + ОПЕРАЦИИ ОТНОШЕНИЯ И УСЛОВИЯ + ЛОГИЧЕСКИЕ ВЫРАЖЕНИЯ) выйти к меню (цифры могут отличаться):

Внимательно прочесть теорию (<F2>).

Вычислить предложенные примеры, например:

1) PRINT(x||y||!z);

Следуя вышеизложенным правилам и учитывая, что x, y, z уже заданы, имеем:

0||0||!2 т.е. 0||0||0, что равно 0.

2) z=++x + 2; PRINT(x); PRINT(z);

имеем: z = 5 + 2 (x=5 при вычислении, т.к. префиксная форма записи указывает на инкремент до использования переменной в выражении). При выполнении этой строки переменные x и z принимают значения, равные 5 и 7 соответственно.

Значение последней строки равно –2, проверьте.

Переписать задание и ответы в тетрадь для лабораторных работ и перейти к выполнению следующего задания (нажать любую клавишу). Таким образом выполнить все предложенные задания.

Для перехода к следующей теме («Операции отношения и условия») нажать <F10>.

Переписать задание и ответы в тетрадь для лабораторных работ и перейти к выполнению следующего задания (нажать любую клавишу). Таким образом выполнить все предложенные задания. Для перехода к следующей теме (Логические выражения) нажать <F10>:

Контрольные вопросы

1. Перечислите, какие логические операции вы знаете, и над какими типами выражений они могут производиться?

2. В чем заключается правило усечения?

3. Какие действия выполняет операция «++» и над какими типами она может выполняться?

4. Чем отличается запись ‘X=Y’ от ‘X==Y’?

5. Перечислите последовательность выполнения операций в выражении
z-=x<=y?++x:--y и обоснуйте ответ.

6. При каком значении x в выражении --x&&++y&&++z; значение переменной y не изменится?


 

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

 

Операторы и операции

 

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

 

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

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

В операторе присваиванияиспользуется операция присваивания = ,

Например:

c = a * b;

Действие такого оператора можно описать следующими словами: " с присваивается значение а, умножение на b ". Значение, присваиваемое переменной с, равняется произведению текущих значений переменных а и b.

Операторы часто относятся более чем к одному из четырех классов.

Например: оператор:

if ( ( c = cube( a * b ) ) > d )

...

составлен из представителей следующих классов: присваивания, вызов функции, и ветвление.

К понятию оператора вплотную примыкает понятие операции.

Различаютследующие группы операций С: арифметические операции, операции отношения, операции присваивания, логические операции, побитовые операции, операция вычисления размера (sizeof) и операция следования (запятая).

Арифметические операции

К арифметическим операциям относятся: сложение (+), вычитание (-), деление (/) , умножение (*) и остаток (%). Все операции (за исключением остатка) определены для переменных типа int , char , float. Остаток не определен для переменных типа float. Все арифметические операции с плавающей точкой производятся над операндами двойной точности.

Операции отношения

В языке определены следующие операции отношения: проверка на равенство (==), проверка на неравенство (!=), меньше (<), меньше или равно (<=), больше (>), больше или равно (>=).

Все перечисленные операции вырабатывают результат типа int. Если данное отношение между операндами истинно, то значение этого целого - единица, а если ложно, то нуль.

Все операции типа больше-меньше имеют равный приоритет, причем он выше , чем приоритет операций == и !=. Приоритет операции присваивания ниже приоритета всех операций отношений. Для задания правильного порядка вычислений используются скобки.

Логические операции

В языке имеются три логические операции:

&& операции И (and)

|| операции ИЛИ (or)

! отрицание

Аргументами логических операций могут быть любые числа, включая задаваемые аргументами типа char. Результат логической операции - единица, если истина, и нуль, если ложь. Вообще все значения, отличные от нуля, интерпретируются как истинные.

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

Вычисление выражений, содержащих логические операции, производится слева направо и прекращается (усекается), как только удается определить результат. Если выражение составлено из логических утверждений (т.е. выражения, вырабатывающие значения типа int), соединенных между собой операцией И (&&), то вычисление выражения прекращается, как только хотя бы в одном логическом утверждении вырабатывается значение нуль. Если выражение составлено из логических утверждений, соединенных между собой операцией ИЛИ (||), то вычисление выражения прекращается, как только хотя бы в одном логическом утверждении вырабатывается ненулевое значение.

Вот несколько примеров, в которых используются логические операции:

if( i > 50 && j == 24)

...

if( value1 < value2 && (value3 > 50 || value4 < 20) )

...

Операции присваивания

К операциям присваивания относятся =, +=, -=, *= и /=, а также префиксные и постфиксные операции ++ и --. Все операции присваивания присваивают переменной результат вычисления выражения. Если тип левой части присваивания отличается от типа правой части, то тип правой части приводится к типу левой.

В одном операторе операция присваивания может встречаться несколько раз. Вычисления производятся справа налево.

Например:

a = ( b = c ) * d;

Вначале переменной d присваивается значение с, затем выполняется операция умножения на d, и результат присваивается переменной а.

Операции +=, -=, *= и /= являются укороченной формой записи операции присваивания. Их применение проиллюстрируем при помощи следующего описания:

a += b означает a = a + b.

a -= b означает a = a - b.

a *= b означает a = a * b.

a /= b означает a = a / b.

Префиксные и постфиксные операции ++ и -- используют для увеличения (инкремент) и уменьшения (декремент) на единицу значения переменной.

Семантика указанных операций следующая:

++a увеличивает значение переменной а на единицу до использования этой переменной в выражении.

а++ увеличивает значение переменной а на единицу после использования этой переменной в выражении.

--a уменьшает значение переменной а на единицу до использования этой переменной в выражении.

a-- уменьшает значение переменной а на единицу после использования этой переменной в выражении.

Операцию sizeof (размер) можно применить к константе, типу или переменной. В результате будет получено число байтов, занимаемых операндом.

Например:

printf ( "\nРазмер памяти под целое %d", sizeof( int) );

printf ( "\nРазмер памяти под cимвол %d", sizeof( сhar) );

Задание:

Cоставить программу, использующую оператор присваивания, все арифметические операции, инкремент и декремент для вычислния какой-либо переменной по заданной самостоятельно формуле, а также операцию sizeof для определения занимаемого этой переменной объема памяти.


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

 

Работа с автоматизированной обучающей системой:
условный оператор IF-ELSE

Цель работы: получить навыки в использовании операций управления языка С в автоматизированной обучающей системе.

 

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

В программировании часто встречаются такие ситуации, когда выполнение какого-нибудь действия зависит от определённых условий. Для разрешения этой проблемы в языке С существуют условные операторы ifи switch.

Операторы if, if…else

Формат: if (условие) оператор

[else оператор]

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

Следует обратить внимание на то, что условие обязательно заключается в круглые скобки!!!

В некоторых случаях возникает необходимость в совместном использовании нескольких операторов if, что может привести к неоднозначности типа «висящего else». Например:







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

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