My school had required courses on general computer science topics, computer organization (i.e., how processors work and interact with memory, etc.), programming language theory, algorithms and data structures, and basic operating systems design. Electives included compiler optimization, graph theory, graphics, networks, and security, among others. Required math courses included calculus, discrete math, and probability and statistics.
We were taught to program in Java on Red Hat Linux, although some courses utilized C and C++ as well; the programming language theory course used Haskell.
We had only very basic instruction on the software development process and life cycle. But this is a good thing -- that's software engineering stuff, and computer science is not software engineering. We barely had time to scratch the surface of CS, so SE would've just been too time-consuming. (That said, seniors did take a course that involved the development of a software project using extreme/agile programming techniques.)