I'd personally recommend
avoiding C to anyone who's looking to teach themselves programming. It's tremendously flexible, but this comes at a price - C gives you a huge amount of rope with which to hang yourself, and when you get into reasonably complex code (pointers to arrays of pointers to lists of pointers to functions) and start messing about with stuff like pointer arithmetic, bad things are almost guaranteed to happen. The only way I've found to make that sort of stuff manageable and maintainable is to adopt a pseudo-OO programming style, and if you're going to do that, you might as well use a language designed for it.
C's like having parents who set absolutely no rules or boundaries - you might turn out a remarkably balanced and well-rounded individual, or you might turn out a sociopathic axe murderer. Lots of flexibility, but lots of room to write really scary code and do things in bizarre and perverse ways (see the obfuscated code example somebody posted - I've known people who wrote code like that all the time).
Overall, I think it's much better to start with a strongly-typed language like Java or C++ where the compiler can spot more potential problems at compile-time and the restrictions imposed by the type system combined with the additional structure OO places on your code make it less likely you'll create a monster.
Both are more like having strict parents, although at times the way C++ has been cobbled together over the years is "strict" in the sense of "they kept me locked in a cage in the basement until I was 18". Yes, you can still turn out to be an axe murderer, but you'll be a polite axe murderer.
Objective-C's the best (or worst) of both worlds. It's weakly typed, wth all the potential power (and possibilities for mayhem that arise When Good Code Goes Bad) that implies. However, if you're good about statically typing object references where possible, the compiler can still catch a lot of stuff, and the dynamic aspects of the language have made me swear off C++ for life (or at least until the next time I have to use it for work). You're also less likely to find yourself dealing with the nastier stuff than in C (unless you really try hard to) if you're doing the OO thing.
I can't think of a good parental analogy for Objective-C - perhaps the parent who doesn't place many limits but warns you before you're about to do something stupid and says "told you so" if you go ahead and do it anyway
There are those who go by the adage "strong typing, weak mind" but that's really just "programmer macho" along the lines of "I coded this operating system entirely in machine language by toggling this little switch here several hundred thousand times". Strong typing is generally your friend, and if you're doing stuff advanced enough to find it getting in the way, you're probably good enough by that point to work around it.
Fortunately ProjectBuilder keeps all four options open, but OS X itself kinda favors the use of Objective-C or Java rather than the other two.
For those who really, really want to learn C itself, I don't really have a book to recommend - my shelves have the big Osborne "Complete Reference" books for both C and C++ on them but I've barely cracked the cover of either. What I do find quite useful, though, is a smaller/cheaper book, also from Osborne, called "C/C++ Programmer's Reference" by Herbert Schildt. It's $20 ($12.95 plus shipping from Bookpool) and about the size of a large paperback. It isn't intended to teach either language, but it's very handy to have around. It covers both languages, most of the functions in the standard libraries, has some stuff on the STL and even points out C99-specific stuff.