Those details get taken care of under the hood in higher level languages, but to be a really good programmer you need to understand what is going on and C will give you that insight.
I disagree with this. I've been a professional programmer for 10 years, and programming has moved *so* far beyond this. As a professional programmer, you're almost *always* building on top of high-level APIs, no matter what language you're programming in. You're not reinventing the wheel every time.
I think the important things to learn as a beginning programmer are:
1) variable scope
2) looping/conditionals
3) functional decomposition/abstraction
Beyond those concepts, basic functional programming is not that much different from algebra/math concepts that the student should already be familiar with (including functional decomposition/abstraction). After mastering that, the next thing to learn would be object-oriented programming concepts.
Also, I think beyond syntax or technical concepts, the most important things that a programmer should learn are good *habits*, that will help them both as students and also later in their professional life. Things like:
1) writing clear code with obvious variable names, program flow, etc. Any programmer can write code that a computer understands - but a skilled programmer will write code that a *human* can understand.
2) writing good comments/documentation (this is important not just to explain your code to other people, but also to remind yourself what your thinking was when you coded something).
3) writing code iteratively (get little bits of the project working at a time, rather than trying to do it all at once),
4) write test cases/scripts for your software
5) use any tools like debuggers, etc. when they are available for your language
Granted, I am a bit biased here. My first language (learned it in an intro to computer science course in college) was an interpreted, garbage-collected version of LISP called "Scheme". I feel like hiding the details under the hood was *precisely* what was needed in order to let me focus on the more important concepts in software engineering. C was my 2nd programming, and I just found it to be uglier and more bug-prone. My 3rd language, in a more advanced computer science course, was a garbage-collected version of C++. It was a joy to work in and like I said, I am a bit biased here since the professor was a huge proponent of garbage collection (5% performance overhead as a tradeoff for vastly fewer bugs). My 4th language was Java, which actually turned out to contain almost all of the features (garbage collector, Collection classes, assertions, etc.) that my Professor advocated in that C++ class.
So anyway, sorry for the rant, but for Application programming I would definitely advocate Java. I once did a freelance project for a professor at New York University and was able to program it on my iBook even though the target deployment machine was a PC. That's a huge advantage: you can program something specifically for the Mac, and it yet it will probably run on the PC (depending on what you were doing with it).