Welcome to the Spring 2003 session of Grinnell College's CSC 195, the somewhat mistitled Data Representation, Storage Management, and C Programming. Informally, this course provides a peek behind the curtain at some of the issues going on underneath the languages you used in other courses.
In an attempt to provide up-to-date information, and to spare a few
trees, I am making this as much of a
paperless course as I can.
Hence, materials will be in a course web.
As you may know, this is an experimental course which
we expect to eventually become our third
In particular, the course places great emphasis on
issues of memory management and lower-level operations. We use the C
programming language because it gives ready access to these operations
and because it forces you to think about these issues. Together with
CSC151 and CSC152, the course completes your explorations of three key
problem-solving paradigms (functional in CSC151, object-oriented in
CSC152, imperative in CSC195).
Because the course uses a lower-level language (C) than those to which you've become accustomed (Scheme, Java), we also spend a great deal of time looking at ways to ensure that your programs are correct and safe (e.g., that you terminate loops when you expect to or that you don't overwrite memory unexpectedly).
You can learn more about the course from the official blurb and from the the course syllabus.
Meets: MTuWF 3:15-4:05, Science 2417
Instructor: Samuel A. Rebelsky (firstname.lastname@example.org), Science 2427.
Office hours: MTuWF 9:00-9:50, MTuF 11:00-12:00. I also
tend to follow an
open door policy: Feel free to stop by when my
door is open or to make an appointment for another time.
Teaching Assistant: Daren Brantley. Hours to be determined.
Grading: Exams (3): 45%; Homework Assignments: (4-6 graded out of 10-15): 35%; Class participation: 10%.
Late Assignments: My experience shows that students who turn in work late learn significantly less than students who turn material in on time. (I'm not sure about cause and effect.) Hence, I strongly discourage late assignments. Unless prior arrangements have been made, assignments are due within five minutes of the start of class. After that they are considered late. Late assignments are penalized one letter grade per day late (or fraction thereof).
Because I am concerned about your health, I will waive the late penalty if (1) you start the assignment at least three days in advance of the due date; (2) you get to sleep by midnight the night before the assignment is due; (3) you expend a reasonable amount of effort to complete the assignment by midnight; (4) you turn in a form attesting to facts (1), (2), and 3 when the assignment is due; and (5) you talk to me ASAP about any problems you've had on the assignment.
Extra Credit: I will occasionally give you quizzes to ensure that you're keeping up with the reading. Correct answers on the quizzes will give you some amount of extra credit.
Throughout the term, I may suggest other forms of extra credit.
Final Examination: Experience suggests that students who do well on the three exams also do well on the final exam. Hence, the final examination is optional. Your score on the final examination will replace your lowest exam grade provided it is higher than that grade.
I've chosen two classic texts for the course. Both are books I expect you'll want to keep in your reference library for years to come.
Kernighan, Brian W. and Ritchie, Dennis M. (1988). The C Programming Language, Second Edition: ANSI C. Englewood Cliffs, NJ: Prentice-Hall. ISBN: 0-13-1110362-8.
The classic introduction to the C programming language by those who designed the original language. Not quite a textbook, not quite a language manual, but an appropriate guide for those ready to think carefully about a language. Typically called K&R.
Gries, David (1998). The Science of Programming. New York, NY: Springer-Verlag. ISBN: 0-387-96480-0.
This is the classic text on program verification and our core resource for discussions of program correctness.
C has enough subtleties that some of you will find it useful to pick up an extra reference or two. Here are the ones I recommend. The book store should have a few copies. Again, these are books I expect you'll want to keep in your reference library.
Harbison III, Samuel P. and Steele, Guy L., Jr. (2002). C: A Reference Manual, Fifth Edition. Englewood Cliffs, NJ: Prentice-Hall. ISBN 0-13-089592-X.
Just what the title says: A reference manual to the language. Covers many more of the ins and outs of the langauge than does K&R. The C standard was updated in 1999, and this covers those latest revisions.
Summit, Steve (1996). C Programming FAQs. Boston, MA: Addison-Wesley. ISBN 0-201-84519-9.
I noted above that there are many subtle points in C programming. This book identifies and clarifies many of those points. Written in a FAQ style, it is also a valuable and interesting book to scan through as you learn new topics. A version of it is available online at
Thursday, 14 November 2002 [Samuel A. Rebelsky]
Tuesday, 7 January 2003 [Sameul A. Rebelsky]
Monday, 20 January 2003 [Samuel A. Rebelsky]
Thursday, 30 January 2003 [Samuel A. Rebelsky]
I usually create these pages
on the fly, which means that I rarely
proofread them and they may contain bad grammar and incorrect details.
It also means that I tend to update them regularly (see the history for
more details). Feel free to contact me with any suggestions for changes.
This document was generated by
Siteweaver on Fri May 2 14:19:02 2003.
The source to the document was last modified on Thu Jan 30 08:26:21 2003.
This document may be found at
As far as I can tell, this document conforms to level Triple-A of the
Web Content Accessibility Guidelines 1.0 available at