Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб2.Выражение и инструкция.docx
Скачиваний:
6
Добавлен:
08.05.2019
Размер:
47.28 Кб
Скачать

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

Выражение <Lvalue> = <Rvalue> есть выражение присваивания. В левой части находится переменная, в правой части – ее значение. Значение может быть константой, переменной, значение которой определено, выражением. Например, x = 0, y = x, z = x + y.

Выражение присваивания i = i + 2, в котором стоящая слева переменная повторяется и справа, можно написать в сжатом виде: i += 2. Операция +=, как и =, называется операцией присваивания. Большинству бинарных операций (аналогичных + и имеющих левый и правый операнды) соответствуют операции присваивания op=, где op ‑ одна из операций + - * / % << >> & ^ |. Если i ‑ переменная и e ‑ выражение, то i op= e эквивалентно i = i op (e) с той разницей, что i вычисляется только один раз. Обратите внимание на скобки вокруг e: x *= y + 1 эквивалентно x = x * (y + 1), но не x = x*y+1. Помимо краткости, операции присваивания обладают тем преимуществом, что они более соответствуют тому, как человек мыслит. Мы говорим "прибавить 2 к i" или "увеличить i на 2", а не "взять i, добавить 2 и затем вернуть результат в i", так что выражение i += 2 лучше, чем i = i + 2. Следует иметь в виду и то, что подобные операции присваивания могут помочь компилятору сгенерировать более эффективный код. Типом и значением любого выражения присваивания являются тип и значение его левого операнда после завершения присваивания.

Инкремент ++и декремент --

Операция ++ явно задает инкремент в отличие от неявного его задания с помощью сложения и присваивания. Различают постфиксный инкремент lvalue ++ и префиксный инкремент ++ lvalue.

По определению ++lvalue означает lvalue+=1, что, в свою очередь означает lvalue=lvalue+1 при условии, что содержимое lvalue не вызывает побочных эффектов. Выражение, обозначающее операнд инкремента, вычисляется только один раз.

Операции ++ и - - могут использоваться как префиксные и постфиксные операции. Значением ++x является новое (т. е. увеличенное на 1) значение x. Например, y = ++x эквивалентно y = (x += 1). Напротив, значение x++ равно прежнему значению x. Например, y = x++ эквивалентно y = (t = x, x += 1, t), где t - переменная того же типа, что и x.

Аналогично определяется операция декремента (--). Различают постфиксный декремент lvalue – и префиксный декремент – lvalue. По определению --lvalue означает lvalue -= 1.

Выражение и оператор

Выражение, скажем x = 0, или i++, или printf(…), становится оператором, если в конце его поставить точку с запятой, например: x = 0; i++; printf(...); В Си точка с запятой является заключающим символом оператора, а не разделителем. Фигурные скобки { и } используются для объединения объявлений и операторов в составной оператор, или блок, чтобы с точки зрения синтаксиса эта новая конструкция воспринималась как один оператор. После правой закрывающей фигурной скобки в конце блока точка с запятой не ставится.

Упражнения

1

Найдите ошибки в программе

#include studio.h

main

{

int i

i := 43

print ('В году i недель')

}

2

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

int n;

n = 2;

printf ("%d + %d = %d\n", n, n, n + n);

3

Что будет результатом каждого выражения:

a = b = 5

a + b

a++ + b

++a + b

--a + b

a-- + b