
programmirovanie / ОПиАЯ_№3_1
.doc3.1.5 Операции
-
арифметические;
-
логические;
-
отношения;
-
присваивания;
-
побитовые операции;
-
операция вычисления размера(sizeof );
-
операция следования (запятая);
-
другие операции.
Арифметические операции
+ -сложение
- -вычитание
* -умножение
/ -деление
% -остаток
+, -, /, * для переменных типа int, float, char.
% не определена для переменных типа float.
Целочисленные + и – выписываются без учёта переполнения
Операции отношения
(= =) проверка на равенство
(! =) проверка на неравенство
< меньше
< = меньше или равно
> больше
> = больше или равно
Все операции вырабатывают результат типа int. Если данное отношение истинно, то 1, если нет, то 0.
< > имеют равный приоритет. У < > приоритет больше, чем у (= =) и (!=). Приоритет операции присваивания ниже приоритета всех операций сложения.
Логические операции
&& операция и (and)
|| операция или (or)
! операция отрицания
У логических операций низкий приоритет. Аргументами логических операции могут быть любые числа. Простейшей формой логического выражения является единственное значение или переменная типа int, предназначенная для представления значения «истина» или «ложь». В следующем фрагменте когда такая переменная используется для представления утверждения, относится ли лицо данного возраста к категории пожилых жителей города, или нет
Int senior_citizen;
…
senior_citizen = age>=65;
Такая переменная senior_citizen может служить вполне законным условием при использовании в решении или проверке повторения цикла. Рассмотрим пример:
if(senior_citizen)
printf(“Send senior discount brochure.\n”);
Если мы определим значение идентификатора TRUE, равное 1, любое из этих выражений присваивания даст переменной senior_citizen значение1, означающее истинную
senior_citizen =1;
senior_citizen = TRUE
senior_citizen = 66>=65;
Таблица 3.1 Оператор &&
Операнд 1 |
Операнд 2 |
Операнд 1&& Операнд 2 |
Ненулевой |
Ненулевой |
1 |
Ненулевой |
0 |
0 |
0 |
Ненулевой |
0 |
0 |
0 |
0 |
Таблица 3.2 Оператор ||
Операнд 1 |
Операнд 2 |
Операнд 1|| Операнд 2 |
Ненулевой |
Ненулевой |
1 |
Ненулевой |
0 |
1 |
0 |
Ненулевой |
1 |
0 |
0 |
0 |
Таблица 3.3 Оператор !
Операнд 1 |
! операнд 2 |
Ненулевой |
0 |
0 |
1 |
Операции присваивания
=; +=; -=; *=; /= ; ++; --
Если типы левой и правой частей не совпадают, то тип правой части приводится к типу левой.
а+=b
a=a+b
a-=b
a=a-b
a*=b
a=a*b
a/=b
a=a/b
++ инкремент (т.е. увеличение переменной на 1)
-- декремент (т.е. уменьшение переменной на 1)
++а увеличение на 1 до использования этой переменной в выражении
а++ увеличение на 1 после использования этой переменной в выражении
Аналогично с а-- и --а
Пример:
a=b=c=d=f=0;
a=(b=c)*d
Таблица
Операция |
Приоритет |
Вызов функции |
в
низший |
! унарный + унарный – унарный & унарный * |
|
Явное преобразование типа |
|
*/% |
|
Бинарный + бинарный - |
|
< > <= >= |
|
== != |
|
&& |
|
|| |
|
= |
Упражнения для экспресс-проверки.
-
а) Оцените выражение
-
1 && (30 %>=0) && (30 %<=3)
-
б) Необходимы ли обе пары скобок?
в) Запишите логическое дополнение выражения двумя способами: в первом – добавьте один оператор и одну пару скобок. Во втором варианте примените теорему де Морган.
-
Равно ли 21 значение следующего выражения при n=4 и m=5?
++(n*m)
Поясните свой ответ.
-
Какие будут присвоены значения n, m, p при следующих начальных значениях?
j = 5
k = 2
n = j-++k;
m = j--+k--;
p = k+j;
-
Какие значения будут присвоены x, y, z?
x = 3;
y = 5;
z = 2;
x*= y+z;
y/= 2*z+1;
z+=x;
-
Что напечатает следующий фрагмент кода? Проверьте при следующем вводе: 345, 82, 6. Затем опишите действия кода.
printf(“\nEnter a positive integer> ”);
scanf(“%d”, &num);
do {
printf(“%d”, num % 10);
num/=10;
} while (num>0);
printf(“\n”);