Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лекции_1 / Операции

.pdf
Скачиваний:
47
Добавлен:
14.03.2016
Размер:
316.58 Кб
Скачать

07.06.13

Операции

Истина, если ae1 больше, чем

ae2.

Пример:

 

if(x>0) printf("positive");

Операция меньше или равно: <=

Тип операндов - арифметический или указатель. Тип результата - int.

Использование:

ae1<=ae2

Истина, если ae1 меньше или равно ae2.

Операция больше или равно: >=

Тип операндов - арифметический или указатель. Тип результата - int.

Использование:

ae1>=ae2

Истина, если ae1 больше или равно ae2.

Операции, уровень приоритета которых равен 7

Уровень приоритетов операций равенства/неравенства равен 7, выполняются они слева направо.

Операция равенство ==

Тип операндов - арифметический или указатель. Тип результата - int.

Использование:

ie1==ie2

Истина, если ie1 равно ie2, иначе - ложь.

Операция неравенство: !=

Тип операндов - арифметический или указатель. Тип результата - int.

Единственным целым значением, с которым можно сравнивать указатели, является нулевое значение! Использование:

ie1!=ie2

Истина, если ie1 не равно ie2. Пример:

while (i!=0)

i=func;

Операция, уровень приоритета которой равен 8

Уровень приоритета операции поразрядное И равен 8. Выполняются такие операции слева направо.

Операция поразрядное И: &

Тип операндов - интегральный. Тип результата: int, long, unsigned. Использование:

ie1 & ie2

Побитовая операция И двоичных представлений ie1 и ie2. Значение выражения содержит 1 во всех разрядах, в которых и ie1 и ie2 содержат 1, и 0 во всех остальных разрядах.

Пример:

www.intuit.ru/studies/professional_skill_improvements/1747/courses/43/print_lecture/655

11/16

07.06.13

Операции

flag=((x&mask)!=0);

Операция, уровень приоритета которой равен 9

Уровень приоритета операции поразрядное исключающее ИЛИ равен 9. Порядок выполнения таких операций слева направо.

Операция поразрядное исключающее или: ^

Тип операндов - интегральный. Тип результата: int, long, unsigned.

Использование:

ie1^ie2

Побитовая операция исключающее ИЛИ двоичных представлений ie1 и ie2. Значение выражения содержит 1 в тех разрядах, в которых и ie1 и ie2 имеют разные двоичные значения, и 0 во всех остальных разрядах.

Пример:

diffbits=x^y;

Операция, уровень приоритета которой равен 10

Уровень приоритета операции поразрядное включающее ИЛИ равен 10, порядок выполнения таких операторов - слева направо.

Операция поразрядное включающее или: |

Тип операндов - интегральный. Тип результата: int, long, unsigned.

Использование:

ie1 | ie2

Побитовая операция ИЛИ двоичных представлений ie1 и ie2. Значение выражения содержит 1 во всех разрядах, в которых ie1 или ie2 содержат 1, и 0 во всех остальных разрядах.

Пример:

attrsum=attr1 | attr2;

Операция, уровень приоритета которой равен 11

Уровень приоритета логической (условной) операции и равен 11. Выполняется операция слева направо.

Операция логическое И: &&

Тип операндов - арифметический или указатель. Тип результата - int. Если первый операнд равен 0, то результат равен 0. В противном случае результат будет равен 1, если второй операнд не равен 0, и равен 0, если второй операнд равен 0 (если первый операнд равен 0, то второй операнд не вычисляется).

Использование:

e1&&e2

Логическая операция И значений e1 и e2. Вначале проверяется значение e1 ; значение e2 проверяется только в том случае, если значение e1 - Истина. Значением выражения является Истина, если значения e1 и e2 - Истина.

Пример: if(p!=NULL&&*p>7) n++;

Если p - ненулевой указатель и значение переменной, на которую указывает p, больше, чем 7, то в этом случае n увеличивается на 1. Обратите внимание, что если значение указателя p равно NULL ( 0 ), то выражение *p не имеет смысла.

www.intuit.ru/studies/professional_skill_improvements/1747/courses/43/print_lecture/655

12/16

07.06.13

Операции

Операция, уровень приоритета которой равен 12

Уровень приоритета операции равен 12, выполняются такие операции слева направо.

Операция логическое ИЛИ: ||

Тип операндов - арифметический или указатель. Тип результата int. Если хотя бы один операнд не равен 0, результат равен 1 ; иначе результат будет равен 0.

Использование: e1 || e2

Логическая операция ИЛИ значений e1 и e2. Вначале проверяется значение e1 ; значение e2 проверяется только в том случае, если значение e1 - ложь. Значением выражения является Истина, если истинно любое значение e1 или e2.

Пример 1:

if(x<A || x>B) printf("out of range");

Операция, уровень приоритета которой равен 13

Уровень приоритета операции равен 13, выполняются такие операции слева направо.

Операция условный оператор: ?

Тип операндов - арифметические; второй и третий операнды могут быть указателями, структурами, объединениями. Тип результата: int, long, unsigned, double, указатель, структура или объединение. Второй и третий операнды преобразуются к одному и тому же типу.

Условный оператор является единственным оператором, для которого необходимы три операнда ; используется он следующим образом:

a ? b : c

где a, b, c - выражения. Если a не равно 0, то результат выражения a ? b : c равен b ; иначе результат равен c. Из двух последних операндов вычисляется только один.

Использование:

ae?e1:e2

или

pe?e1:e2 (где pe - указатель)

Если истинно ae или pe, то выполняется e1 ; иначе выполняется e2. Значением этого выражения является значение выражения e1 или e2.

Пример:

abs=(i<=0)?-i:i;

Операция, уровень приоритета которой равен 14

Уровень приоритета операции равен 14, выполняются такие операции справа налево.

Операция простое присваивание "="

Тип операндов: арифметические, указатели, объединения или структуры. Тип результата: если оба операнда имеют арифметический тип, то значение правого операнда преобразуется к типу левого

операнда.

Использование:

v=e

Присваивание значения e переменной v.

www.intuit.ru/studies/professional_skill_improvements/1747/courses/43/print_lecture/655

13/16

07.06.13

Операции

Пример:

x=y;

Операция сложное присваивание "="

Обозначим <знак> один из знаков : +, -, *, /, %, >>, <<, &, ^, |.

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

где v - переменная, а e - выражение, значение выражения становится новым значением переменной v.

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

v <знак>= e

приблизительно эквивалентна оператору присваивания

v = v<знак> e

Пример 1:

y+=2; /* Увеличение переменной y на 2 */ p+=n;

x-=3; ptr-=2; timesx*=x; x/=2; x%=10; x>>=4; x<<=1;

remitems&=mask;

control^=seton; additems |=mask;

Типы операндов и результата сложного оператора присваивания можно определить на основании этой эквивалентности. Однако приведенный эквивалент для сложного оператора присваивания не совсем точен. В выражении

v <знак>= e

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

v = v <знак> e

этот операнд вычисляется дважды. Это различие проявляется в побочных эффектах, связанных с вычислением операнда v, например, при изменении значения какой-либо переменной. Рассмотрим это на примерах:

a[i++]* = n;

При выполнении вычисление левого операнда дает побочный эффект - увеличение значения переменной i. Следовательно, это присваивание не эквивалентно присваиванию

a[i++] = a[i++]*n;.

Эквивалентом первой операции присваивания может служить последовательность операций

a[i]=a[i]*n;

www.intuit.ru/studies/professional_skill_improvements/1747/courses/43/print_lecture/655

14/16

07.06.13

Операции

i=i+1;

аэквивалентом второй - последовательность операций

a[i]=a[i+1]*n;

i=i+2;

или последовательность операций

a[i+1]=a[i]*n;

i=i+2;

в зависимости от того, какая часть операции присваивания вычисляется раньше - левая или правая.

Порядок таких вычислений не определен.

Операция, уровень приоритета которой равен 15

Уровень приоритета операции равен 15, выполняются такие операции слева направо.

Операция запятая: ,

Тип результата совпадает с типом правого операнда. Операция объединяет два выражения в одно выражение, значением которого является значение правого операнда; значение левого операнда вычисляется только для получения побочных эффектов.

Использование:

e1,e2

Сначала выполняется выражение e1, потом выражение е2. Значением всего выражения является значение выражения е2.

Пример:

for(i=A,j=B;i<j;i++,j--)

/* организация циклического повторения. Оператор со счетчиком */

p[i]=p[j];

Примеры простых задач

/* Задача № 1 (пример на использование операции *) Определить площадь боковой поверхности конуса радиуса r и имеющего длину образующей l.*/

#include <stdio.h> #include <math.h>

/* подключение библиотеки математических функций */ const float pi=3.14159;

float r=10; float l=50; float s; main()

{

s=pi*r*l;

printf("\n Площадь боковой поверхности s=%f",s);

}

/* Задача № 2 (пример на использование операций +, * и /. Тело движется прямолинейно с ускорением. Даны а(м/сек2) - ускорение, V(M/C) - начальная скорость. Требуется определить, какой путь пройдет

www.intuit.ru/studies/professional_skill_improvements/1747/courses/43/print_lecture/655

15/16

07.06.13

Операции

тело за t секунд.*/ #include <stdio.h> float а, v, t, s ; main()

{

a=20.2;

v=50.3;

t=65;

s=(v*t)+(a*t*t/2); printf("\n Путь s=%f M",s);

}

/* Задача № 3 (пример на использование операций =, / и вычисления степени). Вычислите среднее арифметическое и среднее геометрическое трех чисел а,b,с.*/

#include <stdio.h> #include <math.h>

float a=b=c=2005.1; float x,у; main ()

{

x=(a+b+c)/3;

y=pow( (a*b*c),(1/3));

/*функция pow берется из библиотеки math.h*/ printf("\n среднее арифметическое x=%f",x); printf("\n среднее геометрическое y=%f",y);

}

/* Задача № 4 (пример на использование операций =,*, / и функции hypot. Даны катеты прямоугольного треугольника. Найти его гипотенузу и площадь.*/ #include <stdio.h>

#include <math.h>

float x=y=50.7; float z,s; main()

{

z=hypot(х, у) ;/* вычисление гипотенузы*/ s=x*y/2;

printf("\n гипотенуза=%f см",z); printf("\n Плoщaдь=%f кв см",s);

}

Внимание! Если Вы увидите ошибку на нашем сайте, выделите её и нажмите Ctrl+Enter.

© Национальный Открытый Университет "ИНТУИТ", 2012 | www.intuit.ru

www.intuit.ru/studies/professional_skill_improvements/1747/courses/43/print_lecture/655

16/16