MPCS 51040 C Programming (Spring 2017)

Section 1
Instructor(s) Kimpe, Dries (dries)
Location Ryerson 276
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 the latest C standard (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.

  • 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)
  • Loudon, "Mastering Algorithms with C" ISBN: 1565924533 (MA)
  • Prinz and Crawford, "C in a Nutshell" ISBN: 0596006977 (CN) (optional)
  • Harbison and Steele, "C: A reference manual" ISBN: 013089592X (optional)


Course Prerequisites

MPCS 50101 Concepts of Programming (or programming waiver)

Other Prerequisites

Overlapping Classes

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

  • MPCS 52040-1 -- Distributed Systems
  • MPCS 51032-1 -- Advanced iOS
  • MPCS 51036-1 -- Java Programming
  • MPCS 58020-1 -- Time Series Analysis and Stochastic Processes