Normalize the random int to be from [0,1], then scale/offset it:
int r = rand();
float fn = ((float)r/RAND_MAX); // fn should now be [0,1]
float fr = 2*(fn-0.5); // offset fn to be [-0.5,0.5], scale to [-1,1]
Note that some implementations of rand() stink. Beware if RAND_MAX is something 16-bit tiny like 32767 or 65535. Tiny max rand values like that mean that you'll only get 32767 or 65535 different possible random numbers despite generating a float end result. That may seem like a lot of values, but it's nothing if you're generating millions of values (say for a 1280x1024 random terrain).
You can also find free high quality random number generator source code, which likely would provide int, float, and double versions. I've used the Mersenne Twister rng with excellent results:
http://en.wikipedia.org/wiki/Mersenne_twister
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html