MPCS 51040 C Programming (Autumn 2022)

Section 1
Instructor(s)
Location None
Meeting Times
Fulfills Core Programming

Syllabus

*Please note: This is the syllabus from the 2021/22 academic year and subject to change.*

Summary
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

Coursework

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

  • 1-2 Quizzes

  • Final project


Notes:

  • 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 (linux.cs.uchicago.edu); 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.

Texts

  • 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

High Pass on the programming placement exam.

Other Prerequisites

Not approved for CAPP or MACS students.

This course requires competency in Unix and Linux. Please plan to attend the MPCS Unix Bootcamp (https://masters.cs.uchicago.edu/page/mpcs-unix-bootcamp) or take the online MPCS Unix Bootcamp Course on Canvas.

Overlapping Classes

This class is scheduled at a time that does not conflict with any other classes this quarter.

Eligible Programs

Masters Program in Computer Science MS in Computational Analysis in Public Policy (Year 2) MA in Computational Social Science (Year 2) Bx/MS in Computer Science (Option 3: Profesionally-oriented - Non-CS Majors)