Whether or not you should install them separately is a tricky question. If you have an older computer with limited resources, definitely steer away from VMs and install one OS on each drive. On the other hand, if you have a newer machine with lots of RAM (minimum 4gb if you're running Windows 7 with a VM) and a decent CPU, then you should be fine using a VM for casual programming.
Given that you have to install both OS's either way, personally I'd go with one on each drive (as long as you're not short on drive space). It's easier to set up, and you get the full power of the computer for both OS's. If you're still doubtful, read on.
If you're looking to do serious C programming on the Linux machine (not just develop for Linux, but actually develop on Linux), then I'd go for separate OS's, regardless of your computer's capabilities. That way you'll get full use of all your resources when compiling etc. Also, if you have any thoughts of using Linux regularly, then it makes sense to give it its own drive.
If you only ever work in Windows (including development), you only need to test the execution of your programs in Linux, you don't have any intention of doing anything else in Linux, and your computer is good enough, then you can save yourself some disk space and use a VM.
Tip on dual boot:
If you decide to install them separately, make sure you install Windows first. That way during the Linux install grub/lilo can detect it and automagically add a Windows bootloader entry for you.