Задачи по языку С

       

Опять следуем таблице приоритетов операций.


x *= 3 + 2 Опять следуем таблице приоритетов операций.
x *= (3+2) Как мы уже видели раньше, операция присваивания имеет меньший приоритет чам арифметические операции (*= является операцией присваивания).
(x*=(3+2)) (x*=5) Вычисляем выражение
(x=x*5) (x=10) 10 Раскроем операцию присваивания
Об операторе define. Наша программа начинается со строки #define PRINTX printf("%d\n",x)

Каждая строка в программе на языке С, начинающаяся символом #, есть оператор препроцессора языка С. Одна из функций препроцессора заключается в замене одной строки на другую. Данный оператор define говорит препроцессору, что нужно заменять все встречающиеся в программе строки PRINTX строками printf("%d\n",x).





вначале x=10 x *= y = z = 4
x *= y = (z=4) В этом выражении все операции есть операции присваивания, значит, порядок их выполнения такой, как указан в таблице приоритетов, т.е. справа налево
x *= (y=(z=4)) (x*=(y=(z=4)))
(x*=(y=4)) (x*=4) 40 Вычисляем выражение


1

вначале y=4, z=4 x = y == z
x = (y==z) Новички, программирующие на языке С, часто путают операции присваивания = и сравнение на равенство ==. Из таблицы приоритетов операций видно, что приоритет операции == выше, чем операции =.
(x=(y==z)) (x=(TRUE))
(x=1) Операции отношения и сравнения на равенство вырабатывают результат ИСТИНА (целое 1) или ЛОЖЬ (целое 0).


вначале x=1, z=4 x == ( y = z )
(x==(y=z)) В этом выражении операция присваивания благодаря действию скобок выполняется раньше, чем операция сравнения на равенство.
(x==4) Вычисляем выражение
FALSE или 0 Значение выражения - 0. Заметьте, однако, что значение x не изменилось (операция == не меняет значения ее операндов, так что PRINTX напечатает 1.

Содержание раздела