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

ОАиП / Лабораторная работа N 2

.doc
Скачиваний:
35
Добавлен:
01.03.2016
Размер:
132.61 Кб
Скачать

Лабораторная работа 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 (тип)

Унарный

Справа налево

* / %

Мультипликативный

Слева направо

+ -

Аддитивный

Слева направо

<< >>

Сдвиг

Слева направо

< > <= >=

Отношение

Слева направо

== !=

Отношение

Слева направо

&

Побитовое «И»

Слева направо

^

Побитовое исключающее «ИЛИ»

Слева направо

|

Побитовое включающее «ИЛИ»

Слева направо

&&

Логическое «И»

Слева направо

||

Логическое «ИЛИ»

Слева направо

? :

Условная

Справа налево

= *= /= %= += -= <<= >>= &= != ^=

Простое и составное

присваивание

Справа налево

,

Последовательное преобразование

Слева направо

Задания.

  1. Вывести приглашение для ввода двух целых чисел. Получить два целых числа. Вывести результат сложения, вычитания, деления, умножения и остаток от деления. Сделать вывод о том, чему будет равен остаток от деления и результат деления, если числа не делятся нацело (пример 10/3, 1/5).

  2. Вывести приглашение для ввода двух целых чисел. Получить два целых числа. Вывести результат

  1. поразрядной конъюнкции двух чисел,

  2. поразрядной дизъюнкции двух чисел,

  3. поразрядного исключающего ИЛИ двух чисел,

  4. поразрядной инверсии первого числа,

  5. сдвига влево первого числа на число бит равное второму числу,

  6. сдвига вправо первого числа на число бит равное второму числу.

Проверить результаты выполнения письменно для чисел

1 вариант.

а=6, b=3

2 вариант.

а=7, b=2

3 вариант.

а=5, b=1

4 вариант.

а=8, b=3

5 вариант.

а=4, b=2

  1. Вывести приглашение для числа А. Получить число А. С помощью тернарной операции присвоить числу У=1 – если А входить в область значений переменной Х, и У=0-если не входит. Вывести ответ входить ли А в область значений переменной Х или нет. Для проверки вхождения использовать логические операции и операции отношения.

1 вариант.

2 вариант.

3 вариант.

4 вариант.

5 вариант.

  1. Вывести приглашение для ввода двух целых чисел. Получить два целых числа. Проверить работу операций инкремента и декремента на примере использования их в выражениях. Объяснить порядок выполнения операций (см. таблицу приоритета операций) для предложенных чисел.

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

  1. Объявить в программе две переменных целого типа (а, 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 в выражении не использовать!)

  1. С помощью операции 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