Syllabus for CSC211
Introduction to C Programming and Unix
4 Credit Hours (3/2 lecture/lab)
Open Entry (Self-Paced)
Summer 2018
Harper College

SECTION

Class will meet:

Section Time Days Room
Office hours and other courses' lab times. D253a or D258

from Jun 5th to Jul 26th.

FINAL TIME

Each student will take their exam at a time appropriate for them and myself.

We can discuss later in the semester what slot is best for each student.

PREREQUISITES

CSC121 (computer science I) or CSC208 (problem solving for science and engineering using FORTRAN) with a grade of C or better
[it is recommended that you had a B or better to actually do well in this class — as this class is more demanding/challenging in time and intellectual difficulty]

TEXT

A Book On C, Kelley & Pohl, Addison Wesley, 4th Edition

A Practical Guide to Linux Commands, Editors, and Shell Programming, Sobell, Prentice Hall, 3rd Edition

OTHER TEXTS
(you might find useful)

The C Programming Language, Kernighan & Ritchie, Prentice Hall
Applied C: An Introuction and More; Fischer, Eggert, & Ross; McGraw Hill
C Traps and Pitfalls, Koenig, Addison Wesley
C Pointers and Dynamic Memory Management, Daconta, Wiley-QED
Illustrating ANSI C (Revised Edition), Alcock, Cambridge
The C Answer Book, Tondo & Gimpel, Prentice Hall
The C Companion, Holub, Prentice Hall
The C Library, Jamsa, Osborne/McGraw Hill

Problem Solving & Program Design in C, Hanly & Koffman, Addison Wesley
Learning the UNIX Operating System; Peck, Todino, & Strang; O'Reilly

UNIX for Programmers and Users, Glass & Ables, Pearson/Prentice Hall

UNIX Unbounded, A Beginning Approach, Afzal, Prentice Hall

Understanding Practical UNIX; Greenlaw; Franklin, Beedle & Associates

UNIX Made Easy, UNIX and Linux Basics & Beyond, Muster, Osborne/McGraw Hill

Addison-Wesley's Interactive UNIX Tutorial and Reference, ??, Edutrends/Addison Wesley

COURSE DESCRIPTION

Develops working knowledge in the use of the computer in the C programming language. Includes problem formulation, data storage and retrieval, algorithms, flowcharts or pseudocode, numerical analysis and structural programming, lexical analysis and string manipulation.

Introduces student to a UNIX-like operating system environment.

Intended for the computer science or engineering student.

STUDENT OUTCOMES (The student should...)
  1. analyze problems of a math, science, engineering, or computer science nature, develop mathematical models, and create algorithms for their solution.
  2. develop structured flowcharts or pseudocode to describe algorithms using a top-down/modularized approach.
  3. have knowledge of the constructs of the ANSI* C language.
  4. code algorithms in the ANSI C language.
  5. debug programs using basic debugging skills.
  6. test the correctness of algorithms by designing appropriate input data sets.
  7. know basic Unix commands and file structure.
  8. know how to develop an ANSI C program in a Unix environment.
OBJECTIVE

To foster the student's understanding of the programming process. We will emphasize problem analysis and algorithm development while showing the importance of testing and documentation in generating well-crafted programs. The C programming language will be used.

In particular, we will review data types, variables, mathematical expressions, constants, input and output, creating a main program, the use of functions to break a program into manageable units, the use of branching and repetition mechanisms for controlling the flow of our programs. After that we'll learn to use arrays and strings to improve our handling of large amounts of data. We'll then dig into the use of structures and bits to manage groups of data. Finally, we'll study how pointers can let us use dynamic memory to manage large and previously unsized quantities of data in a program.

Along the way, we'll be using and exploring the UNIX environment. We'll see basic *nix commands, the 'vi' editor, and even learn to write basic shell scripts.

Research projects will allow the student to broaden or deepen their knowledge in a particular area of interest.

EVALUATION [Open For Reasonable Debate]
Tests35 %    GradePercentage
Programs25 %    A90-
Homework20 %    B80-90
Research Project 20 %    C70-80
Total100 %    D60-70
      F0-60

Also note that you cannot earn a C in this course without having shown at least a 70% competency on each and every topic covered during the semester (not a 70% average over all topics, but 70% on each topic). (See main page for your course for a topic list.)

The homework, programs, and research project portions of your grade will be chosen from the online assignments available. Keep working at a steady pace (one homework per chapter, one program every 2-4 weeks, research progress every 2-4 weeks, etc.) and all will be fine. If I get a general sense of slacking, I'll impose due dates — do we really want that?

Tests will be done in lecture time — not take-home.

TESTING

Lecture tests consist (most often) of true/false, fill in the blank (no word list), short answer, and hand-execution of code (I give you code and input and you tell me what shows on screen and/or is stored in variables). Lecture tests may also include hand-coding of small (5-15 line) segments of code. Multiple choice can also occur, but all correct answers must be chosen (i.e. it isn't multiple guess). Finally, matching is a rare occurance. (The homework and these online quizzes from 121 make a pretty good sample of questions and style.)

Make-up exams (with reasonable excuse — see attendance), will be ALL essay and/or hand-coding/execution.

Also there will be four tests and a cumulative final during the semester. This means that each test will be worth 7% of your overall grade. (Yes, the final, although cumulative, is equal in weight to a regular test.)

ASSIGNMENTS

When an assignment is given (i.e. placed on the web page), you can hand it in as soon as you are done for a review of its content. ('done' here means that you've made a reasonable attempt to start the program or answer the questions. You don't have to have it perfect before you hand it in. You can even hand in something you've merely outlined/flowcharted, if it is a complete enough outline.)

I will give the checked paper back to you ASAP so that you can make any needed corrections to it before handing it in for a grade (if you so choose — you can also use for extra credit or just for practice). You can hand in programs, questions, your paper, etc. in as many times as you like before final submission. Please mark a final submission as either 'FINAL' or 'XC' so that I know if you want it as part of your grade or to be considered for extra credit at the end of the semester. (Again, remember that this corrections policy is good for ANY of the online assignments: research projects, programs, and even homework.)

Finally, every assignment will also be rated (typically between 1 and 7) as to its difficulty (1 is quite easy, 7 is fairly challenging). The more difficult the assignment you choose to hand in, the more it will be worth to you. In addition to difficulty, I also look at topic coverage, so make sure you hand in programs, homework, etc. about different programming topics and different applications topics: functions, arrays, linked lists, UNIX, numerical analysis, scientific computing, etc.

SUBMISSIONS

Again, hand your work in in a timely manner and we'll have no problems. Straggle and I'll impose strict due dates.

Programs need to be formatted according to these guidelines for handing in (remember to adjust from C++ to C the extension and compiler). I prefer a ready program even for corrections, but just a PDF of the program will do (for instance if you just need your style cleaned up or have a simple error to get fixed).

Overall, you'll need to hand in five programs, ten homeworks, and a single research project. The programs will each be 5% of your overall grade. I'll consider 4 to be an average difficulty. Ratings below this will lose points. Ratings exceeding this will get bonus points. The homeworks will each be 2% of your overall grade. The same difficulty rules will apply as for programs.

For the research project, you'll need to hand in a progress report every 2-4 weeks. These reports will make up 4% of your overall grade (one fifth of your project grade). The remaining 16% for the project will be split equally between a research paper and supporting code. The paper should be formatted like the biography reports you can do for extra credit, except it will be 10-15 pages long (instead of 2-5).

LATE POLICY

Due dates (if imposed) will be strictly enforced. If you do not turn in your papers by the due dates given, credit may be denied. (Reasonable excuses may be accepted for a mere reduction of credit.)

For further information, please see me (I have a lovely piecewise exponential step function for it in my calculator).

TENTATIVE OUTLINE

From A Book On C:

Chapters 1-5 & Sections 11.1 & 11.2  Review of Programming Basics and C Specifics
Chapter 6  Arrays, Pointers, and Strings
Chapter 7  Bitwise Operators and Enumeration Types
Chapter 9  Structures and Unions
Chapter 8  The [C] Preprocessor
Chapter 10  Structures and List Processing
Chapter 11.3-6,10,12,16,19 (parts)  Input/Output and the Operating System

From A Practical Guide to Linux Commands, Editors, and Shell Programming

Chapters 1-5  UNIX, Shell, and File Basics
Chapter 6  The vim Editor
Chapter 8  The Bourne Again Shell (bash)

Always look for online notes to supplement (and sometimes correct/override) the book information.

I reserve the right to change this syllabus with sufficient warning to you.