CSCI 220 – Computer Programming I

Course Syllabus – Spring 2004



Dr. Bill Manaris


Room: 210 J.C. Long Building
Phone: (95)3-8159


Office Hours:

Mondays 11 a.m. – noon & 1 – 3 p.m., Wednesdays 1 – 4 p.m., and by appointment.  Feel free to come in with questions and problems you may have.  I may also be available for a few minutes after class.


An introduction to programming using Java.  Topics include data types, variables, assignments, control structures (selection and iteration), arrays, object-oriented analysis and design of software, classes, and the use of class libraries.

Each student must have completed MATH 111 or an equivalent or higher course, and must be enrolled in or have completed CSCI 222 (Computer Programming I Laboratory).  Students are expected to be familiar with MS Windows.



Chapman, S. J. (1999), Java for Engineers and Scientists, Prentice Hall, ISBN 0-13-919523-8.



Sestoft, P. (2002), Java Precisely, MIT Press, ISBN 0-262-69276-7.

Lewyn, M. “Flying in Place: The FAA’s Air-Control Fiasco,” Business Week, April 26, 1993, pp. 87-90.

Gleick, J. “Little Bug, Big Bang,” The New York Times Magazine, December 1, 1996. Also at .

Additional materials will be made available via handouts and the class webpage at .


Learning Goals:

·         To learn the fundamentals of programming, and object-oriented analysis and design.

·         To understand the fundamentals of the program development process (problem definition, requirements specification, design, implementation, testing, and maintenance).

·         To learn the fundamentals of the Java language, including class definitions, variable and object declarations, method definitions, and the major types of statements, such as assignment, selection and iteration.

·         To develop working knowledge of object-oriented programming techniques and their implementation in Java, including classes, objects, and methods.


Course Objectives:

(Using Bloom’s Taxonomy to indicate student competence: knowledge [1], comprehension [2], application [3], analysis [4]; synthesis [5]; evaluation [6].)


·    To be able to Edit/Compile/Execute a program [3]

·    To learn primitive data types and String (including knowing when to use which data type, and the range and precision of each data type) [4]

·    To learn the fundamentals of the program development process (problem definition, requirements specification, design, implementation, testing, and maintenance) [3]

·    To learn constants and variables and know when to use which [3]

·    To learn assignment (including the semantics of LHS versus RHS) [3]

·    To learn basic I/O operations for different data types [3]

·    To learn arithmetic operations and their limitations (including integer truncation, round-off error, division by zero, narrowing and widening conversions, casting, precedence, and standard math library functions) [4]

·    To learn relational operators (including floating point equality) [3]

·    To learn selection and use of selection statements to alter the flow of control (including nested selection) [5]

·    To learn logical operators (including short-circuit evaluation) [5]

·    To learn repetition and use of looping constructs (including count-controlled versus event-controlled, sentinel-controlled) [5]

·    To learn 1-D and 2-D arrays (including use of loops with arrays, logical versus physical length, parallel arrays, shallow versus deep comparison, common task such as finding max/min, summing, and other aggregate operations) [3]

·    To learn sequential search and be able to implement it [3]

·    To learn selection sort and be able to implement it [3]

·    To learn methods as a mechanism for modularization (including pass-by-value versus pass-by-reference, formal versus actual parameters, void versus value-returning and when to use which, pre- and postconditions, overloading) [5]

·    To introduce top-down design (functional decomposition for algorithmic design) as a mechanism for handling problem complexity as well as facilitating team programming and software reuse [3]

·    To learn classes and objects and be able to implement/instantiate them (including system drivers, types of methods (get, set, predicate, toString, constructors, finalizer), static versus non-static methods/variables, access qualifiers (public, protected, private, <default>), garbage collection, use of the “this” reference) [3]

·    To introduce object-oriented design as a mechanism for handling problem complexity as well as facilitating team programming and software reuse (introduce a simplified UML notation) [2]

·    To be able to implement a solution to a problem of complexity involving:

o   Control complexity (nested repetition, nested selection) [3]

o   Modularization complexity (at least two call-levels, occasionally a third) [3]

o   Class complexity (at least a system driver and one other class) [3]

o   Reference manipulation complexity (at least m[0].length) [3]



Scale: A: 90-100; B: 80-89; C: 70-79; F: <70. The grades of B+, C+, and D may be given at the professor's discretion.

Final Grade Computation: Assignments (5-7) 20%, Tests (2) 50%, Comprehensive Final Exam 25%, and Class Participation 5%.



·         You must do your assignments alone.  You are not allowed to discuss assignments and possible solutions with any person other than the instructor, lab instructor, and department-assigned tutors. You are not allowed to look at someone else’s solution (including code in books and the Internet) or show your solution to someone else other than the instructor.  Any violation of the above rules is an honor offense.  See The Honor System of the College of Charleston and the Student Code of Conduct (, especially sections on Cheating, Plagiarism (pp. 10-11), and Computer Use (p. 13).

·         On assignments you will be asked to identify the person(s) you received help from, if any.

·         In-class exercises, when identified as collaborative, are excluded from the above.

Course Policies:

·         Attendance at tests is mandatory.  You are expected to attend all classes.  Regardless of actual attendance, you are responsible for announcements made in class, assignment due dates, etc.

·         You are expected to do all reading assignments promptly.

·         Students are expected to participate in the educational experience through questions and invited comments/discussion.  However, you should respect your classmates right to learn (e.g., raise your hand, keep comments and discussions contained to the subject at hand, etc.); see Student Handbook section on Classroom Code of Conduct (pp. 49-50).

·         Programming assignments are to be submitted to the instructor on a floppy disk by the due date and time.  If the instructor is unavailable, they may be turned in at the CSCI department office (Long 216). 

·         Clearly label your floppy disk with your name, course number, section number, and semester.  Place your programs at the top directory using the specified filename.

·         To be eligible for partial credit, your submitted programs should compile (have no syntax errors).  Also your floppy disk should be readable on MS Windows.  Do verify both before submitting your assignment for grading.

·         24-hour blackout period: You may ask questions about an assignment up until 24-hours before it is due.

·         Upon return of graded work, you have one week to ask questions regarding your grade.

·         To receive a passing grade for the course, you must average a passing grade (70% or higher) on each of the following: assignments, tests, and final exam.

·         You have four “late” days for the whole semester to use when submitting your assignments.  Once you use up these days, no late assignments will be accepted. However, partial solutions submitted on time will be graded.

·         If at the end of the semester you still have all 4 “late” days unused and have completed all assignments, 2.5 bonus points will be added to your final course grade.