Projected outline of the course (as of 10/25/98):

I. Introduction
   A. Computer Science History
   B. Computer Science as Science
   C. Computer Systems
      1. Hardware
      2. Software
      3. Computer Languages
      4. Compilation
   D. Software Development
      1. Software Life-Cycle
      2. Program Development
         a. Five steps to good programming
         b. Top-down programming
      3. Software Engineering
II. Program Basics
   A. Program skeleton
      1. Preprocessor directives
      2. Global declarations
      3. Functions
         a. local declarations
         b. statements
   B. Names (identifiers)
      1. Reserved words
   C. Comments
   D. Variable declarations
      1. Memory allocation
      2. Atomic types
         a. void
         b. int (1,-50)
            i. short
            ii. long
            iii. unsigned
         c. float (3.0,1.25e10)
            i. double
            ii. long double
         d. char ('A','b','1')
      3. Logical data
	 a. int or char
	 b. 0 (false), non-zero (true)
   E. Constants
      1. Literal
      2. Defined
      3. Memory
III. Simple Statements
   A. Files
   B. Field specifications
      1. codes
         a. whole number
         b. floatint point
         c. char
         d. number
      2. size
      3. width
      4. precision
      5. flags
      6. special chars
   C. Output
      1. printf (monitor output)
         a. Format string
         b. Data list
   D. Input
      1. scanf (keyboard input)
         a. Format string
         b. Address list
         c. Prompting for Input
   E. Expressions
      1. Primary
         a. identifiers
         b. constants
         c. parenthesized expressions
      2. Unary
         a. postfix: function call, increment, decrement
         b. prefix: sizeof, unary +, unary -, cast, increment, dec
      3. Binary:
         a. arithmetic (+,-,*,/,%)
         b. assignment
         c. short-hand assignment
	 d. relational (==,!=,<,>,<=,>=)
	 e. logical (&&,||,!)
      4. Side effects
      5. Casting operator
	 a. Implicit
	    i. Promotion hierarchy
	 b. Explicit
      6. Resolving Expressions
	 a. Precedence
	 b. Associativity
	 c. Chart:
	      ()
	    L func call (), array ref []
	    L postfix ++,--
	    R sizeof unary +,- prefix ++,-- ! & *
	    R (type cast)
	    L * / %
	    L + -
	    L < <= > >=
	    L == !=
	    L &&
	    L ||
	    R assignment, short-hand assignment
      7. System functions
	 a. including libraries
	 b. stdlib: abs, labs, fabs, rand, srand
	 c. math: ceil, floor, rint, pow, sqrt
   F. Compound Statement
      1. { }
      2. Local declarations
      3. Scoping
IV. Modularity (Functions)
   A. Advantages
      1. Readability
      2. Reusability
      3. Modularity
      4. Data security
   B. Function Parts
      1. Declaration (prototype)
      2. Definition
      3. Call
   C. Parameters
      1. List (formal)
      2. Arguments
      3. Passed by value
      4. Reference parameters
   D. Return values
      1. return statements
   E. Executing Functions
      1. Evaluating call
      2. Setting up parameters
      3. Executing body
      4. Cleaning up
   F. Scoping
      1. Rules
      2. Local vs global definitions
      3. Names in functions
   G. Function Documentation
   H. Iterative Programming
V. Control Flow Statements
   A. Conditional Statements
      1. if
	 a. Syntax, execution
	 b. Use of compound statements
	 c. Nested ifs
      2. if-else
	 a. Versus if
	 b. Use of else
	 c. Nested if-else
	 d. Matching else
      3. Switch
	 a. Syntax
	 b. Case list
	 c. Statement execution
	 d. Default option
	 e. Use of break
      4. Multiway selection
	 a. Using multiple if-else
	 b. Using switch
   B. Looping statements
      1. Parts
	 a. Initialization
	 b. Termination condition
	    i. Pretest vs. Posttest
	 c. Body
	    i. Statement(s)
	    ii. Update
	    iii. Use of compound statements
      2. Pretest: while
	 a. Syntax
	 b. Execution path
      3. Posttest: do-while
	 a. Syntax
	 b. Execution path
      4. Pretest: for
	 a. Syntax
	    i. initialization
	    ii. update
	    iii. comma form
	    iv. termination condition
	 b. Execution path
      5. Event-controlled
	 a. Unknown # of executions
	 b. Generally while, do-while
      6. Counter-controlled
	 a. Known # of executions (from counter variable)
	 b. Generally for
      7. Infinite loops
	 a. Based on termination conditions
	 b. Due to empty statement
      8. Nesting loops
VI. Text Files
   A. Files
      1. Text
	 a. ASCII representation
	 b. newlines \n
	 c. end-of-file (EOF)
      2. Binary
   B. File pointer
      1. Type: FILE *
      2. Streams
      3. Standard file pointers
	 a. stdin
	 b. stdout
	 c. stderr
   C. Open/closing files
      1. fopen command
	 a. modes "r" "w" "a"
	 b. failure
      2. fclose command
	 a. failure
   D. File input
      1. fscanf
	 a. file pointer
	 b. format string
	 c. address list
	 d. return values
      2. Single character
	 a. return values (int)
	 b. int getchar() - keyboard
	 c. int getc(FILE *)
	    int fgetc(FILE *)
	 d. int ungetc(char,FILE *) - putting one back
      3. Discarding line
   E. File output
      1. fprintf
	 a. file pointer
	 b. format string
	 c. value list
	 d. return values
      2. Single character
	 a. return values (EOF if error)
	 b. int putchar(int) - terminal
	 c. int putc(int,FILE *)
	    int fputc(int,FILE *)
VII. Structured Types
  A. Arrays
    1. Syntax of declaration
    2. Layout in memory
    3. Referencing array element
       a. Subscript use (abuse)
       b. Array elements as variables
    4. Array Initialization
    5. Processing arrays
       a. using loop
       b. types of processing
	  i. init
	  ii. read
	  iii. print
	  iv. compute
	  v. find member
    6. Passing array/part of array
       a. element of array
       b. entire array
    7. Multidimensional arrays
       a. declaration
       b. referencing
       c. processing
       d. initialization
VIII. Techniques
  A. Sorting
     1. What is sorted?
     2. Selection sort
     3. Insertion sort
  B. Searching
    1. (Un)successful searches
    2. Sequential search
       a. Unsorted array
       b. Sorted array
    3. Binary search (sorted array)