For complex numbers, vectors, matrices, etc, use the C++ dialect of C, rather than the K+R or ANSI dialects. For anybody doing serious math, the operator overloading is a godsend.