Правила записи программы на языке Си 5 Правила формального описания синтаксиса языка программирования 6

Вид материалаЛекции
Подобный материал:
1   2   3   4   5   6   7   8   9   ...   28

6.Операции и выражения


Под операцией понимают некоторое действие, которое может быть выполнено над одним или несколькими операндами для получения результата. Операции и операнды могут объединяться в выражение. Каждое выражение вычисляется с учетом особенностей составляющих его операций и их приоритетов. В результате вычисляется значение выражения.

Существует большое количество операций различных видов: арифметические, логические, битовые и т.д. Наиболее просты для понимания арифметические операции. Каждая операция характеризуется выполняемыми действиями и результатом операции.

6.1.Простейшие арифметические операции


Определены для данных арифметических типов, т.е. вещественных (float, double) и целых (int, short, long, char и соответствующих им беззнаковых данных unsigned int, unsigned short, unsigned long, unsigned char).

Действие этих операций - соответствующее арифметическое действие. Результат операции - результат арифметического действия.

Одноместные арифметические операции имеют один операнд. К ним относятся операции "+" и "-", которые меняют знак операнда.

Результатом этих операций является значение операнда с противоположным знаком.

Двуместные арифметические операции имеют два операнда. К ним относятся операции + , - , * , / и % . Каждая из этих операций выполняет соответствующее действие, результат которого и является результатом операции. Операция + вычисляет сумму операндов, операция - вычисляет разность, операция * вычисляет произведение, операция / вычисляет частное от деления вещественных операндов или целую часть частного от деления целых операндов, операция % вычисляет остаток от деления первого операнда на второй.

Арифметические операции в выражениях выполняются слева направо в соответствии с общепринятыми приоритетами. Приоритет можно изменить с помощью скобок.


Примеры выражений с арифметическими операциями:

a + b%c

(a + b)/3*5

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


Операция присваивания выполняет действия по занесению результатов выражения, стоящего справа от знака присваивания = в область памяти, определяемую выражением, стоящим слева от знака присваивания. Чаще всего слева от знака присваивания стоит простая переменная. При выполнении присваивания происходит преобразование типа результата правого выражения к типу левого операнда.

Результат операции присваивания - значение присвоенной величины.

Поскольку присваивание является операцией, а не оператором, то в одном выражении допускается несколько присваиваний. В этом случае они выполняются справа налево

Например:


ab = ( c = d+5 ) * 6


Присваивание имеет самый низкий приоритет из всех операций.

6.3.Оператор-выражение


Выражение, оканчивающееся точкой с запятой, является оператором, т.е. наименьшей элементарной частью программы.


БНФ:

оператор = выражение ";"


Пример:

ab = ( c = d + 5 ) * 6; /* это оператор */


В дальнейшем будем строго придерживаться этой терминологии, т.е. выражением будем называть совокупность операндов, связанных операциями, а оператором - выражение заканчивающейся точкой с запятой.

6.4.Использование в выражениях операндов разных типов


При участии в арифметических операциях операндов разных типов, перед выполнением операции осуществляется преобразование типов так, чтобы не было потери точности. Затем осуществляется сама операция.

Типы данных в порядке возрастания точности:


char, short, int, long, float, double.


Пример:

int a, c;

float d, e;

e = d*(c+e); /* c будет преобразовано в float */

a = 'A' + 20; /* 'A' будет преобразовано в int */

6.5.Операции преобразования типов


В некоторых случаях правила преобразования типов не позволяют получить верный результат, например:


int a, b;

float c;

a = 7; b = 14;

c = a/b; /* результат 0 */


Для получения правильного результата можно поступить так


c = a; c = c/b;


А можно применить операцию преобразования типа:


БНФ:

преобразование_типа = "("имя_типа ")" выражение


имя_типа - название любого типа, в том числе и заданного программистом.

Для нашего примера применение операции преобразования типа будет выглядеть так:


c = (float)a / (float)b;


Операция преобразования типа имеет приоритет более высокий, чем арифметическая операция.

6.6.Стандартные математические функции


В любых арифметических выражениях можно использовать стандартные математические функции, которые можно применять к любым числовым операндам.

При использовании этих функций в программу необходимо включить файл , т.е. необходимо использовать директиву #include . При этом будут определены следующие функции:


sin(x) - синус (аргумент в радианах);

cos(x) - косинус (аргумент в радианах);

tan(x) - тангенс (аргумент в радианах);

asin(x) - арксинус (результат в радианах);

acos(x) - арккосинус (результат в радианах);

atan(x) - арктангенс (результат в радианах);

sinh(x) - гиперболический синус;

cosh(x) - гиперболический косинус;

tanh(x) - гиперболический тангенс;

log10(x) - десятичный логарифм;

pow10(x) - возведение числа 10 в степень x;

log(x) - натуральный логарифм;

exp(x) - экспонента;

sqrt(x) - квадратный корень;

pow(x,y) - возведение x в степень y;

fabs(x) - абсолютная величина для double;

abs(x) - абсолютная величина для int.