Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЗФ_ОАиП / Лекции ГГУ Скорины - Программирование.doc
Скачиваний:
179
Добавлен:
21.03.2016
Размер:
2.27 Mб
Скачать

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

В языке С имеется стандартный набор арифметических операций: +, -, /, *. Ассоциативность арифметических операций принята слева направо.

Обратить внимание! Деление целых чисел в С дает всегда целое число. Если же хотя бы один из операндов вещественный, результат также будет вещественным. В языке С принято правило, согласно которому дробная часть у результата деления целых чисел отбрасывается. Это действие называется «усечением», т.е. результат деления целых чисел округляется не до ближайшего целого, а всегда до меньшего целого числа.

3/2   // результат = 1 int a = 2, b = 1;

3./2 // результат = 1.5 float sr = (a+b) / 2; // 1

sr = (a+b) / 2.; // 1.5

К арифметическим операциям относится и операция взятия остатка %. Данная операция делит первый операнд на второй и берёт остаток от деления:

int x=25;

int y=10;

int z;

z=x%y; // z = 5

Операция % определена только над целыми операндами. Это так называемое деление по модулю: результат – остаток от деления. Аналогом в Паскале была операция mod.

9.2. Операция изменения знака

Знак минус используется для указания или изменения алгебраического знака некоторой величины.

a = -15;

b = -a; // b = 15

Когда знак используется подобным образом, данная операция называется «унарный минус».

x = -x; // Операция изменяет алгебраический знак x. Не надо для изменения знака умножать на -1: x*(-1) или вычитать из 0: 0-x.

9.3. Операции инкремента и декремента

Специфическими для С являются операции инкремента ++ и декремента --.

Инкремент – увеличение переменной на единицу. Новое значение сохраняется в переменной.

Декремент – уменьшение переменной на единицу. Новое значение сохраняется в переменной.

Эти операции могут применяться только к переменным. Операнд инкремента и декремента может иметь целый или вещественный тип или быть указателем.

Операции инкремента и декремента могут записываться как перед своим операндом (префиксная форма записи), так и после него (постфиксная запись).

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

int x = 5;

int y;

y = ++x; // y = 6, x = 6

y = --x; // y = 5, x = 5

y = x++; // y = 5, x = 6

y = x--; // y = 6, x = 5

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

В языке С знак равенства не означает «равно». Он означает операцию присваивания некоторого значения. Операнду, находящемуся в левой части, присваивается значение операнда, стоящего в правой части операции: x = 5; (теперь в переменной x хранится значение 5).

Левым операндом должна быть переменная. Нельзя записать: 5 = x;

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

int x, y, z;

x = y = z = 0;

Присваивания выполняются справа налево: сначала переменная z получает значение 0, затем переменная y и наконец x.

В языке С принято следующее правило: любое выражение с оператором присваивания, заключенное в круглые скобки, имеет значение, равное присваиваемому. Например, выражение (a = 2 + 5) имеет значение 9. После этого можно записать другое выражение, например ((a = 2 + 5) < 10), которое всегда будет истинным.

Можно писать даже так:

x = (a = 2 + 5) * (b = 1 + 1); // a=7 b=2 x=14

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

9.5. Арифметические операции с присваиванием: +=, -=, *=, /=, %=

Данные операции позволяют сократить код:

int x = 5;

x += 5; // две последние строки эквивалентны

x = x + 5;

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

Такие операции присваивания есть еще и для операций сдвига и поразрядных логических операций: <<=, >>=, &=, ^=, |=.