Announcements

4/18/17 The seating chart for the final exam can be found here. The final is Tuesday (5/2) from 8AM to 10AM in CL50 room 224.

4/18/17 The seating chart for Midterm 3 can be found here. The topics for Midterm 3 can be found here.

3/5/17 The seating chart for Midterm 2 can be found here.

3/4/17 We have uploaded some old midterms/finals that contain questions that can help you study for midterm 2: (i) Old exam 1 questions 1, 2 and 3; (ii) Old exam 2 question 1 and 2.

2/11/17 We have uploaded copies of two old 264 exams to help you study for Tuesday's midterm: (i) Spring 2016. Please ignore Q3, as it covers material that will not be on this midterm. (ii) Fall 2016. Please ignore Q3 and Q4, as they cover material that will not be on this midterm.

2/3/17 Next week will have a modified class schedule for Section 3 only. Class on Monday (2/6) will be canceled as a makeup for evening midterm 1. Class on Wednesday (2/8) will feature a guest lecture by Professor Lu.

1/11/17 We updated some of the starting files for PA02. If you already set up your PA02 repository, please update it using the instructions at the top of the PA02 page.

1/9/17 There is a configuration issue with the git installation on ECN machines, which can make it tricky to clone your repository. Please see the supplemental instructions for a couple of workarounds.

1/3/17 Webpage live!

Course Description

This course focuses on the principles and practice of programming in C. We will cover the topics needed to become knowledgable C programmers, and concepts that can be transferred to many other languages. Topics include:

  • Tools for programming (make, gdb, git)
  • Data types and structures
  • Pointers and memory allocation
  • Induction and recursion
  • Dynamic data structures (lists and trees)
  • Threads

Course Details

The course syllabus covers most of the details of the course, including a tentative schedule, exam dates, etc. Assignment links will be distributed via Blackboard announcements and emails, and grades will be posted on Blackboard. We will be using Piazza for online discussion of the lectures and assignments. If you have a question about a concept covered in lecture or about a detail of an assignment, check Piazza first!

Lecture Schedule and Notes (for Section 3)

  • Week 1:
    • 1/9 Syllabus and "phone dropping" problem. Notes
    • 1/11 Git, Makefiles, and selection sort. Notes
    • 1/13 Selection sort performance, program layout in memory. Notes
  • Week 2:
    • 1/18 Program layout in memory. (See notes from 1/13)
    • 1/20 Data types and structs Notes
  • Week 3:
    • 1/23 Pointers. Notes
    • 1/25 Pointers. Notes
    • 1/27 Pointers. (See notes from 1/25)
  • Week 4:
    • 1/30 Pointer arithmetic and arrays. Notes
    • 2/1 Arrays and pointers. (See notes from 1/30) Sample code: arrtest.c
    • 2/3 Memory allocation and memory leaks. Notes. Sample code alloctest.c
  • Week 5:
    • 2/6 Lecture canceled (makeup for midterm 1)
    • 2/8 Intro to recursion (guest lecture by Professor Lu)
    • 2/10 Recursion and gdb. Notes
  • Week 6:
  • Week 7:
  • Week 8:
    • 2/27 Analyzing runtime of recursive programs. Notes coming soon.
    • 3/1 Linked Lists (I). Notes
    • 3/3 Linked Lists (II). See notes from 3/1.
  • Week 8:
    • 3/6 Midterm 2 review
    • 3/8 Linked Lists (III). See notes from 3/1.
    • 3/10 Linked Lists (IV). See notes from 3/1.
  • Week 9:
  • Week 10:
    • 3/27 BST insertion
    • 3/29 BST deletion
    • 3/31 Building trees bottom-up. Tree traversal. See README for Assignment 12.
  • Week 11:
    • 4/3 Tree traversal (continued)
    • 4/5 Huffman coding
    • 4/7 Huffman decoding
  • Week 12:
    • 4/10 Lecture canceled
    • 4/12 Bitwise operations
    • 4/14 Threads. See README for Assignment 14.
  • Week 11:
    • 4/17 Threads (II). See example.c.
    • 4/19 Midterm 3 review
    • 4/21 TBD

Programming Assignments