C Programming

Title C Programming (51040)
Quarter Autumn 2015
Instructor Dries Kimpe (dries@cs.uchicago.edu)


This is an accelerated introduction to the C (not C++) Programming Language designed for students with prior programming experience. C is in many ways the lingua franca of computing, and a broad range of programming languages and related technologies derive from the basic principles of C memory management, control flow, and abstraction. Though there are many subtleties, C is not a big language, and it is expected that students will leave the course with a relatively deep understanding of the key concepts, which will then form a solid foundation for studying higher-level technologies. At the same time, C itself remains a very practical language, particularly so in areas such as scientific programming, high-performance computing, application level library design, systems programming, network programming, multi-threaded programming, etc. Students who successfully complete the course will be well prepared for subsequent MPCS courses in these areas. The course studies both fundamental and advanced C language constructs in the abstract and reinforces them through a range of exercises in the design of basic and advanced data structures, rudimentary algorithms, and API design.

Course Contents

  • Lesson 1: Tutorial Introduction; Types, Control Flow, Functions and Program structure
  • Lesson 2: Pointers and Arrays
  • Lesson 3: Pointers and Array, Part II; Recursion
  • Lesson 4: Structures, Unions, Bit-Fields, Typedef
  • Lesson 5: Data structures: linked lists ...
  • Lesson 6: Data structures: stacks, queues, sets
  • Lesson 7: Hash tables, trees, heaps
  • Lesson 8: Algorithms: analysis; coding classical sorting and searching algorithms
  • Lesson 9: Algorithms: coding solution of linear systems, algorithmic analysis
  • Lesson 10: multicore programming

4 Homework assignments, each with approximately 2 weeks to complete. All programming.

2 Quizzes

Immersion of equivalent. Basic familiarity with Unix environment will be assumed.


  • Kernhigan and Ritchie, "C Programming, second edition" ISBN: 131103628 (K&R)
  • Loudon, "Mastering Algorithms with C" ISBN: 1565924533 (MA)
  • Prinz and Crawford, "C in a Nutshell" ISBN: 0596006977 (CN) (recommended)

Harbison and Steele, "C: A reference manual" ISBN: 013089592X (recommended)

Prerequisites (Courses)

MPCS 50101 Concepts of Programming (or programming waiver)

Prerequisites (Other)


Core Programming


Mondays, 5:30-8:30


Ryerson 276