This course introduces software engineering students to elementary data structures, and to the functional programming paradigm.
Level 1A Software Engineering undergraduates. It is assumed that students have experience developing well-structured, modular programs.
Antirequisites: CS 115, 135, 136, 145, CHE 121, CIVE 121, ECE 150, GENE 121, PHYS 239, SYDE 121
Successor: CS 138.
Used in course: An integrated development environment (IDE) for C++ (such as xCode for Mac OS X).
C Programming: A Modern Approach 2nd ed. Author: K.N. King
Three hours of lecture per week, plus a two-hour lab and a one-hour tutorial. Normally available in Fall only.
Review of hardware and software, problem solving and programming, including declarations, selection and looping constructs, I/O.
Functions. Scoping. Parameter passing, by value and by reference. Top-down design. Programming with stubs.
Arrays. Structures. Arrays of structures. Multidimensional arrays. Appropriate choice of data structures. String processing and tokenization.
Introduction to recursive procedures and functions.
Introduction to O-notation, space and time efficiency, and complexity.
Algorithm design and efficiency, through discussion of of elementary sorting algorithms (insertion sort, selection sort) and advanced sorting algorithms (mergesort, quicksort, heapsort).
Introduction to pointers, memory allocation and deallocation, singly and doubly-linked lists.
Babbage, Hilbert, Godel, Church, Turing. Early development of electronic computers and programming languages. History of concepts covered in this course.

David R. Cheriton School of Computer Science
University of Waterloo
Waterloo, Ontario, Canada N2L 3G1
Tel: 519-888-4567 x33293
Fax: 519-885-1208
Contact | Feedback: cs-uops@cs.uwaterloo.ca | David R. Cheriton School of Computer Science | Faculty of Mathematics