Actually, C is arguably the worst language to teach people to begin with, in terms of picking up bad habits (not to mention it doesn't really support OO). While C is one of the most important languages to teach (along with Haskell for its logical consistency and superb example of the functional paradigm, which in and of itself will help make you a better programmer), it really shouldn't be taught first. What's the best language to start with? Maybe Python or C++. Java is nice but some of its design seems almost... bureaucratic. Python is duck-typed, though, which is great for starting out in programming and once (if) you make the move to static and/or weak typing (C), you'll have inherited good habits and thus hopefully won't do the things C has a bad reputation for letting you do. Then again Python does garbage collection for you, which makes for a steep learning curve when you move to C. Hell, maybe C++ is the best way to start programming.
Excluding Visual Basic, of course, which isn't really even a language.
Edit: Ok let's be honest, none of them are good on their own to teach first. The very best idea is time-share, like a computer does with processes/threads; teach one for 4 weeks, another for the next 4 weeks, etc. That's what ANU did, teaching Haskell and Java, which while not ideal since they're both high-level languages, certainly did hammer in the fact that you need to adapt to multiple methods of programming and that Java isn't perfect, while still managing to cover functional programming, good code formatting and style, recursion, OO, trees, etc and also demonstrate the same algorithm/data structure in two different languages. We then went on to cover C and assembly in 2nd year first sem, with strong emphasis of memory management, low-level code, and all the things NOT to do with pointers, types and memory when coding in C.