CIS*1300 - Programming CALENDAR DESCRIPTION This course examines the applied and conceptual aspects of programming. Topics may include data and control structures, program design, problem solving and algorithm design, operating systems concepts, and fundamental programming skills. This course is intended for students who plan to take later CIS courses. If your degree does not require further CIS courses consider CIS*1500 Introduction to Programming. LEARNING OUTCOMES Upon successful completion of this course, students will be able to: Analyze problems and design algorithms. Demonstrate some of the basic principles of software development. Design and construct programs in a conventional procedural programming language. Apply consistent documentation and program style standards. Design, implement, test, and debug a program. Understand programming language constructs, e.g. conditional and iterative structures. Demonstrate knowledge of some standard algorithms and data structures. Write programs that use each of the following data structures: arrays, strings. Demonstrate working knowledge of dynamic memory allocation. Understand the Unix operating system, including the command line, and system tools used in programming. COURSE EVALUATION Assignments (3) 30 % Midterm Exam 20 % Lab Exam 20 % Final Exam 30 % LECTURE TOPICS INTRODUCTION TO OPERATING SYSTEMS Basics of Unix OS: architecture, editors & commands Unix shell script programming System tools for software: make, valgrind, gdb Introduction to command-line compiling PROBLEM SOLVING AND ALGORITHMS Basic problem solving skills. Methods of problem solving, e.g. brute force, divide and conquer. The role of algorithms in the problem solving process. The basics of software development: design techniques Algorithm design BASIC PROGRAMMING Brief overview of programming languages.
Program comprehension: Reading and understanding code Programming style: whitespacing, indenting, comments etc. BASIC LANGUAGE SYNTAX Basic elements of the C programming language Variables, data types, expressions and operators Basics of memory Simple I/O DEBUGGING AND TESTING Program debugging strategies. Defensive programming techniques. Elementary methods of program testing, creation of testing data. CONTROL STRUCTURES Conditional control structures: if and switch Repetitive control structures: for, while, do-while FUNCTIONS Structural decomposition. Function I/O, and parameter passing (including elementary pointers). ARRAYS AND STRINGS Introduction to array data structures. Function parameter passing of arrays. One and two dimensional arrays. Introduction to character arrays: strings. USABILITY Principles of basic program usability. Design of text-based messages in programs. ADVANCED STRING FUNCTIONS AND FILE I/O Introduction to advanced string functions File I/O ADVANCED C STRUCTURES Basic pointers and memory management Composite data types (typedef, struct, union) Introduction to data structures (stacks and linked lists), recursion ADVANCED PROGRAMMING Advanced C programming: forking a process, operating system libraries Programming efficiency and portability LABS There will be a strong emphasis on the lab component of this course. There will be a two-hour lab session for each student every week, these sessions will be staffed by TAs. Each week there
will be a specific problem set that must be achieved. REQUIRED TEXTBOOKS Kernighan, B.W., and Ritchie, D., The C Programming Language, (2nd ed.) Prentice Hall, 1988 SUGGESTED TEXTBOOKS van der Linden, P. Expert C Programming, Prentice Hall, 1994
LEARNING OUTCOMES (PER TOPIC UNIT): Upon successful completion of each topic unit, students will be able to: INTRODUCTION TO OPERATING SYSTEMS Discuss the relevance of various programming tools. Design and implement short shell scripts. Demonstrate a working understanding of the Unix OS. PROBLEM SOLVING AND ALGORITHMS Discuss the importance of algorithms in the problem-solving process. Identify the necessary properties of good algorithms. Create algorithms for solving problems. Identify different types of problem solving. BASIC PROGRAMMING Discuss the various types of programming languages. Analyze and comprehend programs. Describe the relevance of programming style. Apply consistent documentation and program style standards. BASIC LANGUAGE SYNTAX Analyze and explain the behavior of programs involving the fundamental programming constructs covered by this unit. Identify appropriate data types for algorithms. Translate mathematical expressions to language specific context. Demonstrate a basic understanding of memory.s DEBUGGING AND TESTING Describe strategies that are useful in debugging. Describe the types of bugs found in programs, e.g. compiler, logic etc. Design and implement defensive programming methods in programs. CONTROL STRUCTURES Design, implement, and modify programs that use standard conditional and repetitive control structures. Choose appropriate conditional and iteration constructs for a given programming task. FUNCTIONS Design, implement, and modify programs that use functions. Describe how modularization can improve the design of a program. Apply the techniques of structured (functional) decomposition to break a program into smaller pieces. Describe the mechanics of parameter passing methods. ARRAYS AND STRINGS Design, implement, and modify programs that use arrays and strings. Identify data which could be represented by an array or string.
Implement passing of arrays to functions. USABILITY Identify problems with the usability of user prompts in a program. Describe the basic ideas behind program usability. ADVANCED STRING FUNCTIONS AND FILE I/O Design, implement, and modify programs that use string I/O functions. Design, implement, and modify programs that use file I/O. Identify different file types. ADVANCED C STRUCTURES Understand the basics of pointers and memory management. Understand composite data types. Design, and implement, programs that use elementary data structures and recursion. ADVANCED PROGRAMMING Describe the basics of using operating systems libraries in C. Identify program inefficiencies, and solutions. Academic Misconduct The University of Guelph is committed to upholding the highest standards of academic integrity and it is the responsibility of all members of the University community faculty, staff, and students to be aware of what constitutes academic misconduct and to do as much as possible to prevent academic offences from occurring. University of Guelph students have the responsibility of abiding by the University s policy on academic misconduct regardless of their location of study; faculty, staff and students have the responsibility of supporting an environment that discourages misconduct. Students need to remain aware that instructors have access to and the right to use electronic and other means of detection. Please note: Whether or not a student intended to commit academic misconduct is not relevant for a finding of guilt. Hurried or careless submission of assignments does not excuse students from responsibility for verifying the academic integrity of their work before submitting it. Students who are in any doubt as to whether an action on their part could be construed as an academic offence should consult with a faculty member. The Academic Misconduct Policy is detailed in the Undergraduate Calendar: http://www.uoguelph.ca/registrar/calendars/undergraduate/current/c08/c08- amisconduct.shtml