COMP.1010 (201) – Computing I

UMass Lowell

Department of Computer Science

Semester and Year: Summer 2017

Classrooms Location and Meeting Times: Olsen Hall Room 131

MWR 8:00-10:20 am (Lectures)

Textbook: J. Hanly & E. Koffman, “Problem Solving and Program Design in C”, 8th ed. 2016,

Co-requisites: COMP.1030L – Computing I Lab.

Instructor: Byung Kim

Office Location: Olsen Hall Room 231

Office Hours: TBD and by appointment


Course website:

Course Description: Computing I is the first structural programming course in a two-course sequence in C language. Students will learn how to build solutions to programming problems using the C language in a UNIX/Linux environment. Additional concepts from computer science, an introduction to data structures in C, and basic computer architecture issues will be presented as well.

Course Outcome Objectives: At the completion of this course, students should be able to:

1.  State the data type of an object by reading its declaration.

2.  State how many bytes of storage are reserved by a variable definition.

3.  State exactly where storage is allocated.

4.  Correctly fill out memory templates for a variety of small C programs thereby demonstrating knowledge of the execution environment.

5.  Identify which of C’s 45 operators cause a side-effect and which do not.

6.  Convert an integer decimal value into its equivalent unsigned binary representation.

7.  Convert an integer decimal value into its equivalent signed binary representation.

8.  Convert an integer decimal value into its equivalent two’s complement representation.

9.  Convert a real decimal value into its IEEE 754 Single Precision Floating Point equivalent.

10.  Create 10-250 line C programs after reading a short problem description.

11.  Create programs that rely upon simple recursion (e.g., factorial, Fibonacci).

12.  Create programs that rely upon a recursive divide and conquer strategy (e.g., quicksort).

13.  Write at least one program that relies upon a recursive backtracking strategy.

14.  Write short, relatively simple makefiles.

15.  Use the UNIX/Linux operating system to create, store, and print files, to build an executable image, and to navigate about the file system.

16.  Sort a list of integers using sorting algorithms.

17.  Search an element in a list of elements already sorted or not. Compare and discuss the pros and cons of the linear search vs. dichotomic search.

18.  Discuss roughly the efficiency of the studied sorting and search algorithms.

19.  Write C programs that rely upon dynamic memory allocation via the function malloc.

20.  Read and understand a program that implements a linked list data structure that relies upon pointers to functions and pointers to a void.

21.  Build an executable image from a collection of header and C source files.

22.  Demonstrate how C’s dereference operator is used to access data.

23.  Demonstrate how C can achieve “call by reference” by passing the address of an operand.

24.  Write C programs that include single and multi-dimensional arrays, including passing such arrays as parameters to a function call.

25.  Write small C programs that rely upon structs and typdefs.

Course Activities:

Programming Assignments and Labs

Learning to program requires hands-on work on computer, not just listening to lectures. Hence, we will have programming exercises to solve as often as possible.

There will be a two-hour lab weekly. Attendance is mandatory. Each student will be required to go through a set of logically related exercises and then make sure to sign off with the TA before leaving the Lab.

Also, there will be weekly programming assignments. The Computer Science Labs with Linux environments (Olsen Hall, 3rd floor, Rooms 308 and 310) are available for you to work on the programming assignments. Due dates are clearly specified for every single assignment, you must respect those due dates. Specific rules for a late submission will be given as part of the grading process for the assignments. Submissions will be required before midnight on a specific date. Questions related to the assignments (clarification of requirements and help get you started, as well as well-thought-out questions related to your code) are welcome. All submissions must be individual work. You must complete any assignment by yourself, using only your own work. You should never engage in any activity that would dishonestly improve your results/grades or improve the results/grades of other students. Any student caught cheating will immediately receive a grade of zero for the assignment and this might lead to a grade of zero for the entire course.

Assessment Quizzes and Homeworks

There may be quizzes given in class with or without warning. Be always ready to take a quiz. At the beginning of each session, you are responsible of all the course materials exposed in the previous sessions. Also, a homework will be given from time to time. It consists of written exercises to be solved at home and returned on a specific due date.

Midterm Exam

There will be a midterm exam during the week of June 4, 2017.

Final Exam

There will be the usual comprehensive final exam on June 26, 2017.

Class Attendance and Participation

Students are expected to attend all class and lab sessions and participate in class and lab activities.


Students are expected to maintain a certain level of decorum that includes:

1.  Turning off cell phones.

2.  Arriving to class and lab on time.

3.  Not sleeping during class.

4.  Not eating during class.

5.  Keeping side conversations to a minimum.

6.  Not leaving class until it is dismissed by the instructor.

Evaluation/Grade Computation: Course grades are based on weighted percentage averages. Your final grade will be derived by multiplying each individual Student Activity score by the weighted percentage and summing all the weighted percentage averages.

Student Activity / Individual Score / Weighted % / Weighted %
Labs / x 0.20
Programming Assignments, Quizzes, and Homeworks / x 0.25
Midterm Exam / x 0.25
Final Exam / x 0.30
Grand Total =

Planning: The following table provides you with a tentative schedule based on previous offerings of this course. We will try to respect this schedule as much as possible. The introduction to the UNIX/Linux environment and to Emacs doesn’t appear early in the course as proposed in the table hereafter. Instead, during the first few weeks of the course, we will be using LearnCS!, a web-based tool to edit and run our programs.

Week / Topics to be covered in class
(+ other activities) / Textbook reading(s)
(+ other materials)
1a / ·  Course syllabus and planning
·  Computer systems and program development / ·  Textbook, Chapter 0
1b / ·  Introduction to C
·  Introduction to our CS computing environment
·  Introduction to the UNIX/Linux environment and to the Emacs editor (Part I) / ·  Textbook, Chapter 1
2a / ·  Reading types in C
·  Variables, operators, and control flow
·  Introduction to the UNIX/Linux environment and to the Emacs editor (Part II)
·  Introduction to editing and compiling a C program / ·  Textbook, Chap. 2
·  Ken Kleiner’s slides
2b / ·  Functions and program structure
·  Memory template (provided by Prof. Canning, and updated by Derrell Lipman)
·  Introduction to writing a makefile / ·  Textbook, Chapter 3
3a / ·  Conditionals
·  Repetition / ·  Textbook, Chapter 4, 5
3b / ·  pointers and arrays / ·  Textbook, Chaps 6,7
4a / ·  Compile-time vs. run-time storage allocation (malloc, calloc, free)
·  Recursion / ·  Textbook, Chaps 6,7
Week / Topics to be covered in class
(+ other activities) / Textbook reading(s)
(+ other materials)
4b / ·  Malloc up two-dimensional arrays
·  Memory template exercises (malloc, arrays, and two-dimensional arrays)
5a / ·  More about recursion
5b / ·  Structures
·  More memory template exercises
·  Linked lists / ·  Textbook, Chapter 13
6a / ·  Linked lists
·  Introduction to sorting / ·  Prof’s material on sorting
6b / ·  Sorting and searching algorithms
·  Stack and queue structures using linked lists / ·  Prof’s material on sorting/searching
·  Prof’s material on stacks/queues
6/26 / ·  Final exam