- •Основные элементы языка Си
- •Константы
- •Константы целого типа
- •Задание.
- •Беззнаковые и длинные целые константы
- •Константы с плавающей точкой
- •Escape-последовательности
- •Символьные константы
- •Строковые константы
- •Задание.
- •Вопросы.
- •Основные операции языка Си
- •Общие положения
- •Арифметические операции
- •Унарные операции
- •Унарный минус
- •Операция унарный плюс.
- •Задание.
- •Операции инкремента и декремента
- •Задание.
- •Операции отношения и логические операции
- •Задание.
- •Операции присваивания
- •Примеры.
- •Задание.
- •Побитовые операции
- •Задание.
- •Логические побитовые операции
- •Задание.
- •Маскирование
- •Пример.
- •Задание.
- •Пример.
- •Задание.
- •Пример.
- •Пример.
- •Задание.
- •Пример.
- •Примеры.
- •Примеры.
- •Примеры.
- •Пример.
- •Задание.
- •Побочные эффекты. Приоритеты и порядок выполнения операций
- •Пример.
- •Пример.
-
Задание.
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;
-
Операции присваивания
В Си имеется несколько операций (именно операций!) присваивания. Наиболее используемая — обычное присваивание ( = ). Например,
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;
При выполнении операции присваиваемое значение приводится к типу операнда, стоящего в левой части, что и будет значением всей операции в целом.
В некоторых обстоятельствах это может привести к изменению результата, например, если значение с плавающей точкой присваивается переменной целого типа.
Определенная опасность есть при присваивании символьной константы переменной числового типа, так как значение может зависеть от используемой кодовой таблицы.
-
Примеры.
Пусть 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.