Выражения и операции

Выражение – это комбинация операндов, знаков операций и круглых скобок, используемая для получения значения определенного типа. Операндом (участником операции) может быть константа, переменная, функция или другое выражение. Знаки операции определяют действия (элементарные операции) над операндами в порядке, заданном приоритетами операций и круглыми скобками, которые образуют вложенные подвыражения. Вычисление выражения начинается с самых внутренних скобок.

Унарные операции (с одним операндом) имеют приоритет над бинарными (с двумя операндами). Мультипликативные операции (умножение (*), деление (/), в том числе и деление нацело, деление по модулю (%)) старше аддитивных (сложение (+), вычитание (–)), за которыми идут операции отношения и логические операции [1, c.40].

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

#include<math.h>.

Для аргументов функций, которые имеют тип:
int i; unsigned int u; double x, y;
наиболее используемы в выражениях следующие функции [1, c.48]:
sin(x) ~ sin x; cos(x) ~ cos x; tan(x) ~ tg x; acos(x) ~ arccos x; asin (x) ~ arcsin x; atan(x) ~ arctg x; fabs(x) ~ | x | для вещественного x (результат double); abs(i) ~ | i | - для целого i(результат int); log(x) ~ ln x; log10(x) ~ lg x; exp(x) ~ ex, где e – основание натурального логарифма (2.7); floor(x) ~ наибольшее целое число <= x (результат double); ceil(x) ~ наименьшее целое число >= x (результат double); srand(u) ~ инициализация генератора случайных чисел (результат double); rand ~ равномерное псевдослучайное число от 0 до 232-1 (результат int).

Общее правило вычисления выражения: перед вычислением все входящие в него переменные должны быть определены, то есть должны иметь численные значения.

По роли выполняемой в программе выражения можно разделить на арифметические и логические.

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

математическая формула: арифметическое выражение:
a*sin(x)/sqrt(x*x+fabs(x-a))
(a+b)/(2*p-q)
a/(-2)

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

a+b×sin t – -2cos t a+b*sin(t) – 2*cos(t)

Результат выражения определяется выполняемыми операциями с учетом преобразования типов операндов неявного (автоматического) и явного.

Неявное преобразование типов операндов осуществляет изменение типа участвующих в операциях операндов к типу операнда с наибольшим размером (“старший тип”). Перечислим типы данных, начиная со старшего:

long double – длинный вещественный с двойной точностью;

double – вещественный с двойной точностью;

float – вещественный;

unsigned long – длинный беззнаковый целый;

long int – длинный целый;

unsigned – беззнаковый целый;

int – целый;

char – символьный.

Пример. Для заданных описаний:

double p; unsigned char ch; unsigned long m; int i;

при вычислении выражения p*(i+ch/m) операнд сh преобразуется к типу unsigned long, к которому преобразуется также операнд i и результат в скобках, затем последний преобразуется к типу double и результат выражения будет иметь тип double.

Явное преобразование типа операнда осуществляется программистом с помощью операции вида

(тип) выражение,
если без такого преобразования результат выражения будет неверный.

Деление целых операндов дает результат целого типа, что может привести к неожиданным результатам.

Пример. Пусть описана переменная int k=7, тогда при вычислении выражения

k / 2 получим в результате 3, вместо ожидаемого 3.5.
Применив преобразование типа переменной k

(float) k / 2, получим результат 3.5.
Этот же результат можно получить, применяя смешанные (разного типа) операнды:

k / 2.0.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: