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

       

Пояснения:


Операции 3.1

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

Еще об операторе define. Оператор препроцессора, начинающий эту программу более сложный, чем в предшествующей программе. Здесь PRINT - имя макроподстановки с аргументами, а не просто строка, как ранее, которую надо заменить на другую строку. Препроцессор производит макроподстановку с аргументами в два этапа: вначале в теле подстановки формальные аргументы заменяются на фактические, затем получившаяся строка подставляется вместо обращения к макроподстановке.

Например, в этой программе PRINT имеет один формальный аргумент int. PRINT(x) - обращение к PRINT с фактическим аргументом x. Таким образом, каждое вхождение int в теле подстановки заменяется на x, затем получившаяся строка - printf("%d\n",x) подставляется вместо PRINT(x). Отметим, что аргумент int не сопоставляется с комбинацией букв int в середине идентификатора printf, так как формальный аргумент макроподстановки суть идентификатор и он сопоставляется только с идентификатором int.

Операции 3.2

вначале x=1, y=1, z=0 x ! y && z
x (!y) && z x ((!y)&&z) (x((!y)&&z)) Сопоставляем в соответствии с приоритетами операций операции с операндами.
(TRUE((!y)&&z)) (TRUEчто-то еще) TRUE или 1 Вычисляем слева направо.
<

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