Syllabus and Course Outline

CS-2303 Course Web Page




Course Outline


Goals and Outcomes



CS 2102, Object-oriented Design Concepts, or its equivalent, is strongly recommended. It is unlikely that you will be able to keep up if you do not already know how to program in Java in an object-oriented style.

You should also know how to log into and use the CCC Linux computing systems and Microsoft Windows systems. Finally, if you wish to use your own PC or Macintosh desktop or laptop computer, you need to know how to connect to the campus network and to access the CCC systems from it.




CS 2303 has three main components:

        Lectures, which introduce and discuss the principle components of the C and C++ languages and the some common data structures you will need to know when programming in these languages. These data structures include arrays (including strings in C), lists, trees, and hash tables.

        Programming Assignments, in which students write and debug programs to use the language constructs and data structures introduced in class. There will be five or six programming assignments, typically assigned on Fridays and due at 11:59 PM about one week later. Timely completion of all programming assignments is required to pass this course. If, after a good faith effort to attempt an assignment, it proves too difficult or there are fundamental things you do not understand, then submit an incomplete assignment with your own analysis of your difficulty.

        Laboratory sessions, in which students learn how to use the various systems and tools needed to write and debug programs in C and C++. In this course, you will use the command line tools and makefiles on Linux and also Visual Studio on Microsoft Windows platforms.


There will also be two exams: the final exam will be on October 12. A mid-term exam will be held, probably during the week of September 13.


Course Outline

The following is a rough outline of the course. Dates are approximate and the order of some topics may change depending upon how the class goes.

        Week 0: Introduction to the course, differences between Java and C; input and output, scanf() and printf()

        Week 1: Functions in C, recursive functions; role of the stack during execution.

        Week 2: Pointers, arrays, and strings; dynamic memory allocation, malloc() and free()

        Week 3: structs and unions; linked lists, trees, and hash tables.

        Week 4: Mid-term exam; introduction to C++, classes and objects in C++

        Week 5: constructors and destructors; dynamic memory allocation; data structures in C++

        Week 6: composition; friend functions; this pointer; interfaces

        Week 7: operator overloading; inheritance; polymorphism;

        Final Exam, Tuesday, October 12, 2010.



Required: Brian W. Kernighan and Dennis M. Ritchie, The C Programming Language, 2nd edition, Prentice Hall, 1988. [Every computer scientist should own a copy of this book and keep it for the rest of his/her professional life.]

Required: Bjarne Stroustrup, The C++ Programming Language, Special Edition, Addison-Wesley, 2000.

Alternate: Bjarne Stroustrup, The C++ Programming Language, 3rd Edition, Addison-Wesley, 1997.
[The 3rd Edition and Special Edition are nearly identical, except that the Special Edition has corrected numerous minor errors and typos, and it also includes two additional appendices.]


Goals and Outcomes

The C programming language exposes details of how the underlying hardware stores data and executes software. It is commonly used in situations where there is no support for higher-level languages e.g., operating systems, device drivers, and embedded systems and in specialized systems where no higher level languages have been implemented.

Upon successful completion of this course, the student should

        Be able to implement, test, debug, and document programs in C and C++

        Understand low-level input and output routines

        Program with pointers and arrays, perform pointer arithmetic, and use the preprocessor

        Be able to write programs that perform explicit memory management

        Understand how to write and use functions, how the stack is used to implement function calls, and parameter passing options

        Understand and use the common data structures typically found in C programs namely arrays, strings, lists, trees, and hash tables

        Create programs that measure or simulate performance and use them to analyze behavior

        Use Unix commands to manage files and develop programs, including multi-module programs and makefiles

        Use Visual Studio to develop programs, including multi-module programs


Mapping of course outcomes to CS Department Outcomes