CMPUT 201: Practical Programming Methodology (Fall 2023, all sections)

Course syllabus (PDF, downloadable)

CMPUT 201 Practical Programming Methodology: (University Calendar Description)
☆3 (fi 6) (either term, 3-0-3). Introduction to the principles, methods, tools, and practices of the professional programmer. The lectures focus on the fundamental principles of software engineering based on abstract data types and their implementations. The laboratories offer an intensive apprenticeship to the aspiring software developer. Students use C and software development tools of the UNIX environment. Prerequisite: CMPUT 175.

Course Objectives: (Preferred to have knowledge of, or co-taking, CMPUT 229, 272 and/or 204)

  • Understand the design theory of standard C (99): key programming concepts and their compatibilities;
  • Be able to handle any intermediate programming problem by using standard C under Linux;
  • Have the skills to combine your knowledge of program design and data structures (174/175), with useful algorithms and mathematics (272/204/304) and application-specific knowledge (291/379) to design and implement non-trivial software;
  • Be prepared to go from procedural (standard C) to object-oriented (C++, Java, etc.).

Student Responsibilities:

lab machine maintenance
Lab D05
Lecture A1
Lecture A1
Lecture A1
lab machine maintenance
Lecture A2
A1/A2 In-person and
Online Office Hours
Lecture A2
A3 In-person and
Online Office Hours
Lecture A2
Lecture A3
Lecture A3
Lecture A3
Teaching team meeting
Lab D01
Lab D02
Lab D04
Lab D06
Lab D08
Lab D03
Lab D07

Office hours:

  • Our work hours are 9am-5pm (except early morning and late evening labs);
  • your queries might not be answered immediately, and so start your work early;
  • Instructors try to join labs, as often as possible, to help TAs with Q&As (the first 30 minutes in particular);
  • In-person/online office hours (see above time table): Tuesday/Thursday 11am-1:45pm.

Guohui Lin (A1/A2 instructor)
ATH 353
Henry Tang (A3 instructor)
ATH xxx
Aniket Sharma (TAs)   aniket7
Md Abed Rahman   mdabed
Rafsanjany Kushol   kushol
Zijie Tan   ztan4
Akemi Izuko (TAs)   izuko
Ahmed Keshta   akeshta
Andy Tran   aqtran
Bruce Tong   jtong7
Carson Barnstable   barnstab
Devon Ragosin   ragosin
Dohyun Kim   dohyun1
Ethan Chung   elchung
Harrison Low   hblow
Jad Chehimi   jchehimi
Jay Kim   jaekuang
Javin Vora   jvora
Jiameng Chang   gemmary
Kevin Sha   ksha2
Krish Lal   lal1
Lubomyr Soroka   lubomyr
Michael Shi   wenjian2
Minjae Jeong   mjeong
Nandan Ramesh   nandan
Roberto Zaghini   rszaghin
Rocky Chen   minghe1
Saumya Rada   srada

Recording/Photo-taking of teaching is permitted only with the prior written consent of the instructor or if recording is part of an approved accommodation plan.

Required textbook: K. N. King. C Programming: A Modern Approach. 2nd edition, W. W. Norton & Company, 2008.

Recommended readings / References: T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein (2009). "Introduction to Algorithms (Third Edition)". The MIT Press.

Lecture & Lab Schedule (sign in eClass for announcements, course discussion, quizzes, lab exercises, sample exams, etc.):

Week Date Lecture Topics
1 Sep 6,8 Course overview
Ch 1: Introducing C
Ch 2: (getting started) C Fundamentals
Linux, vim/emacs, keyboard commands ("gcc -Wall -std=c99 source.c -o executable")
VSCode, ssh, scp (always backup your files)
2 Sep 11,13,15 Lab #1 (D01-04 due Sep 13; D05-08 due Sep 20)
Ch 3: Formatted Input/Output
Ch 4: Expressions
Ch 8.1: One-Dimensional Arrays
Using gdb/gcc for debugging ("gcc -ggdb -std=c99 source.c -o executable")
3 Sep 18,20,22 Quiz #1 Lab #2 (D01-07 due Sep 21; D08 due Sep 28)
Ch 5: Selection Statements
Ch 6: Loops
Refresh: bubble-sort, insertion-sort (these subjects are "programming materials")
4 Sep 25,27,29 Quiz #2 Lab #3 (All lab sections due Sep 29)
Ch 7: Basic Types
Ch 8: Arrays
Refresh: binary search; greatest common divisor (GCD)
5 Oct 2,4,6 Quiz #3 Lab #4 (D01 due Oct 2; D02-08 due Oct 9)
Ch 9: Functions
Ch 10: Program Organization
Refresh: merge-sort, quick-sort
Check the return value of your program ("echo $?")
6 Oct (9,)11,13 Lab #5 (D01 joins any other lab; D02-03 due Oct 10; D01,04-08 due Oct 17)
Review; Quizzes #1-3 solutions
Midterm exam #1 in class on Friday/13th
(closed book, a letter-size paper with handwritten notes on one side allowed)
7 Oct 16,18,20 Quiz #4 Lab #6 (D01-04 due Oct 18; D05-08 due Oct 25)
Ch 11: Pointers
Ch 17: Advanced Uses of Pointers (dynamic allocation)
Ch 12: Pointers and Arrays
Using valgrind for error checking ("gcc -g -Og" and "valgrind executable")
8 Oct 23,25,27 Quiz #5 Lab #7 (D01-07 due Oct 26; D08 due Nov 2)
Ch 12: Pointers and Arrays
Using gdb/gcc for debugging ("gcc -ggdb -std=c99 source.c -o executable")
Ch 13: Strings
Ch 17: Advanced Uses of Pointers
9 Oct 30,1,3 Quiz #6 Lab #8 (All lab sections due Nov 3)
Ch 14: The Preprocessor ("gcc -E -std=c99 source.c -o expanded_source.c",
        "gcc -DDEBUG -std=c99 source.c -o debugging_version",
        "gcc -DNUM=25 -std=c99 source.c -o debugging_version")
        "gcc -lm (for linking math.h library functions)
Ch 15: Writing Large Programs
Makefile basics ("to generate source.o: gcc -Wall -std=c99 -c source.c")
10 Nov 6,8,10 Quiz #7 Lab #9 (D01 due Nov 6; D02-08 due Nov 13)
Ch 16: Structures, Unions and Enumerations
Ch 17: Advanced Uses of Pointers (function pointers)
11 Nov (13,15,17) Lab #10 (no in-person labs; D01-03 due Nov 14; D04-08 due Nov 21)
Reading week: no classes
12 Nov 20,22,24 Lab #11 (D01-04 due Nov 22; D05-08 due Nov 29)
Midterm exam #2 in class on Monday/20th
(closed book, a letter-size paper with handwritten notes on one side allowed)

Ch 20: Low-Level Programming
Ch 22: Input/Output (FILE pointers)
13 Nov 27,29,1 Quiz #8 Lab #12 (D01-07 due Nov 30; D08 due Dec 7) Withdrawal by 1st
time your program (runtime statistics), shell script, running background
Ch 18: Declarations
14 Dec 4,6,8 Quiz #9 Lab #13 (All lab sections due Dec 8)
Ch 19: Program Design (multiple versions and bridging to C++)
15 minutes class time for SPOT survey
Final review
  Dec 11,13 A2 Q&A session: Dec 11, Monday 9:00-11:00am, in ATH 332+328
A1/A3 Q&A session: Dec 13, Wednesday, 11:00-1:00pm, in ATH 332+328
  Dec 12,14*** 14: A1/A3 Final exam (30%): 2:00-4:00pm
12: A2 Final exam (30%): 2:00-4:00pm
(closed book, a letter-size paper with handwritten notes on both sides allowed)

***WARNING: Students must verify this date on BearTracks when the Final Exam Schedule is posted. The final exam planner is found on the Registrar's website:

  Jan 12 Deferred final exam (Friday, starting at 11:00am)

Grading Scheme:

  1. Mark distribution (course work w/dues):
    • 35%  13 lab exercises (3.5% each; best 4/3/3 out of 5/4/4, three groups - basic/intermediate/advanced)
    • 13.5%  9 quizzes (1.5% each, a single try only inside time window Wednesday 11:00pm - Friday 11:00pm; no replacement quiz)
    • 21.5%  2 midterm exams (11% + 10.5%, 50 minutes class time on Friday Oct 13, 2023 and on Monday Nov 20, 2023, respectively)
    • 30%  1 Final exam (2 hours on scheduled dates)
          Midterm and Final exams are closed book, only a letter-size paper with your handwritten notes allowed.
    • [7%  2 optional lab exercises (3.5% each) from the two groups of intermediate/advanced labs]
  2. Term work policies:
    • Submissions will NOT be accepted after the corresponding due date, for all quizzes and lab exercises:
      • all quizzes are done in eClass;
      • all lab exercises are submitted to appropriate pages in eClass.
    • Lab demo:
      • due to large class sizes, we will randomly select only 1/3 students to demo their lab exercises, after they submit their works;
      • allow at least 7 days for TAs to mark;
      • demo should be done within 14 days (but before the final exams), mostly during labs but could be arranged with your TAs;
      • refusing to demo zeros the lab marks.
    • Excused Absence (EA):
      • no EAs for optional lab exercises (i.e., only non-zero and non-EA lead to bonus marks);
      • an acceptable excuse exists, and requested before the due date or within reasonable time frame;
      • requests should be made to the instructor; if granted, all associated marks are moved to the final exam;
      • for a missed final exam, the student must apply to their faculty (not the instructor) for permission to write the deferred exam on Jan 12, 2024 (Friday, 11:00am).
    • Collaboration by consultation model:
      • you are encouraged to discuss the lab exercises each other;
      • if you wish, you may search for existing solutions out there!
      • But you must write your solutions independently.
        Do not copy/mimic code from your fellow classmates; neither let the others copy/mimic your code! Both are plagiarism.
        For all submitted C programs, you must use comment lines (at the top) to claim that you write the codes yourself, or whichever resources (other than the provided course materials -- textbook, lecture notes, demo programs) you use.
    • Re-evaluation: requests should be made to the marker(s) within 7 days of the marking (re-marking could reduce your mark); after that time, marks cannot be changed.
  3. Final grades are based on our interpretation of grading system defined in Academic Regulations.
    The following **mark (not percentage)** cutoffs will be respected:
    • 90+ → A+ (Excellent) --- guaranteed;
    • 80+ → A, A- (Excellent);
    • 70+ → B+, B, B- (Good);
    • 60+ → C+, C, C- (Satisfactory);
    • 50+ → D+, D (Minimal Pass) --- "<50 marks" is an F.


Disclaimer: This Course Outline is released and becomes final on September 5, 2023. Any typographical errors herein are subject to change and will be dated and announced in class.


  Last modified: September 26 2023 12:00:37  © Guohui Lin