сократить условие кода

я написал код чтобы вычислить функцию , но потом задался вопросом , как написать условие в коде одной строкой ? Может кто подсказать?

int main()
{
    double x, y, f;
    printf("Введите x: ");
    scanf("%lf", &x);
    printf("Введите y: ");
    scanf("%lf", &y);
    if ((x >= 0) && (x < 5))
        printf("получилось %f ", f=2*x-y);
    if (( x<0) && (y<0))
        printf("получилось %f", f= pow(x,2));
    else
        printf("получилось %f", f = 5*y+1);
    printf("Значение функции: %f", f);
    return 0;
}

Ответы (1 шт):

Автор решения: Harry

Ну, если я нигде не ошибся (но вроде не должен...), то

double x, y;
printf("Введите x: ");
scanf("%lf", &x);
printf("Введите y: ");
scanf("%lf", &y);
int z = (x>=0)*(x<5)+2*(y<0)*(x<0);
double f = z*(2-z)*(2*x-y)+z*(z-1)*(x*x)/2+(z-1)*(z-2)*(5*y+1)/2;
printf("Значение функции: %f", f);

Но стало ли от этого понятнее и легче?...

Или даже

double f = ((x>=0)*(x<5)+2*(y<0)*(x<0))*(2-(x>=0)*(x<5)-2*(y<0)*(x<0))*(2*x-y)+((x>=0)*(x<5)+2*(y<0)*(x<0))*((x>=0)*(x<5)+2*(y<0)*(x<0)-1)*(x*x)/2+((x>=0)*(x<5)+2*(y<0)*(x<0)-1)*((x>=0)*(x<5)+2*(y<0)*(x<0)-2)*(5*y+1)/2;

Убедиться в эквивалентности вашему коду можно тут: https://ideone.com/pfIvea

→ Ссылка