Лабораторная работа "Выражения в программах на Си"
ЛАБОРАТОРНАЯ РАБОТА "Выражения в программах на Си"
Цель работы: Изучение стандартных операций и правил построения выражений в программах на Си.
Выражения.
Выражение - это конструкция языка, предназначенная для получения некоторого значения. Тип вычисленного значения определяет тип выражения. Выражение может содержать константы, переменные, знаки операций, вызовы функций, возвращающих значения и круглые скобки. Выражение не обязательно должно содержать все выше перечисленные конструкции, например, одна константа или одна переменная являются частными случаями выражений.
ЗАДАНИЕ 1. Определите, какие из приведенных ниже конструкций являются выражениями.
1) x + 1.5
2) sin( x )
3) y = x +1;
4) 127
5) x = y = z = 0
6) { z = 2 * cos( x ) - y; }
7) int x = 5;
Операции.
Операции являются элементами выражений и также возвращают значение. Помимо собственно действия выполняемого операцией по вычислению значения, с каждой операцией связаны следующие атрибуты: арность (количество аргументов), знак операции, ее приоритет и ассоциативность. Знак операции не обязательно уникален, т. е. две операции могут иметь одно и то же обозначение. Уникальным должно быть сочетание знака и арности, тогда компилятор сможет однозначно распознать операцию. Если выражение содержит одну операцию, например, x = 7, то ни приоритет, ни ассоциативность не важны. Если же в выражении несколько операций, компилятору необходимо знать, в каком порядке их выполнять. Например, в выражении x + 2 * y прежде должна выполняться операция умножения и, затем, операция сложения. Чтобы это было так, операция умножения должна иметь более высокий приоритет, нежели операция сложения. Ассоциативность важна, если несколько операций в выражении имеют одинаковый приоритет, например, x = y = x = 0. В этом примере операции должны выполняться справа налево (правая ассоциативность). В приложении представлены все стандартные операции Си, их приоритет (тем выше, чем выше уровень приоритета P), ассоциативность и арность.
ЗАДАНИЕ 2. Определите, какими будут значения переменных i, j, k после вычисления значения следующего выражения:
k = ( --i + 2 * j - k++ , j-- + i - k )
если изначально эти значения были следующими:
i = 5 j = 12 k = 7 Объясните результат.
ЗАДАНИЕ 3. Напишите программу, вычисляющую значение следующего выражения:
m = i /16 + j *128-17 + k *2- l /32 , если i > j + 2 * k и
m = i /16 + j *128-17 + k *2 + l /32 в противном случае,
для произвольных значений переменных i, j, k и l (ввод с помощью scanf), не используя при этом операции умножения и деления.
ЗАДАНИЕ 4. Напишите программу, которая меняет местами последний (младший) и предпоследний байты переменной i типа int.
ЗАДАНИЕ 5. Напишите программу, которая определяет, сколько единиц содержится в двоичном представлении переменной типа char.
Приложение.
Приоритеты и ассоциативность операций Си. P - уровень приоритета, Ac - ассоциативность, Ар - арность. ___________________________
|


