Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
c-operators.doc
Скачиваний:
7
Добавлен:
08.11.2018
Размер:
198.14 Кб
Скачать
      1. Задание.

1. Вычислить значения выражений

а) при i=1, j=2, k=3

i < j (i+j) >= k(j + k)> (i+5)

k!=3

j==2

б) при i=7, f=5.5,c='w'

f>5(i+f)<=10 c!='p'

c>= 10*(i+f)

2. В каком порядке будут вычисляться выражения и какие значения они получат при i=7, f=5.5, c='w'?

i + f<=10

i>= 6 && c=='w'

c!='p' || i+f<= 10

3. Каковы будут значения x и w в результате выполнения следующего фрагмента программы, если x=2, y=1, z=0:

x = x&& y || z;

w = x || !y && z;

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

В Си имеется несколько операций (именно операций!) присваивания. Наиболее используемая — обычное присваивание ( = ). Например,

a = 3; x = y; sum = x + y; delta =0.001;

Общая форма присваивания:

l\_value = <выражение>.

Следует помнить, что операции присваивания (=) и проверки равенства (==) принципиально различны, хотя синтаксически могут участвовать в одних и тех же выражениях. При присваивании объект-адресат меняет свое значение, а при проверке на совпадение все объекты остаются неизменными. Обычно компиляторы выдают предупреждения о сомнительных ситуациях, например, если в месте, где по смыслу проводится проверка условия стоит присваивание (синтаксис допускает это).

Об операциях присваивания часто говорят, как о операторах (statement) присваивания.

Однако в Си — это операция (operator) со своим результатом, совпадающим с присваиваемым значением. Поэтому присваивание может истолковываться не только как оператор, но и входить составной частью в арифметические выражения. Результат этой операции совпадает с присваиваемым значением. Благодаря этому в Си возможно множественное присваивание:

x = y = z = 2+3;

Здесь вначале выполняется операция z=5, результат которой 5. Затем это число присваивается переменной y, результат операции вновь 5 и т.д. Результат последнего присваивания использоваться не будет и его значение как бы "повисает" в воздухе. Поэтому в Си оказываются синтаксически верными инструкции вида (компилятор просто выдаст предупреждение):

--9/5;

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

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

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

      1. Примеры.

Пусть i и j — переменные целого типа. Тогда результатами следующих выражений будут:

i=3.3 3

i=3.9 3 ( дробная часть отбрасывается!)

i=-3.9 -3

i=j=5.9 5(j=5)

В Си имется пять дополнительных арифметических операций присваивания ( +=, --=, *=, /= и \%= ) сочетающих присваивание с арифметическими операциями. Их применение дает ряд преимуществ: запись становится более лаконичной, а генерируемый компилятором код более эффективным, так как отпадает необходимость дважды вычислять один и тот же адрес. Например, вместо a[i]=a[i]+3 можно записать a[i]+=3.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]