ОАиП / Лабораторная работа N 2
.docЛабораторная работа N 2
“ Операции в языке Си”
Операции – это специальные комбинации символов, специфицирующие действия по преобразованию различных величин. Компилятор интерпретирует каждую из этих комбинаций как самостоятельную единицу, называемую лексемой.
В таблице 4.4.1 представлен список операций, они должны использоваться точно так, как представлены в таблице: без пробелов между символами в тех операциях, которые представлены несколькими символами.
Все операции в Си делятся на:
-
унарные (действия над одним операндом)
-
бинарные (действия над двумя операндами)
Знак |
Наименование операции |
Пример |
||||||||||||||
Арифметические операции |
||||||||||||||||
+ |
Сложение |
а = b + c; если b = 6, c = 4, то a = 10 |
||||||||||||||
- |
Вычитание |
а = b - c; если b = 3, c = 8, то a = -5 |
||||||||||||||
- |
Арифметическое отрицание |
а = - b; если b = 132, то a = -132 |
||||||||||||||
* |
Умножение |
а = b * c; если b = 2, c = 4, то a = 8 |
||||||||||||||
/ |
Деление |
а = b / c; если b = 7.0, c = 2.0, то a = 3.5 |
||||||||||||||
% |
Остаток от деления |
а = b % c; если b = 10, c = 3, то a = 1 |
||||||||||||||
Логические операции |
||||||||||||||||
&& |
Логическое «И» (конъюнкция) |
а = b && c; если b и c равны нулю, то a = 1, в противном случае a = 0 |
||||||||||||||
|| |
Логическое «ИЛИ» (дизъюнкция) |
а = b || c; если b и c равны нулю, то a = 0, в противном случае a = 1 |
||||||||||||||
! |
Логическое отрицание (инверсия) |
а = !b; если b = 0, то a = 1, в противном случае a = 0 |
||||||||||||||
Побитовые операции |
||||||||||||||||
& |
Поразрядная конъюнкция |
а = b & c; если оба сравниваемых бита единицы, то бит результата равен 1, в противном случае – 0. Если b = 1010, c = 0110, то a = 0010 |
||||||||||||||
| |
Поразрядная дизъюнкция |
а = b | c; если любой (или оба) из сравниваемых битов равен 1, то бит результата равен 1, в противном случае – 0. Если b = 1010, c = 0110, то a = 1110 |
||||||||||||||
^ |
Поразрядное «Исключающее ИЛИ» |
а = b ^ c; если один из сравниваемых битов равен 0, а второй бит равен 1, то бит результата равен 1, в противном случае (оба бита равны 1 или 0) – 0. Если b = 1010, c = 0110, то a = 1100 |
||||||||||||||
~ |
Поразрядная инверсия |
а = ~b; если b = 1010, то a = 0101 |
||||||||||||||
<< |
Сдвиг влево |
а = b << c; осуществляется сдвиг значения b влево на c разрядов; в освободившиеся разряды заносятся нули. Если b = 1011, c = 2, то a = 101100 |
||||||||||||||
>> |
Сдвиг вправо |
a = b >> c; осуществляется сдвиг значения b вправо на c разрядов; в освободившиеся разряды заносятся нули, если b имеет тип unsigned, и копии знакового бита в противном случае. Если b = 1011, c = 2, то a = 0010 |
||||||||||||||
Операции отношения |
||||||||||||||||
== |
Сравнение на равенство |
a == b; вырабатывает 1, если a равно b, и 0 – в противном случае |
||||||||||||||
> |
Больше |
a > b; вырабатывает 1, если a больше b, и 0 – в противном случае |
||||||||||||||
>= |
Больше или равно |
a >= b; вырабатывает 1, если a больше или равно b, и 0 – в противном случае |
||||||||||||||
< |
Меньше |
a < b; вырабатывает 1, если a меньше b, и 0 – в противном случае |
||||||||||||||
<= |
Меньше или равно |
a <= b; вырабатывает 1, если a меньше или равно b, и 0 – в противном случае |
||||||||||||||
!= |
Не равно |
a != b; вырабатывает 1, если a не равно b, и 0 – в противном случае |
||||||||||||||
Операции присваивания |
||||||||||||||||
= |
Простое присваивание |
a = b; a присваивается значение b |
||||||||||||||
|
Состовное присваивание |
+= Увеличить
на -= Уменьшить
на *= Домножить
на /= Поделить
на %= Поделить
с остатком на &&= Эквивалентно
операции «&&» ||= Эквивалентно
операции «||» |
||||||||||||||
Операции инкримента и декримента |
||||||||||||||||
++ |
Унарный инкремент |
a++ (++a) значение a увеличивается на единицу |
||||||||||||||
-- |
Унарный декремент |
a-- (--a) значение a уменьшается на единицу |
||||||||||||||
Операции адресации и разадресации |
||||||||||||||||
& |
Адресация |
ptr = &b; ptr присваивается адрес b |
||||||||||||||
* |
Разадресация |
a = *ptr; a присваивается значение по адресу ptr |
||||||||||||||
Операция последовательного вычисления |
||||||||||||||||
, |
Запятая |
a = (c--, ++b); «,» вычисляет два своих операнда слева направо. Результат операции имеет значение и тип второго операнда. Если c = 2, b = 3, то a = 4, c = 1, b = 4 |
||||||||||||||
Операция условного выражения |
||||||||||||||||
?: |
Условная (тернарная) операция |
a = (b < 0) ? (-b) : (b); a присваивается абсолютное значение b |
||||||||||||||
size-операция |
||||||||||||||||
sizeof |
Определение размера в байтах |
a = sizeof(int); определяет размер памяти, которому соответствует идентификатор или тип. Переменной a присваивается размер типа int |
Приоритет операций
Операция |
Вид операции |
Порядок выполнения |
() [] . -> |
Выражение |
Слева направо |
- ~ ! * & ++ -- sizeof (тип) |
Унарный |
Справа налево |
* / % |
Мультипликативный |
Слева направо |
+ - |
Аддитивный |
Слева направо |
<< >> |
Сдвиг |
Слева направо |
< > <= >= |
Отношение |
Слева направо |
== != |
Отношение |
Слева направо |
& |
Побитовое «И» |
Слева направо |
^ |
Побитовое исключающее «ИЛИ» |
Слева направо |
| |
Побитовое включающее «ИЛИ» |
Слева направо |
&& |
Логическое «И» |
Слева направо |
|| |
Логическое «ИЛИ» |
Слева направо |
? : |
Условная |
Справа налево |
= *= /= %= += -= <<= >>= &= != ^= |
Простое и составное присваивание |
Справа налево |
, |
Последовательное преобразование |
Слева направо |
Задания.
-
Вывести приглашение для ввода двух целых чисел. Получить два целых числа. Вывести результат сложения, вычитания, деления, умножения и остаток от деления. Сделать вывод о том, чему будет равен остаток от деления и результат деления, если числа не делятся нацело (пример 10/3, 1/5).
-
Вывести приглашение для ввода двух целых чисел. Получить два целых числа. Вывести результат
-
поразрядной конъюнкции двух чисел,
-
поразрядной дизъюнкции двух чисел,
-
поразрядного исключающего ИЛИ двух чисел,
-
поразрядной инверсии первого числа,
-
сдвига влево первого числа на число бит равное второму числу,
-
сдвига вправо первого числа на число бит равное второму числу.
Проверить результаты выполнения письменно для чисел
-
1 вариант.
а=6, b=3
2 вариант.
а=7, b=2
3 вариант.
а=5, b=1
4 вариант.
а=8, b=3
5 вариант.
а=4, b=2
-
Вывести приглашение для числа А. Получить число А. С помощью тернарной операции присвоить числу У=1 – если А входить в область значений переменной Х, и У=0-если не входит. Вывести ответ входить ли А в область значений переменной Х или нет. Для проверки вхождения использовать логические операции и операции отношения.
-
1 вариант.
2 вариант.
3 вариант.
4 вариант.
5 вариант.
-
Вывести приглашение для ввода двух целых чисел. Получить два целых числа. Проверить работу операций инкремента и декремента на примере использования их в выражениях. Объяснить порядок выполнения операций (см. таблицу приоритета операций) для предложенных чисел.
-
1 вариант.
с = ++а – b-- + a*b
а=10 и b=7
2 вариант.
с = --а + a*b + --b
а=8 и b=6
3 вариант.
с = a*b – ++а – b--
а=6 и b=3
4 вариант.
с = --а – --b + a/b
а=9 и b=5
5 вариант.
с = ++а + a/b – b--
а=4 и b=7
-
Объявить в программе две переменных целого типа (а, b) и два указателя на переменные целого типа (c, d). Вывести приглашение для ввода двух целых чисел. Получить два целых числа (а, b). Присвоить переменной с указатель на переменную а. Присвоить переменной d указатель на переменную b. После каждой операции выводить содержимое переменных!
-
1 вариант.
Через переменную с увеличить содержимое переменной а на 5. Через указатели с и d в переменную b записать сумму чисел а и b (сами переменные a и b в выражении не использовать!)
2 вариант.
Через переменную d уменьшить содержимое переменной b на 10. Через указатели с и d в переменную а записать произведение чисел а и b (сами переменные a и b в выражении не использовать!)
3 вариант.
Через переменную с уменьшить содержимое переменной а на 7. Через указатели с и d в переменную b записать произведение чисел а и b (сами переменные a и b в выражении не использовать!)
4 вариант.
Через переменную с увеличить содержимое переменной а в 5 раз. Через указатели с и d в переменную b записать результат поразрядной конъюнкции чисел а и b (сами переменные a и b в выражении не использовать!)
5 вариант.
Через переменную d увеличить содержимое переменной b в 2. Через указатели с и d в переменную а записать результат поразрядной дизъюнкции чисел а и b (сами переменные a и b в выражении не использовать!)
-
С помощью операции sizeof определить размер следующих типов данных. Также найти их диапазоны значений (библиотека <limits.h>).
signed char |
float |
|
unsigned char |
double |
|
signed int |
long double |
|
unsigned int |
|
|
signed short int |
|
|
unsigned short int |
|
|
signed long int |
|
|
unsigned long int |
|