Оператор IF - ELSE используется при необходимости сде-лать выбор. Формально синтаксис имеет вид IF (выражение) оператор-1 ELSE оператор-2, Где часть ELSE является необязательной. Сначала вычисля-ется выражение; если оно "истинно" /т.е. значение выраженияотлично от нуля/, то выполняется оператор-1. Если оно ложно/значение выражения равно нулю/, и если есть часть с ELSE,то вместо оператора-1 выполняется оператор-2. Так как IF просто проверяет численное значение выраже-ния, то возможно некоторое сокращение записи. Самой очевид-ной возможностью является запись IF (выражение)вместо IF (выражение !=0) иногда такая запись является ясной и естественной, но време-нами она становится загадочной. То, что часть ELSE в конструкции IF - ELSE является нео-бязательной, приводит к двусмысленности в случае, когда ELSEопускается во вложенной последовательности операторов IF.Эта неоднозначность разрешается обычным образом - ELSE свя-зывается с ближайшим предыдущим IF, не содержащим ELSE.Например, в IF ( N > 0 ) IF( A > B ) Z = A; ELSE Z = B; конструкция ELSE относится к внутреннему IF, как мы и пока-зали, сдвинув ELSE под соответствующий IF. Если это не то,что вы хотите, то для получения нужного соответствия необхо-димо использовать фигурные скобки: IF (N > 0) { IF (A > B) Z = A;}ELSE Z = B; Tакая двусмысленность особенно пагубна в ситуациях типа IF (N > 0) FOR (I = 0; I < N; I++) IF (S[I] > 0) { PRINTF("..."); RETURN(I); }ELSE /* WRONG */ PRINTF("ERROR - N IS ZERO\N"); Запись ELSE под IF ясно показывает, чего вы хотите, но ком-пилятор не получит соответствующего указания и свяжет ELSE свнутренним IF. Ошибки такого рода очень трудно обнаруживают-ся. Между прочим, обратите внимание, что в IF (A > B) Z = A; ELSE Z = B; после Z=A стоит точка с запятой. Дело в том, что согласнограмматическим правилам за IF должен следовать оператор, авыражение типа Z=A, являющееся оператором, всегда заканчива-ется точкой с запятой.