CSIS 301 Foundations of C Programming


Course Description

An introduction to foundational concepts of low-level computer programming, including control structures, primitive data types, structs, bit fields, functions, memory management, and pointers, as well as standard tools such as preprocessors, compilers, linkers, and debuggers. Students will implement solutions using the C programming language.


Instructor

Brian R. Snider
Office hours: Wood-Mar 223 (see schedule)


Texts

recommended


Resources


Objectives

Students will understand:

Students will gain practical experience designing and implementing solutions in the C programming language, including the use of industry-standard development tools and processes.


Course Organization

This course will be programming intensive. Programming assignments will be carried out in the C programming language. You are assumed to have previous experience with one or more high-level languages (such as Python or Java), and will be expected to acquire the C programming language skills necessary for this course en route, given sufficient instruction each week, as well as diligent application of higher-level concepts to the corresponding lower-level constructs.

The course will include regular homework and/or programming assignments. There will be no credit given for late assignments (without an excused absence)—turn in as much as you can. Unless otherwise specified, no handwritten work will be accepted.

Reading should be completed before the lecture covering the material per the provided schedule. Not all reading material will be covered in the lectures, but you will be responsible for the material on homework and exams. Quizzes over the assigned reading may be given at any time.


Collaboration and Academic Integrity

See the GFU CS/IS/Cyber policies for collaboration and discussion of collaboration and academic integrity. See also the university's policy on the use of generative AI and related tools in an academic setting. Most students would be surprised at how easy it is to detect collaboration or other academic integrity violations such as plagiarism in programming—please do not test us! Remember: you always have willing and legal collaborators in the faculty. We encourage you to ask questions in class, ask for help in the CS lab, use the class mailing list, and visit office hours for assistance.

Unless otherwise specified (e.g., for a group assignment or project), you are expected to do your own work. This also applies to the use of online resources (e.g., solution guides), help forums (e.g., StackOverflow), and generative models (e.g., ChatGPT). Put simply: if you are representing someone (or something) else's work as your own, you are being dishonest. Any suspected incidents of academic integrity violations will be investigated and reported to the Academic Affairs Office as they arise.

Almost all of life is filled with collaboration (i.e., people working together). Yet in our academic system, we artificially limit collaboration. These limits are designed to force you to learn fundamental principles and build specific skills. It is very artificial, and you'll find that collaboration is a valuable skill in the working world. While some of you may be tempted to collaborate too much, others will collaborate too little. When appropriate, it's a good idea to make use of others—the purpose here is to learn. Be sure to make the most of this opportunity but do it earnestly and with integrity.


University Resources

Accessibility and Disability

If you have specific physical, psychiatric, or learning disabilities and require accommodations, please contact Disability & Accessibility Services (DAS) as early as possible so that your learning needs can be appropriately met. For more information, go to georgefox.edu/das or contact das@georgefox.edu.

My desire as a professor is for this course to be welcoming to, accessible to, and usable by everyone, including students who are English-language learners, have a variety of learning styles, have disabilities, or are new to online learning systems. Be sure to let me know immediately if you encounter a required element or resource in the course that is not accessible to you. Also, let me know of changes I can make to the course so that it is more welcoming to, accessible to, or usable by students who take this course in the future.

Academic Resource Center

The Academic Resource Center (ARC) on the Newberg campus provides all undergraduate students with free writing consultation, academic coaching, and learning strategy review (e.g., techniques to improve reading, note-taking, study, time management). The ARC offers in-person appointments; if necessary, Zoom appointments can be arranged by request. The ARC, located on the first floor of the Murdock Library, is open during the academic year from 1:00–9:00 p.m., Monday through Thursday, and 12:00–4:00 p.m. on Friday. To schedule an appointment, click on the TracCloud icon on the Canvas dashboard, go to traccloud.georgefox.edu, call 503-554-2327, email the_arc@georgefox.edu, or stop by the ARC. Visit arc.georgefox.edu for information about ARC Consultants' areas of study, instructions for scheduling an appointment, learning tips, and a list of other tutoring options on campus.

Student Support Network

George Fox University uses a robust referral and support system, Fox360, to learn about students who are experiencing various student success concerns. Students who are referred by a professor, other employee, or fellow student will be contacted by a member of our Student Support Network to explore the student's situation, develop a plan, and connect with relevant campus resources. GFU community members who have a concern about a student's well-being can submit an alert by going to fox360.georgefox.edu. Our goal is to provide 360° care for students as they navigate their college experience. For more information see ssn.georgefox.edu or contact Rick Muthiah, Director of Learning Support Services.


Health and Safety Considerations

Please review the entirety of the university's official COVID-19 web page for the most up-to-date community guidance.


Grading

Grading Scale

The final course grade will be based on:

Graded course activities will be posted to Canvas. Take care to read the specifications carefully and proceed as directed. Failure to pay attention to detail will often result in few to zero points being awarded on a given activity.

Grades will be updated as often as possible; you are encouraged to use the "What-If" functionality to calculate your total grade by entering hypothetical scores for various items.

Note that some graded activities in this course will be submitted via GitLab.


Tentative Schedule

Week 1 · Mon

Course Overview; Toolchain Setup

Week 1 · Wed

Introduction to C; Integrated Development Environment

Reading: pp. xxiii–xxviii, 1–11

Week 1 · Fri

Introduction to Git Version Control; Doxygen

MiscDoxygen

Week 2 · Mon

Objects and Variables; Primitive Types

Reading: pp. 12–22

Week 2 · Wed

Derived Types: Structures and Bit Fields

Reading: pp. 27–28
MiscBit fields

Week 2 · Fri

Derived Types: Unions and Type Definitions

Reading: pp. 26, 28–31

Week 3 · Mon

Derived Types: Pointers

Reading: pp. 23–25

Week 3 · Wed

Serve Dayno classes

Week 3 · Fri

Derived Types: Arrays

Reading: pp. 25–26

Week 4 · Mon

Functions and Scope

Reading: pp. 22–23, 34–35

Week 4 · Wed

Passing Array Types

Reading: pp. 42–44

Week 4 · Fri

Type Qualifiers

Reading: pp. 31–34

Week 5 · Mon

Arithmetic Types: Integers

Reading: pp. 47–59

Week 5 · Wed

Arithmetic Types: Real Numbers and Floating-Point Representation

Reading: pp. 59–64

Week 5 · Fri

Arithmetic Conversion; Pseudo-Random Numbers; Library Functions

Reading: pp. 64–72
Miscrand/srand

Week 6 · Mon

Expressions, Precedence, and Associativity

Reading: pp. 73–80

Week 6 · Wed

Operators

Reading: pp. 80–96

Week 6 · Fri

Control Flow

Reading: pp. 97–113

Week 7 · Mon

Midterm exam review

Week 7 · Wed

Midterm exam

Reading: Ch. 1–5

Week 7 · Fri

Mid-semester break—no classes

Week 8 · Mon

Midterm exam post-mortem

Week 8 · Wed

Memory Management

Reading: pp. 115–127

Week 8 · Fri

Dynamically-Allocated Structures and Arrays

Reading: pp. 127–132

Week 9 · Mon

Array Algorithms

Week 9 · Wed

Characters and Strings

Reading: pp. 137–144, 149–152

Week 9 · Fri

String-Handling Functions

Reading: pp. 152–166

Week 10 · Mon

Standard I/O Streams; Files

Reading: pp. 167–177

Week 10 · Wed

Character and Line I/O

Reading: pp. 177–188

Week 10 · Fri

Binary I/O

Reading: pp. 188–193

Week 11 · Mon

Program Arguments; String–Numeric Conversion

Week 11 · Wed

Compilation Process; Preprocessor Directives

Reading: pp. 195–202

Week 11 · Fri

Preprocessor Macros

Reading: pp. 202–212

Week 12 · Mon

Component-Based Software Engineering

Reading: pp. 213–221

Week 12 · Wed

Program Structure; Refactoring

Reading: pp. 221–227

Week 12 · Fri

Build Systems and Dependencies

MiscMake

Week 13 · Mon

Robust Programming

Reading: pp. 229–241

Week 13 · Wed

Debugging

Reading: pp. 241–245

Week 13 · Fri

Unit Testing

Reading: pp. 245–251
MiscCheck

Week 14 · Mon

Static Analysis and Linting

Reading: pp. 251–252
Misccppcheck, cpplint

Week 14 · Wed

Dynamic Analysis and Profiling

Reading: pp. 252–257
MiscValgrind

Week 14 · Fri

Thanksgiving break—no classes

Week 15 · Mon

C Language Standards; C Standard Library

Reading: pp. 259–265

Week 15 · Wed

Selected Topics

Week 15 · Fri

Final exam review

Week 16 · TBD

Final exam

Reading: Ch. 6–11


This page was last modified on 2025-10-21 at 19:32:30.

Copyright © 2015–2025 George Fox University. All rights reserved.