CSCI 112: Programming With C

Catalog description: C Programming knowledge. Introduces imperative programming and the C standard library. Course covers pointers, memory management and structures. Note: we may introduce some C++ topics as well.

Course format

The course runs May 10 through June 4. Every class day, there will be a lecture summary posted with a list of topics for the day, links to lecture videos, and links to extra resources to help you practice or key ideas that you should make sure you understand. There will also be a classwork assignment posted that you will need to complete before 1:35pm. We will meet synchronously from 11am-1:35pm Mountain Time Mondays through Thursdays (except during the week of May 31, when we will meet on Friday instead of Monday) to work through the classwork together, review any topics that anyone is struggling with, or talk about labs and programs. Because we will have students from different backgrounds, if you are able to complete the classwork on your own and do not have any questions, you are not required to come to the course meeting. However, you are encouraged to come to help your fellow students and learn from the group. There are a lot of different ways to use Linux, vim, git, and to program in C, so you might learn a better way by seeing how someone else does it.

You should call into class from a computer that you can use to access the course server and develop your C programs from. Please let me know ASAP if you need assistance to make this happen and we will find a way to help you.

Course resources


The textbook is optional for this course, but is a good resource for anyone who is interested. Most classwork and lab programming assignments will come from the book, and lectures are based on the content in the book as well.

Problem Solving and Program Design in C, by Jeri R. Hanley & Elliot B. Koffman, Eighth Edition.

I rented it from Amazon for $35 to use on the Kindle App on my iPad. Other options for renting or buying the textbook exist. If anyone finds any particularly good ones, let me know and I’ll put them up here.

Office hours

Because there will be plenty of time for one-on-one help during the entirety of our class period (11am-1:35pm), I am not scheduling regular additional office hours. However, if you would like to meet with me outside of class time to ask a question or work through a problem, you are welcome to send me a message anytime on Slack, and I will get back to you as soon as I am available to answer your question or set up an additional meeting time. This course moves quickly and I encourage you to get help as soon as you need it!


In the past, there have been SmartyCats tutors available for this course. I will update this if we are assigned one.

Slack workspace

We’ll be using Slack for all course communication (except about grades or other sensitive information). It is very important that you join the Slack workspace and check it every day of the course to keep up with announcements and to get help when you need it. There are plenty of videos online that can help you use Slack; most importantly, you should customize your notification settings!

Visualizing your code

You can paste your C code into the tool here and see what executes with every step. Note: I have used this extensively while teaching Python, but this is my first time using it to teach C. If you encounter anything fishy, let me know.

Checking your work

For most labs and programs, you will be required to match the example output. To check that your program is working correctly, you should paste the example output and your output into a tool like diffchecker.

Writing C code on the server

For this course, you will develop all of your programs on our MSU CSCI 112 Linux server. We cover how to use the server in the first lecture; see the videos posted there.

Course outcomes

By the end of the course, students should be able to:

  • Navigate a Linux operating system using the command line.
  • Use vim to edit files.
  • Use git to version control their work.
  • Write code using C syntax.
  • Build computer programs using the C language.
  • Take advantage of major capabilities of the C language, including pointers, dynamic memory allocation and structs.
  • Apply the power of pointers, structs and strings to C programs.
  • Apply the programming knowledge you learned to solve basic real-world problems.

If we have time to cover C++, students will also be able to:

  • Write object oriented code in C++.
  • Build object oriented computer programs using C++.
  • Explain the difference between procedural programming and object oriented programming.


You will be graded on the following:

  • 14 classwork assignments: 14%
  • 6 labs: 5 labs: 36%
  • 3 programs: 2 programs 30%
  • 3 quizzes: 20%

After any curving, your grade will be determined by your total score as follows: 93+: A; 90+: A-; 87+: B+; 83+: B; 80+: B-; 77+: C+; 73+: C; 70+: C-; 67+: D+; 63: D; 60: D-.

Collaboration policy

On all assignments, you may:

  • Share ideas with others.
  • Help others debug their code (or receive help debugging your code from someone else).

You may not:

  • Share your code with other people.
  • Submit code that you did not write.
  • Modify someone else’s solution and claim it as your own.

Diversity statement

Montana State University’s campuses are committed to providing an environment that emphasizes the dignity and worth of every member of its community and that is free from harassment and discrimination based upon race, color, religion, national origin, creed, service in the uniformed services (as defined in state and federal law), veteran’s status, sex, age, political ideas, marital or family status, pregnancy, physical or mental disability, genetic information, gender identity, gender expression, or sexual orientation. Such an environment is necessary to a healthy learning, working, and living atmosphere because discrimination and harassment undermine human dignity and the positive connection among all people at our University. Acts of discrimination, harassment, sexual misconduct, dating violence, domestic violence, stalking, and retaliation will be addressed consistent with this policy.


If you have a documented disability for which you are or may be requesting an accommodation(s), please contact me and the Office of Disability Services as soon as possible.

How to succeed in this class

What you can do:

  • Keep up with the course by attending class, checking Slack, being aware of the course schedule, and doing all assignments on time.
  • Be an active participant in class. This means asking and answering questions in class and on Slack, seeking help when needed, and contacting me via Slack if you have any questions outside of class time.
  • Be respectful of both your classmates and me.
  • Do your own work.

What I can do:

  • Grade and return classwork the day it is due and lab and programs before the next course meeting.
  • Respond to all Slack messages within one business day.
  • Create a course atmosphere conducive to learning by respecting all of my students and being enthusiastic about course material and my role in helping you learn.

Course schedule

DateLecture SummaryClasswork DueLab DueProgram DueQuiz
Monday 5/10Getting Started: Linux, Vim, GitClasswork 1   
Tuesday 5/11C Basics pt. 1Classwork 2   
Wednesday 5/12C Basics pt. 2Classwork 3Lab 1  
Thursday 5/13LoopsClasswork 4   
Friday 5/14    Quiz 1
Saturday 5/15     
Sunday 5/16  Lab 2  
Monday 5/17Input/output file redirection and arraysClasswork 5   
Tuesday 5/18ArraysClasswork 6Lab 3  
Wednesday 5/19Makefiles and more on arraysClasswork 7   
Thursday 5/20Getting reading for program 1Work on program 1   
Friday 5/21   Quiz 2
Saturday 5/22     
Sunday 5/23     
Monday 5/24PointersClasswork 8 Program 1 
Tuesday 5/25Reading from files; stringsClasswork 9   
Wednesday 5/26User-defined types; structsClasswork 10   
Thursday 5/27Examples of developing C programs using pointers, strings, and structs Work on program 2Lab 4  
Friday 5/28office hours with Seraj 10:30-11:30   Quiz 3
Saturday 5/29     
Sunday 5/30     
Memorial Day     
Tuesday 6/1Dynamic memory allocationClasswork 11 Program 2 
Wednesday 6/2RecursionClasswork 12   
Thursday 6/3Intro to C++Classwork 13   
Friday 6/4More intro to C++Classwork 14   
Saturday 6/5  Lab 5  


Thanks to Dr. Mary Ann Cummings for sharing her excellent syllabus for this course with me.