I think we need a little more information to fully answer your question. Most FFT routing (like FFTW) provide many different ways to call the transform, and the return result will depend on exactly what routine you call, and how you call it.
Having said the standard disclaimer, if you perform an FFT on $N$ real data points, you will get back $N/2$ unique complex points. The basic algorithm though will assume your $N$ real points are $N$ complex points with zero imaginary parts. Many routines will thus return $N$ complex points, but the second half will be (in the case of real input) hermitian symmetric (that is, point $N/2+i$ will be the complex conjugate of point $N/2-j$).
So, start by recognizing that your result is complex numbers, not real, and you will need to at least plot the "square" ($xx^*$) or each point. If you have the real and imaginary points returned as $X_r$ and $X_i$, then you want to plot $X_r^2+X_i^2$.
So you are probably pretty close. You will want to consider a few other things: windowing your input data, and averaging your output data. To do the first, you need to perform the transform on weighted data, rather than your direct data. See http://en.wikipedia.org/wiki/Window_function for more info. You will simply hand the FFT function data of the form $W_k {x_k}$ instead of just the $x_k$ (where $k$ is the index number). This will be particularly important if you use a fractional frequency in your sin function (try it, you'll see).
The averaging step involves averaging the squared output. You will simply want to average a few outputs, point by point, together. You will also often want to plot the output as a logarithm though, instead of simply plotting the squared output.