Использование вложенного тернарного оператора для вычисления выражения - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задание на C: Используя тернарную операцию выражение1 ? выражение2 : выражение3 и необходимые арифметические операции, составить программу, выполняющую следующие действия: для заданных целых x,y вычислить z = x-y, если x>y и z= y-x+1, если x<=y. Надо написать

только

с использованием тернарных операций, без if. Я написал так:
#include <stdio.h>
void main(void)
{
    int x = -3, y = -5, z = -7;
    x > y ? (y > z ? x*=2, y*=2, z*=2 :
        (x = x >= 0 ? x:-x),
        (y = y >= 0 ? y:-y),
        (z = z >= 0 ? z:-z)) :
        (x = x >= 0 ? x:-x),
        (y = y >= 0 ? y:-y),
        (z = z >= 0 ? z:-z);
    printf("x = %d, y = %d, z = %d", x, y, z);
}
Не могу понять, что неправильно, после выполнения y == 10, z == 14, почему-то программа идёт в ветвь с модулём, видимо.

Решение задачи: «Использование вложенного тернарного оператора для вычисления выражения»

textual
Листинг программы
((x > y && y > z) ? (x *=2, y *= 2, z *= 2) : (((x < 0) ? (x = -x) : (0)), ((y < 0) ? (y = -y) : (0)), ((z < 0) ? (z = -z) : (0))));

Объяснение кода листинга программы

  1. (x > y && y > z) - вычисляется условие, что x больше y, и y больше z. Значение этого выражения: true или false.
  2. (x > y && y > z) ? - если предыдущее выражение истинно, то выполняется следующий блок кода.
  3. (x *=2, y *= 2, z *= 2) - выполняется операция умножения на 2 для переменных x, y и z.
  4. (((x < 0) ? (x = -x) : (0)), ((y < 0) ? (y = -y) : (0)), ((z < 0) ? (z = -z) : (0))) - вычисляется условие для каждой переменной, если значение переменной меньше нуля, то она умножается на -1.
  5. (((x < 0) ? (x = -x) : (0)), ((y < 0) ? (y = -y) : (0)), ((z < 0) ? (z = -z) : (0))) - результат предыдущего выражения присваивается соответствующим переменным.
  6. ((x > y && y > z) ? (x *=2, y *= 2, z *= 2) : (((x < 0) ? (x = -x) : (0)), ((y < 0) ? (y = -y) : (0)), ((z < 0) ? (z = -z) : (0)))) - результат вычисления вложенного блока кода присваивается переменной x, y или z, в зависимости от значения выражения x > y && y > z.

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы