Imperative Problem Solving

Instructor
Meeting Times
  • Tuesdays and Thursdays in Noyce 3819
  • Section 01: 8:00–9:50am
  • Section 02: 2:00–3:50pm
Office Hours
  • Tuesday, 10:00am–11:00am
  • Wednesday, 1:15pm–3:30pm
  • Thursday, 10:00am–11:00am
  • Make an appointment, or drop in when I am unbooked. Please try to make just one appointment ahead of time each week so all students are able to attend office hours; if a time is still available the same day you are welcome to book another appointment or drop in.
Textbook
Mentors
  • Jeronimo Camargo (morning section)
  • Almond Heil (afternoon section)
Mentor Sessions
  • Tuesday, 7:00pm–9:00pm in Noyce 3819
Evening Tutor Hours
  • Sunday, 3–5pm and 7–10pm in Noyce 3813 and 3815
  • Monday–Thursday, 7–10pm in Noyce 3813 and 3815

About this course

Welcome to the Spring 2025 session of CSC 161: Imperative Problem Solving. This course website will be your primary source for the course schedule, several homework, and general course policies listed on the syllabus. This site will be shared for both the morning and afternoon sections. Both sections will stay in sync as much as possible, but there may occasionally be differences in the deadlines or assigned work across the two sections.

This class uses the C programming language, a classic and influential example of an imperative language still in widespread use today. Imperative programming languages, and C in particular, sit quite close to the hardware that runs the programs we write; as a result, solving problems in C requires us to think carefully about the structure of our programs and the resources we use. The reward for this extra effort is that C programs can be extremely fast, and can run on practically any computing device. Building your imperative problem solving skills in C will prepare you for CSC 207: Object-Oriented Problem Solving, Data Structures, and Algorithms. You’ll also be prepared to pick up many of the C-inspired languages on your own, and of course you’ll be better at mixing approaches from both functional and imperative styles in any programming language.