Урок 4.1. Арифметические операции

4.1. Арифметические операции

В качестве арифметических операций в  Си используются следующие:

 

Таблица 5.1 Арифметические операции

Название арифметической операции Знак операции в Си
Сложение +
Вычитание -
Умножение *
Деление /
Деление по модулю %
Унарный плюс +
Унарный минус -

 

Операции таблицы 5.1 с первой по пятую являются бинарными, т.е. выполняются над парой данных. Операция "унарный минус" применима к одному операнду, например, можно записать выражение Си: -(delta+2.7)

Мы употребили термин "выражение". Понятие выражения в Си аналогично понятию выражения в других языках программирования. С точки зрения синтаксиса выражение состоит из операндов (переменных, констант, вызовов функций), связанных знаками операции и, по необходимости, круглыми скобками. Частным случаем выражения является константа или переменная, а также другой объект языка из рассматриваемых далее. Как уже указывалось, выражение, состоящее только из одних констант, называется константным выражением. Семантика выражения в каждом конкретном случае зависит от задачи пользователя, однако выражение всегда имеет значение, зависящее от данных и тех операций, которые к ним применялись в процессе вычисления значения.

Заслуживает внимания операция унарный плюс. Дело в том, что Си осуществляет перегруппировку выражений, пытаясь создать выражения эффективные для компиляции. Однако выражения с унарным плюсом не перегруппировываются. Учитывая наличие унарного плюса, можно записать, например, такое выражение: a++(b+с), которое гарантированно будет выполняться следующим образом: результат (b+c) будет прибавлен к значению а, хотя выражение, не использующее унарного плюса (а+(b+c)), может вычисляться, как (a+b)+c.

Вернемся к бинарным операциям. Операции +, -, *, / применимы ко всем основным типам данных, однако при делении целого на целое дробная часть отбрасывается. Например, выражение 5/2 имеет значение 2, а не 2.5. Чтобы получить точное значение при делении пятерки на двойку нужно это выражение записать так, чтобы хотя бы один из его операндов не был целого типа, например, 5/2.0 и 5.0/2 или 5.0/2.0. (см. 4.6. Преобразования типов).

Операция "взятие модуля" (%) дает остаток от деления. Например, 5%2 даёт 1, а 13%9 даёт 4. Выражение x%y будет иметь значение нуль, если х точно делится на у. Операцию % нельзя применять для данных типа float и double. Примеры:

10 % 2 == 0

9 % 2 == 1

10 %  3 == 1

11 % 3 == 2

3 % 11 == 3

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

-            унарный плюс(+);

-            унарный минус(-);

-            умножение(*), деление(/), взятие модуля(%);

-            сложение(+), вычитание(-).

Таким образом, среди арифметических операций наивысший приоритет имеют унарные операции и самый низкий операции сложения и вычитания. Операции одного приоритета, следующие подряд выполняются слева направо. (см. 4.10. Приоритеты операций)

Как и в большинстве языков программирования, в Си для определения необходимой последовательности вычисления значения выражения можно использовать круглые скобки. Причем в Си использование круглых скобок трактуется как операция группирование, имеющая наивысший приоритет среди всех операций Си. Однако для ассоциативных и коммутативных операций ( среди арифметических это * и +) порядок вычисления не определяется, и компилятор может переупорядочить вычисления даже при наличии скобок. Например, об этом уже говорилось, a+(b+c) может вычисляться как (a+b)+c. Это редко приводит к различным результатам, но если обязательно нужен определенный порядок, то следует явно использовать промежуточные переменные.

Примеры записи арифметических выражений:

 3.14 /(х+y) * c

 0.1е-6 + z – x * (m + k + (m * n))* d

 sin(x) + log(x+1)- exp(x) * pow(x,2)

В заключение этого раздела обращаем внимание на отсутствие в языке Си операции возведения в степень. Возведение в степень реализуется встроенной  функцией pow(). Прототипы математических функций Си содержатся в include файле math.h.

Примеры некоторых встроенных функций языка:

abs( a ) модуль или абсолютное значение от а abs(-3.0)=3.0
sqrt(a) корень квадратный из а, причём а не отрицательно sqrt(9.0)=3.0
pow(a, b) возведение  а в степень b pow(2,3)=8
ceil( a ) округление а до наименьшего целого, но не меньше чем а ceil(2.3)=3.0
ceil(-2.3)=-2.0
floor(a) округление а до наибольшего целого, но не больше чем а floor(12.4)=12
floor(-2.9)=-3
fmod(a, b) вычисление остатка от  a/b fmod(4.4, 7.5) = 4.4
fmod( 7.5, 4.4) = 3.1
exp(a) вычисление экспоненты еа exp(0)=1
sin(a) a задаётся в радианах
cos(a) a задаётся в радианах
log(a) натуральный логарифм a(основанием является экспонента) log(1.0)=0.0
log10(a) десятичный логарифм а Log10(10)=1
asin(a) арксинус a, где  -1.0 < а < 1.0 asin(1)=1.5708
рассказать друзьям и получить подарок

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Translate Переводчик

Подписка на новости

SmartResponder.ru
Ваш e-mail: *
Ваше имя: *

Хостинг для Wordpress сайтов