So the if-elseif-elseif-etc is a perfectly good way of figuring out where in the table you need to be. But I would probably use auxiliary tables, a la
Code:
float xindex[] = {-55.5, -30, -20, 0, 10, 22.5, 41.0, 52 };
.
.
.
int i = 0;
while ((i < 8) && (xindex[i] < target_x)) i++;
which would find the table value one too high (and of course subtracting one for the one too low). You can do something similar for y.
After that, you'll have to decide which of the 16345 ways to interpolate you intend to do.