основыкнигиwin/dos*nixготовоелирикагостиФОРУМПОИСК
Б.В. Керниган, Д.М. Ричи -- Язык C

2.11. Условные выражения

      Операторы

  IF (A > B)
     Z = A;
  ELSE
     Z = B;

конечно вычисляют в Z максимум из а и в. Условное выражение, записанное с помощью тернарной операции "?:", предоставляет другую возможность для записи этой и аналогичных конструкций. В выражении

 е1 ? Е2 : е3

сначала вычисляется выражение е1. Если оно отлично от нуля (истинно), то вычисляется выражение е2, которое и становится значением условного выражения. В противном случае вычисляется е3, и оно становится значением условного выражения. Каждый раз вычисляется только одно из выражения е2 и е3. Таким образом, чтобы положить Z равным максимуму из а и в, можно написать

 Z = (A > B) ? A : B;   /* Z = MAX(A,B) */

      Следует подчеркнуть, что условное выражение действительно является выражением и может использоваться точно так же, как любое другое выражение. Если е2 и е3 имеют разные типы, то тип результата определяется по правилам преобразования, рассмотренным ранее в этой главе. например, если F имеет тип FLOAT, а N -- тип INT, то выражение

 (N > 0) ? F : N

имеет тип DOUBLE независимо от того, положительно ли N или нет.
      Так как уровень старшинства операции ?: очень низок, прямо над присваиванием, то первое выражение в условном выражении можно не заключать в круглые скобки. Однако, мы все же рекомендуем это делать, так как скобки делают условную часть выражения более заметной.
      Использование условных выражений часто приводит к коротким программам. Например, следующий ниже оператор цикла печатает N элементов массива, по 10 в строке, разделяя каждый столбец одним пробелом и заканчивая каждую строку (включая последнюю) одним символом перевода строки.

OR (I = 0; I < N; I++)
  PRINTF("%6D%C",A[I],(I%10==9 \!\! I==N-1) ? '\N' : ' ')

Символ перевода строки записывается после каждого десятого элемента и после N-го элемента. За всеми остальными элементами следует один пробел. Хотя, возможно, это выглядит мудреным, было бы поучительным попытаться записать это, не используя условного выражения.
      Упражнение 2-10.
      ---------------
      Перепишите программу для функции LOWER, которая переводит прописные буквы в строчные, используя вместо конструкции IF-ELSE условное выражение.

ПРЕДЫДУЩАЯ ЧАСТЬ
2.10. Операции и выражения присваивания
СОДЕРЖАНИЕ СЛЕДУЮЩАЯ ЧАСТЬ
2.12. Старшинство и порядок вычисления