This course is an introduction to programming -- no prior programming knowledge or experience is required. The goal is to familiarize students with the fundamental components of structured programming -- memory management, algorithms, data structures, modular design, etc. The course emphasizes fundamental concepts and elementary program design. Upon completion of the course, students should be well prepared to branch out into more modern, application-specific, and/or higher-level programming models.
Most of these books are available at the Seminary Co-op Bookstore. You can visit the Eckhart library and glance through a reserve copy to determine which books would be best for you. Log on to Chalk to see the list of books on reserve for this course, including one available electronically. Please let me know what other books you find helpful, so I can list them here as well.
Students are expected to have read and understood the University's policy on Academic Integrity, as detailed in the Student Manual of University Policies and Regulations.
Some homework assignments will be from the primary required text, System Programming with C and Unix. For problems which don't result in a full program, write up your experiences in a sentence or two, including code snippets and error messages where appropriate. Typically, homework due Monday will include concepts or practices which will help with the programming assignment due Friday. Homeworks are due Friday by 11:59pm and Monday by 5:29pm. Late homework will result in reduced or no credit, depending on my mood. Keep my mood positive by turning in homework before it's due.
Submit homework assignments using the unix command,
hwsubmit
,
available on departmental
Linux computers.
cd ..
)hwsubmit cspp50101 YOUR_DIRECTORY_NAME
, and you should see a response in the terminal
indicating that the directory has been sent to the grader.These are answers to questions that may not have been asked, but should have been. Read carefully, or invoke my wrath!
Homework submissions should contain only the files you want the grader to consider. When you run hwsubmit, it shows which files have been sent. If there are more than you expected, make adjustments and resubmit. Here's a list of files which have been submitted which we don't need to see:
.abc.sh.swp abc.sh,v .bash_history bonus.sh~ ch1prob8.sh~ .directory filecounter.sh.save filelist.sh~ Home.desktop hw1_Part2~ hw1.txt~ hw1.txt~,v hw1.txt,v HW2_1~ HW2_2.sh~ hw2ch1pr5.txt~ hw2ch9pr5.sh~ HW2_Question1_p41_num5~ hw2.txt~ .lesshst .nfs00000000000130cc00000009 num_files.sh.save #question6# .question6.swp .saves-4710-altair.cs.uchicago.edu~ .swp System.desktop testing.sh.save testing.sh.save.1 testing.sh,v trash.desktop .viminfo
Your scripts and program must compile and/or run on CS machines. They should compile and/or run without any warnings or errors. If there are warnings or errors that you don't know how to solve, email the mailing list. If you still don't know, write in a README file which things you're still having trouble with. I'm ok with giving 0 points to "solutions" which don't run and aren't documented.
Bash scripts and C code must be in separate files, not embedded in the README file. This is so we can compile and/or run them.
Make sure you give the proper argument to hwsubmit. For instance, hw1 or hw2, not ~/cspp50101 or ~!
When in doubt, add a README file, explaining any deviations from the requirements of the assignment.
When compiling C code, use -Wall -std=gnu99
options to gcc.
When using a makefile, include the standard compilation options, and write all, test and clear targets so that
make
, make test
, and make clean
all run without any warnings or errors.
We will use GCC on the departmental Linux computers. On your own machine running MS Windows you may be interested in Open Watcom, Visual C++ 2010 Express, or another free C/C++ Compiler, but your code will be evaluated on the departmental systems.
This is a rough plan for what we'll try to cover, and the order I hope to do it in. Topics may get shuffled, added, or removed as necessary.
Week | Date | Topics |
---|---|---|
1 | 21 June | Review of Unix basics: logging in, bash, filesystem More Unix: version control with rcs |
2 | 28 June | Unix/bash: review, processes, bash scripting, edit/debug cycle High-level intro to C: comparison to other languages |
3 | 08 July | Basic C: program syntax, basic types, operators, expressions, control flow Unix: tools for C programming |
4 | 12 July | Control flow; functions: recursive and iterative |
5 | 19 July | Types: representation, constructors (array, string); Command-line arguments |
6 | 26 July | Pointers; Structures |
7 | 02 August | Recursive Data Structures |
8 | 09 August | Memory management |
9 | 16 August | Separate compilation units; Linking; Libraries |
10 | 23 August | File I/O; Signals |
11 | 30 August | Function pointers; Function types |
06 September | Labor Day -- no class | |
12 | 13 September | Review for final; Project due date |
13 | 20 September | Final Exam |