#include <stdio.h>

void exchange(float *x, float *y);
int evaluate(int x, int (*poly)(int));

int polynomial(int x)
{
    return x * x + 2 * x + 1;
}

void exchange(float *x, float *y)
{
    float hold = *x;

    *x = *y;
    *y = hold;
}

int evaluate(int x, int (*poly)(int))
{
    return poly(x);
}

int main(void)
{
    float x = 10.5;
    float y = 20.5;

    printf("Before exchange:\n");
    printf("x = %.2f\n", x);
    printf("y = %.2f\n", y);

    exchange(&x, &y);

    printf("\nAfter exchange:\n");
    printf("x = %.2f\n", x);
    printf("y = %.2f\n", y);

    int value = 5;

    printf("\nPolynomial result = %d\n",
           evaluate(value, polynomial));

    return 0;
}