I was randomly browsing Google+ earlier and saw a post about the amazing completely free full courses that MIT offer.
http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/
C, Python, circuitry, algorithms... the lot! Full, detailed courses at all levels with notes, video lectures, course material.
Then I started following links - they're not the only ones giving away a wealth of info.
The snappily titled
Beijing Information Science and Technology Network and Information Systems Research Institute have
all their course material online (some of it is Chinese). As well as full PDF ebooks (English!) of...
The C programming Language, Kernighan and Ritchie 2nd Ed. The_C++_Programming_Language_Special_3rd_Edition Bjarne Stroustrup(See also http://www.stroustrup.com/bs_faq2.html)
Some of those books run to £30/$50 in paperback on Amazon in print version, and how much would you pay for those MIT courses?!
Also...
http://www.cplusplus.com/doc/tutorial/ also has a full, free downloadable PDF of their
complete C++ Tutorial.
EDIT: Just found another free book!
Programming from the Ground Up.
Mind you, this might be straying from C and Arduino, but I've included it here because the intro says...
This is an introductory book to programming and computer science using assembly language. It assumes the reader has never programmed before, and introduces the concepts of variables, functions, and flow control. The reason for using assembly language is to get the reader thinking in terms of how the computer actually works underneath. Knowing how the computer works from a "bare-metal" standpoint is often the difference between top-level programmers and programmers who can never quite master their art.
Which seem like a good way of thinking.
There - how's that for starters!