Skip People

People

  • Participants
Skip Activities

Activities

  • Assignments
  • Forums
  • Resources
Skip Administration

Administration

  • Grades
  • Profile
Skip Course Support

Course Support

OL 101: My Course Help offers Quick Start Guides, an FAQ, and other information to help you navigate this site.

For quick resolution to technical or administrative issues, please Contact Our Support Staff rather than your instructor.

Skip Required Textbooks

Required Textbooks

Stephen Prata, C Primer Plus, 5th ed. (Indianapolis, IN: Sams, 2005).
ISBN: 9780672326967
Sold at UW Book Store, Amazon, and B&N

Recommended

Brian W. Kernighan and Dennis M. Ritchie, The C Programming Language, 2nd ed. (Englewood Cliffs, NJ: Prentice Hall, 1988).
ISBN: 0131103628

Steve Maguire, Writing Solid Code: Microsoft's Techniques for Developing Bug-free C Programs (Redmond, WA: Microsoft Press, 1993).
ISBN: 1556155514

Steve McConnell, Code Complete, 2nd ed. (Redmond, WA: Microsoft Press, 2004).
ISBN: 0735619670

This course preview outlines the details of this online course. For more information on taking this course, please send an e-mail message to our support staff at info@pce.uw.edu. UW offices are closed on these holidays.

Foundations of C++ teaches the building blocks of C++, the C programming language. Two overlapping versions are taught.

  • 16 Week - Foundations of C++, for experienced programmers brand new to C, the 16-week full-length class covers the entire language.
  • 12 Week - Accelerated Foundations of C++, for experienced Java and C# programmers, the shorter, 12-week class skips those topics common to C-like languages, such as basic types, operators, relational expressions, looping, and branching.

Both versions synchronize at week 6 and continue on to cover character I/O and input validation, all aspects of functions, arrays, pointers, C strings, storage classes, linkage, memory management, file I/O, structures, the preprocessor, and advanced data representation. The programming assignments are challenging and fun. The instructor provides hands-on professional code review, focusing on simple and readable coding style, maintainability, practical testing techniques. Online discussion is encouraged.

Prerequisites

The following qualifications are required to ensure that you will be successful in this course.  If you are unsure of your qualification for the course, you are invited to take the Assessment Quiz.

About ANSI-C

The C programming language is still going strong.  It was created by Dennis Ritchie of Bell Labs back in 1972 as he and Ken Thompson worked on designing the UNIX operating system.  Despite the many modern and successful high-level languages (such as C++, Java, C#, Perl, Python, Ruby, and others) created since then, C remains a workhorse language for small devices, smart phones, device drivers, database engines, and high performance computing applications.  As of September 2011, web sites such as langpop.com show C as being one of the most popular languages used overall.  Most importantly, several of the most well-known and dominant languages (C++, Java, C#) are successful largely because they base their syntax in C.  Understanding C and its compiled and procedural constructs provides you a core foundation to branch out into a large set of derivative languages and technologies that have been created since C.

Learning Objectives

After mastering the material in this class, you will have a working knowledge of nearly the entire ANSI-C programming language.  You will be able to design, write, and debug a multiple file program.

Scope of the Course

In addition to the programming language and constructs, the course emphasizes effective programming style that leads to readable, understandable, and maintainable code.  Strategic testing techniques are taught which improve code quality and correctness.  Constructing a logically coherent, understandable and componentized solution is as important and the language and tools used.  In that sense, C is merely the setting for learning these robust language-independent concepts.

Course Deliverables

Besides reading the weekly assigned book chapters and written instructor commentary, you are required to deliver the following materials to be graded by the instructor:

  • 15 Programming Assignments (11 for the 12-week class)
  • Final Exam, given during week 15

You do not need to submit practice exercises from the book.

Compilers

The programming assignments in this class are designed to be platform agnostic.  Any ANSI-C compiler on a modern operating system should do fine.  The gcc compiler is freely available on Linux, UNIX, and Mac OSX.  On Windows, the Microsoft Visual Studio 2010 Express development environment is a good choice.  Learn how to configure your compiler options (or project settings) to restrict your code to the ANSI-C language, avoiding C++ features and proprietary language extensions.  Use of advanced C99 features is acceptable, but is not required nor supported by the instructor.  Use of C++ features is forbidden, as the objective of this class is to teach you the ANSI-C programming language.

Programs This Course Prepares You For

  • C++ Programming (Introduction and Certificate)
  • iOS and Mac Application Development (formerly iPhone and Cocoa Development)
  • Game Development (additional requirements needed)
  • Embedded and Real Time Systems Programming additional requirements needed)

Course Grading Criteria

Foundations of C++ is a pass/fail course.  At the end of the course, you receive either "satisfactory completion" (SC) or "unsatisfactory completion" (USC).  The individual programming assignments and final exam are also graded in that fashion, ith the addition of a 100-point grade to give you a more detailed quantitative idea as to how you did.  As a general rule, 80 points out of 100 is the minimum needed to pass individual programming assignments.  However this is subjective, and ultimately the instructor will judge if an assignment is good enough to move onto the next.  The assessment comes down to whether you will likely succeed on harder assignments based on your past performance.

While the points are not binding, they help establish consistency between students, as the instructor will retract the same points for the same issue.  On one assignment, 85 might be required to pass.  On another (harder) assignment, it might be 75.  It all depends on the overall class and how the instructor deducted points for individual coding issues.  Consistency, fairness, and ensuring your future success are the primary criteria.

Code Review Feedback

One of the primary value-added features of this online course is the instructor’s detailed line-by-line code review feedback on your programming assignments.  A great deal of time and effort goes into providing that individual feedback, so take advantage of it and learn from it.
Points are generally rewarded in three areas.

  • Style gets the majority of the points.
  • Testing is the next most important scoring area.
  • Correctness is given the fewest points.  While it may seem surprising that being correct is given the fewest points, it is often the case in programming that effective style and intelligent testing lead to correct programs.

Late and Rework Policy

Foundations of C++ consists of a fixed 16-week schedule of reading and programming assignments (12 weeks for the accelerated students).  You must turn in programming assignments on time per posted due date, and take the final exam by the posted due date.
Because this is a pass/fail course that requires satisfactory completion of every assignment, some flexibility for rework and lateness is granted.  However, it is important that such a policy does not encourage you and other students to fall behind, devolving the class into a delayed self-paced course.

  • Up to three assignments may be submitted up to 24 hours late.  You will receive a USC for the entire course if any assignment is more than 24 hours late, or if more than three assignments are turned in late.  No lateness is allowed on the last assignment.  Being late on one assignment does not alter the due date of any other assignment.
  • Up to three assignments may be reworked once.  You have 5 days after receiving feedback to submit your second (and final) version.  If more than three assignments require rework or any assignment requires rework twice, then you will receive a USC for the entire course.

You are highly encouraged to turn in work early, especially on the easier (early) assignments, giving you a safety buffer when assignments later become more difficult.

Collaboration

The online environment offers a unique experience that differs from the classroom-based courses.  There are advantages and disadvantages, depending on the needs of each student.  While classroom courses offer a regularly scheduled classroom environment rich with personal interaction, they require students to be located locally in the Puget Sound and show up to a regularly schedule physical classroom.  Due to traffic, location, working hours, or situation in life, this is difficult for some students.  Online courses offer the flexibility of working on your own schedule from any internet-ready location.  There are online discussion forums and occasionally real-time live virtual meetings to supplement the text-based learning format.  So while you won’t often see your instructor or fellow students face-to-face, you can collaborate online and not be required to be located in the Puget Sound.

We use a learning system called Moodle.  On the site, you are encouraged to fill out your Moodle profile.  This is a great place to share your programming experience with the class, such as languages you know, number of years, types of products you have worked on, etc.  Also consider mentioning your goals after completing this class, such as to gain certain skills for your job or to enroll in the Embedded, C++, or iOS certificates.

The online discussion forums are the best way to pay-it-forward to your fellow students.  As you benefit from seeing questions and answers posted that help you, remember to also use these forums for your own questions, rather than defaulting to direct e-mails with your instructor.  Often your question is on the minds of several of your peers, and you help each other by keeping those excellent questions visible to the whole class.  There are, of course, situations when one-on-one e-mail or phone interaction works best, and your instructor will be happy to help you work through any issues you are having with the course.

The online student handbook is a great resource that links to a rich array of UW library services and answers questions about online course, such as how to purchase your text, schedule the exam, obtain a transcript, and get technical help with the learning tools if you need it.

Course Outline

The following table presents the course outline by book chapter.  Most of the 16 weeks cover one chapter and one programming assignment, except for weeks 1 and 13, which have three and two chapters of reading, respectively.  The 12-week class skips weeks 1, 3, 4, and 5.  Thus on week 5, the 12-week students do what the 16-week students did during week 2.  At week 6, all students are synchronized and have the same reading and assignments through the end of the course.

Chapter

Title

Topics

Week #

Assignment

16-Week Class

12-Week Class

1

Getting Ready

Why C, Programming Mechanics, Standards, Conventions

1

skip

1

2

Introducing C

Simple Example, Comments, Printing Values, Errors, Keywords

3

Data and C

Basic Types (int, char, _Bool, float, double), Escape Sequences

4

Character Strings and Formatted I/O

Character arrays, strings, const, printf, scanf

2

5

2

5

Operators, Expressions, and Statements

Assignment, Math operators, sizeof, modulus, ++/--, casting

3

skip

3

6

C Control Statements: Looping

while, for, relational expressions, _Bool, for, do-while

4

4

7

C Control Statements: Branching and Jumps

if, else, switch, continue, break, goto

5

5

8

Character I/O and Input Validation

Keyboard input, getchar, putchar, redirection, input validation

6

6

6

9

Functions

Formal/Actual Arguments, Prototypes, Recursion, Pass by value/address

7

7

7

10

Arrays and Pointers

Array initialization, multidimensional, Pointers, Pointer Operations

8

8

8

11

Character Strings and String Functions

String I/O, Allocation, String Library Functions

9

9

9

12

Storage Classes, Linkage, & Memory Management

Scope, Linkage, multiple code files, malloc, free, type qualifiers

10

10

10

13

File Input/Output

Standard I/O, Text, Binary, fopen, seek, fread, fwrite

11

11

11

14

Structures and Other Data Forms

struct, array of struct, nesting, enum, typedef

12

12

12

15

Bit Fiddling

Bitwise operators, bit fields

13

13

13

16

The C Preprocessor and the C Library

#define,  #include, #pragma, C library, memcpy

17

Advanced Data Representation

Abstract Data Type, Interface, Linked List, Queue, Binary Tree

14

14

14

 

 

Final Exam

15

15

15

Final Assignment (shortest path maze solver)

16

16

About the Course Developer

Colby O'Donnell has been programming professionally in C++ since 1999.  During his first 11 years, he developed portions of several major software releases of premium ultrasound devices at Philips Healthcare in Bothell and Siemens Healthcare in Issaquah. He now works at Microsoft, learning and using C# and SQL.  His passion lies in implementing simple, maintainable, and testable software designs that meet customer need.

Colby holds an M.S. in Computer Science from the University of Wisconsin, two B.S. degrees in Physics and Computer Science from the University of Washington. Quick quiz: How do you pronounce UW? Careful, it depends! While enjoying the frigid temperatures of Madison, Colby taught two sections of CS302 in C++ and was ribbed for saying "U-dub".

Skip Upcoming Events

Upcoming Events

There are no upcoming events
Skip Latest news

Latest news

  • 01:34 PM,Sep 3
    Online Learning
    About the Final Exam more...
Skip Calendar

Calendar

Sun Mon Tue Wed Thu Fri Sat
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31      

Events Key