MPCS 51040 C Programming (Autumn 2022)

Section 1
Instructor(s) Kimpe, Dries (dries)
Location Online
Meeting Times Monday 5:30pm - 8:30pm
Fulfills Core Programming


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.

The course teaches focuses on C11 or ISO/IEC 9899:2011.

Course Contents

  • Tutorial Introduction; Types, Control Flow, Functions and Program structure
  • Build tools, preprocessor, compiling and linking.
  • Debugging
  • Unit testing
  • Pointers and Arrays
  • Pointers and Array, Part II; Recursion
  • Structures, Unions, Bit-Fields, Typedef
  • Data structures: linked lists, stacks, queues, sets, hash tables, trees, heaps
  • Algorithms: coding classical sorting and searching algorithms, algorithmic analysis
  • Multicore Programming: threads & synhronization


  • 8 Homework assignments, each with 1 week to complete. All programming.

  • 1-2 Quizzes

  • Final project


  • The information listed here is the intended course content and format. The instructor reserves the right to adjust the content and format based on class progress, experience and class preference.
  • A version control system (git) will be used for distribution of materials and for handing in assignments.
  • Bringing a laptop to class is encouraged but not required.
  • All assignments will be compiled and graded on the MPCS linux servers (; Basic familiarity with unix/linux is assumed.
  • This is a mostly hands-on course. Plan for a non-trivial amount of time to work on the programming homeworks. Homeworks focus on gaining practical programming experience.


  • Kernhigan and Ritchie, "C Programming, second edition" ISBN: 131103628 (K&R) (optional)
  • Loudon, "Mastering Algorithms with C" ISBN: 1565924533 (MA) (optional)
  • Prinz and Crawford, "C in a Nutshell" ISBN: 0596006977 (CN) (optional)
  • Harbison and Steele, "C: A reference manual" ISBN: 013089592X (optional)

Course Prerequisites

High Pass on the programming placement exam.

MPCS students can not take this class if they have already taken a Core Programming class. Only one Core Programming class will be counted towards MPCS degree requirements. This can not be counted as an elective class.

Other Prerequisites

CAPP, MACSS and MSME students interested in taking this class should talk with their program's advisor.

This course requires competency in Unix and Linux. Please plan to attend the MPCS Unix Bootcamp ( or review the UChicago CS Student Resource Guide here:

Overlapping Classes

This class is scheduled at a time that conflicts with these other classes:

  • MPCS 50101-1 -- Concepts of Programming
  • MPCS 51036-1 -- Java Programming
  • MPCS 51042-1 -- Python Programming
  • MPCS 51240-1 -- Product Management
  • MPCS 51205-1 -- Topics in Software Engineering

Eligible Programs

Masters Program in Computer Science Bx/MS in Computer Science (Option 3: Profesionally-oriented - Non-CS Majors) Masters Program in Computer Science (new students)