Операциями отношения являются => > =< < все они имеют одинаковое старшинство. Непосредственно за ни-ми по уровню старшинства следуют операции равенства и нера-венства: == != которые тоже имеют одинаковое старшинство. операции отноше-ния младше арифметических операций, так что выражения типаI<LIM-1 понимаются как I<(LIM-1), как и предполагается. Логические связки && и \!\! более интересны. Выражения,связанные операциями && и \!\!, вычисляются слева направо,причем их рассмотрение прекращается сразу же как только ста-новится ясно, будет ли результат истиной или ложью. учетэтих свойств очень существенен для написания правильно рабо-тающих программ. Рассмотрим, например, оператор цикла в счи-тывающей строку функции GETLINE, которую мы написали в главе1.FOR(I=0;I<LIM-1 && (C=GETCHAR()) != '\N' && C != EOF; ++I) S[I]=C; Ясно, что перед считыванием нового символа необходимопроверить, имеется ли еще место в массиве S, так что условиеI<LIM-1 должно проверяться первым. И если это условие не вы-полняется, мы не должны считывать следующий символ. Так же неудачным было бы сравнение 'C' с EOF до обраще-ния к функции GETCHAR : прежде чем проверять символ, егонужно считать. Старшинство операции && выше, чем у \!\!, и обе онимладше операций отношения и равенства. Поэтому такие выраже-ния, как I<LIM-1 && (C = GETCHAR()) != '\N' && C != EOF не нуждаются в дополнительных круглых скобках. Но так какоперация != старше операции присваивания, то для достиженияправильного результата в выражении (C = GETCHAR()) != '\N' кобки необходимы. Унарная операция отрицания ! Преобразует ненулевой илиистинный операнд в 0, а нулевой или ложный операнд в 1.Обычное использование операции ! Заключается в записи IF( ! INWORD ) Вместо IF( INWORD == 0 ) Tрудно сказать, какая форма лучше. Конструкции типа ! INWORDЧитаются довольно удобно ("если не в слове"). Но в болеесложных случаях они могут оказаться трудными для понимания. Упражнение 2-1 --------------- Напишите оператор цикла, эквивалентный приведенному вышеоператору FOR, не используя операции &&.