MIT Practical Programming in C. Lessons and exercises