CSE 230 Course Information

Course Objectives and Description

A systematic introduction to the principles and practice of programming in the C language. The course will cover control structures, expressions, data types and structured data, functions and parameter passing. Emphasis will be placed on writing C programs that follow structured programming principles. Aspects of the UNIX operating system relevant to developing C programs (shell scripts, make, etc.) will also be covered.

NOTE: The goal of the course will be to prepare students who already know some programming to do C program development under Unix. It is not a goal of the course to teach beginning programming, nor to teach non-programmers how to use the Unix system.

Staff

Professor

Eugene W. Stark

Teaching Assistant

Liqun Na

Teaching Assistant

C-K Yang

Prerequisite

You must have taken CSE 114 (Computer Science I) or have equivalent programming experience to take this course.

WARNING: Though CSE 214 is not an official prerequisite for this course, I will be presupposing in this course some familiarity with simple data structures such as linked lists, and you will need to have some concept of how to design and implement programs of between 100 and 1000 lines of code. If you do not have such prior experience, you will probably find this course very difficult.)

Though this course is called ``Introduction to C and Unix'', it is not ``Introduction to Programming,'' nor is it ``Introduction to Computers.'' In my opinion, C is not a programming language for beginning programmers, and the course material will probably not be very accessible to people who don't have a fair amount of programming experience under their belt. Though you are not assumed to know how to use Unix-specific programming tools at the beginning of this course, you are expected to be computer literate and not require ``hand-holding'' in order to log in and do basic operations.

Class Time/Place

Tuesday and Thursday, 11:20AM-12:40PM, Physics P113.

Examinations

There will an in-class midterm exam on Tuesday, November 4, and a final exam on Tuesday December 16, from 12:00-3:00PM. The midterm will be held in the regular classroom unless a change is announced. The location of the final exam will be announced later.

Textbooks

Required Texts

My lectures will not be "from the book", but rather will provide additional information and my own perspective on the material. As it is not possible to cover every topic and every last technical detail in lectures, the textbooks will be essential references for you. I would recommend having a copy of these close at hand as you work on the programming assignments. If you don't have your own copies, you risk wasting a lot of time and failing to pick up information that would be easy to find if you had the books.

Highly Recommended

Handouts

This semester, all course handouts, including homework assignments, will be available on the World Wide Web for you to download and print, if desired. No paper copies will be handed out. You will need to learn how to use a WWW browser such as Netscape (graphical, under X Windows) or Lynx (textual, for dumb terminals). Start from the course home page on the CS Department Undergraduate Computing Laboratory at the following URL:
http://www.ug.cs.sunysb.edu/~stark/CSE230
I will try to announce in class when new homeworks and handouts are available, but ultimately it will be your responsibility to check the course WWW pages regularly to find out if there is anything new.

Homework

There will be homework assigned regularly, with each assignment due one to two weeks after it is issued. Homework will consist of programming exercises and projects which will guide you in learning how to program in C under Unix.

Programming assignments will be handed in electronically, using a method detailed here. We (the TA's and I) will be able to spend only a very limited time grading each assignment, and will not be able to do much in the way of ``decoding'' your submissions. It is your responsibility to make sure that the information you hand in electronically demonstrates very clearly that you did the work that was assigned.

Students must turn the homeworks in on time. Each homework assignment will be graded in one session only, which might take place as early as the day after the due date for that assignment. Homeworks submitted in time for the grading session will be regarded as on time. Homeworks submitted after the due date run the risk of missing the grading session, and thus not being graded. If your homework assignment is not graded due to late submission, at the instructor's discretion you will receive either a zero for that assignment or you will receive a score equal to the average grade you received on all your homeworks that were graded. You are strongly encouraged to complete and submit all homework assignments, even if they are late, but do not ask me if it is `OK' to turn in homeworks late. It is not `OK', and you run the risk of not receiving credit for the late homeworks, but you will be better off if you do them and turn them in late than if you do not turn them in at all.

Do not try to do a homework assignment in a single ``all-nighter'' the day before the homework is due. You must begin looking at the homeworks as soon as they are handed out, and plan ahead so that you can complete the homework in the allotted time. Remember, also, that if you wait until the last minute you will be competing for computer resources with other desperate students, and you run the risk that unpredictable computer failures will make your assignment late.

Read This! Each student must do their own individual homework. In particular, this means that everyone must write their own programs. If you wish to discuss with other students the course material as it pertains to the programming assignments, that is OK, but everyone's coding must be their own work, and only their own work. Any evidence that programs were not coded individually will be regarded as evidence of academic dishonesty. The College of Engineering and Applied Sciences regards academic dishonesty as a very serious matter, and provides for substantial penalties in such cases, such as receiving an `F' grade, or expulsion from the University. For more information, obtain a copy of the CEAS guidelines on academic dishonesty from the CEAS office.

Grading

The final grade will be determined as follows: The raw scores obtained by a student on each assignment and exam will be standardized for that particular assignment or exam by converting them to percentile scores. A weighted sum of the resulting standardized scores will then be formed (with weights as shown below) to obtain a composite score for each student. Finally, the composite scores will be ranked, and I will apply a subjective method of my choice to determine the cutoffs for each grade category. Absolute performance standards, the distribution of composite scores, and information derived from late homeworks are factors likely to contribute to this decision.

So that you can get an idea of how you are doing as the term progresses, I will report rough percentile information when I hand back each assignment. Final percentile scores will not be computed until after all grade changes and corrections have been taken into account at the end of the term.

It is possible that I might not receive adequate TA resources this semester for the number of students in the class. Should this occur, then to reduce grading time to a manageable level, I may find it necessary to apply a coarser homework grading scale than I would otherwise choose.

Students with Disabilities

The Dean has required that all faculty include the statement found here in their syllabus handouts.
If you have a physical, psychiatric/emotional, medical or learning disability that may impact on your ability to carry out assigned course work, I would urge that you contact the staff in the Disabled Student Services office (DSS), Room 133 Humanities, 632-6748/TDD. DSS will review your concerns and determine, with you, what accommodations are necessary and appropriate. All information and documentation of disability is confidential.

Schedule of Topics

I have listed on the next pages the topics I plan to cover in the course, in roughly the order I expect to cover them. There will almost certainly be some changes to the outline, depending upon the speed at which the course progresses. However, I expect the overall organization to be essentially as indicated.

You will notice that most of the textbook reading has been located in the first half of the semester. This is because you will need to do a lot of reading to get familiar with the general capabilities of Unix and C before you can do interesting programming assignments. This will occur in the first half of the semester. During the second half of the semester, you will make use of the course texts primarily as references while doing the more advanced programming assignments. The classes during the second half of the semester will become less like structured lectures, and more like discussion sessions that concern the effective use Unix and C features for program developement.

  1. Introduction
    1. The UG Lab and Campus Network
    2. Introduction to Unix
    3. Introduction to the Shell
  2. Using Unix for Programming
    1. Editing
    2. Compiling (preprocessors, compilers, linkers, libraries)
    3. Debugging
    4. Session Management
    5. Shell scripts
  3. Introduction to C Programming
    1. Structure of a C Program
    2. C Syntax
    3. Built-in data types
    4. Expressions
    5. Statements
    6. Header files
    7. Basic I/O functions
  4. Intermediate C Programming
    1. Precedence and associativity
    2. Scope rules
    3. Structures and pointers
    4. Memory management, storage classes
    5. Parameter passing
    6. Type definitions, casts, function prototypes
    7. Standard I/O library
    8. Separate compilation
  5. Program Development Tools
    1. Emacs
    2. GDB
    3. Make
    4. CVS
  6. Advanced C Programming
    1. C Preprocessor
    2. Command line processing, getopt
    3. Date and time
    4. Low-level filesystem access
    5. TTY handling, curses
    6. Signals and handlers
    7. Processes and pipes

Course Calendar

Date	K+P	A+L	K+R	HW		Topic
Sep 4				HW0 out		The UG lab and Campus Network
Sep 9		1,2				Introduction to Unix
		3.1-3.7
		5.1-5.8
Sep 11				HW0 due
Sep 16		3.8-3.14	HW1 out		Introduction to the Shell
		4.2
		4.4
		4.6-4.7
		6

Sep 18
Sep 23		8.1,8.4				Using Unix for Programming
		9.1-9.8
		12.1-12.8
		13
Sep 25	1-4		1-4			Introduction to C Programming
	5.1-5.6
Sep 30				HW1 due
				HW2 out
Oct 1
Oct 2						ROSH HASHANAH -- No class
Oct 7
Oct 9	5.8-5.16	5-7			Intermediate C Programming
	6,9
Oct 16				HW2 due
				HW3 out
Oct 21
Oct 23						
Oct 28	7-8,10-12	8	HW3 due		Advanced C Programming
				HW4 out
Oct 30
Nov 4						MIDTERM EXAM (in class)
Nov 6
Nov 11
Nov 13
Nov 18
Nov 20				HW4 due
				HW5 out
Nov 25
						WITHDRAW DATE (Nov 26)
Nov 27						THANKSGIVING -- No class
Dec 2
Dec 4
Dec 9						
Dec 11				HW5 due
Dec 16						FINAL EXAM 12:00PM-3:00PM