Использование вложенного тернарного оператора для вычисления выражения - C (СИ)
Формулировка задачи:
Задание на C: Используя тернарную операцию выражение1 ? выражение2 : выражение3 и необходимые арифметические операции, составить программу, выполняющую следующие действия: для заданных целых x,y вычислить z = x-y, если x>y и z= y-x+1, если x<=y.
Надо написать Не могу понять, что неправильно, после выполнения y == 10, z == 14, почему-то программа идёт в ветвь с модулём, видимо.
только
с использованием тернарных операций, без 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);
}Решение задачи: «Использование вложенного тернарного оператора для вычисления выражения»
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))));
Объяснение кода листинга программы
(x > y && y > z)- вычисляется условие, что x больше y, и y больше z. Значение этого выражения:trueилиfalse.(x > y && y > z) ?- если предыдущее выражение истинно, то выполняется следующий блок кода.(x *=2, y *= 2, z *= 2)- выполняется операция умножения на 2 для переменных x, y и z.(((x < 0) ? (x = -x) : (0)), ((y < 0) ? (y = -y) : (0)), ((z < 0) ? (z = -z) : (0)))- вычисляется условие для каждой переменной, если значение переменной меньше нуля, то она умножается на -1.(((x < 0) ? (x = -x) : (0)), ((y < 0) ? (y = -y) : (0)), ((z < 0) ? (z = -z) : (0)))- результат предыдущего выражения присваивается соответствующим переменным.((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.