This content was thoughtfully created and tailored for CS137 — Programming Principles, for Software Engineering students at the University of Waterloo.

It features a collection of uniquely designed practice problems and in-depth explanations aimed at supporting students in mastering course concepts. Widely received as a valuable learning resource, it has helped students deepen their understanding, reinforce key ideas, and perform confidently in the course.

All notes are mine. I asked an AI tool to handle formatting only. I have not gone through the whole thing to double-check it kept its hands off the content, so treat any weirdness as a formatting artifact rather than something I wrote.

This Textbook isn't a substitute for attending lectures. Class discussion often expands on topics based on student questions, and I add commentary, extra examples, and explanations in the moment that don't make it into the written version.

Last updated: June 2026

Table of Contents
  1. Ch. 01Introduction to C
  2. Ch. 02Making Decisions
  3. Ch. 03Loops
  4. Ch. 04Functions, Modules and Compiling
  5. Ch. 05Recursion
  6. Ch. 06Arrays and Intro to Pointers
  7. Ch. 07Floating Numbers, Math Library, Polynomials and Root Finding
  8. Ch. 08Structures
  9. Ch. 09Pointers, Memory Allocation, Arrays and Vectors
  10. Ch. 10Characters and Strings
  11. Ch. 11Big-Oh Notation
  12. Ch. 12Searching and Sorting Algorithms
  13. Ch. 13Linked Lists
  14. NewFinal Exam Practice problems
Chapter
Loading…