Instructor

 Fangtian Zhong, email: fangtian.zhong@montana.edu, office hours: Mondays, Wednesdays and Fridays, 10:00am - 10:50am

TAs

 Riley Slater, email: rileymail6@gmail.com, office hours: Tuesdays, 11am -1pm
 Justin Mau, email:jdmau123@gmail.com, office hours: Tuesdays, 3:10pm - 5:10pm

Lab Assistant

 William Cade, email: william.cade1@student.montana.edu, lab hours: 12pm-1:50pm

Course schedule

Date Lecture Topic (notes linked) Textbook Chapter Classwork Due/Quiz Lab Due  
Week1          
Wednesday 01/17 Intro & syllabus / course slack   Classwork 1    
Friday 01/19 Course server; intro Linux and vim; classwork submission setup   Classwork 2    
Week2          
Monday 01/22 Intro to C; more Linux & vim 2.1 Classwork 3    
Wednesday 01/24 Git and GitHub   Classwork 4    
Friday 01/26 More intro to C 2.1-2.6 Practice Quiz (ungraded) Lab 1  
Week3          
Monday 01/29 Functions 3.1-3.5 Classwork 5    
Wednesday 01/31 Functions 3.1-3.5 [Quiz 1]    
Friday 02/02 Logical operators; if and switch statements 4.1-4.8 Classwork 6 Lab 2  
Week4          
Monday 02/05 More logical operators; if and switch statements   Classwork 7    
Wednesday 02/07 Loops 5.1-5.8      
Friday 02/09 Loops 5 Classwork 8 Lab 3  
Week5          
Monday 02/12 Conditional operator; redirection Appendix C-4, C-5 Classwork 9    
Wednesday 02/14 Arrays; 7 [Quiz 2]    
Friday 02/16 Arrays 7 Classwork 10 Lab 4  
Week6          
Monday 02/19 Presidents Day (no classes)        
Wednesday 02/21 Arrays as function arguments; recording 7 Classwork 11    
Friday 02/23 Searching, sorting arrays;recording 7   Lab 5  
Week7          
Monday 02/26 Pointers; file i/o; recording 6 Classwork 12    
Wednesday 02/28 Pointers;recording 6 Classwork 13–note that due date is Friday AoE    
Friday 03/01 More pointers;recording 6 [Quiz 3] Lab 6  
Week8          
Monday 03/04 C type strings;recording 8 Classwork 14    
Wednesday 03/06 C type strings 8 Classwork 15    
Friday 03/08 C type strings;recording 8   Lab 7  
Week9          
Monday 03/11 Spring Break (no classes)        
Wednesday 03/13 Spring Break (no classes)        
Friday 03/15 Spring Break (no classes)        
Week10          
Monday 03/18 Structs;recording   10 Classwork 16  
Wednesday 03/20 Fangtian Gone (quiz and classwork) 10 Quiz 4 and Classwork 17    
Friday 03/22 Structs;recording 10   Lab 8  
Week11          
Monday 03/25 Splitting C program into multiple files;recording   Classwork 18    
Wednesday 03/27 Compilation review + Makefiles;recording   Classwork 19    
Friday 03/29 University Day (no classes)        
Week12          
Monday 04/01 Makefiles;recording     [Mid-course survey]  
Wednesday 04/03 Command line arguments;recording   Classwork 20    
Friday 04/05 Sorting an array of pointers;recording   Classwork 21 Lab 9  
Week13          
Monday 04/08 Pointer arithmetic;recording   Classwork 22    
Wednesday 04/10 Dynamic memory allocation;recording 13 Classwork 23    
Friday 04/12     Quiz5 Lab 10  
Week14          
Monday 04/15 Dynamic data structures (Linked List);recording   Classwork 24    
Wednesday 04/17 Dynamic data structures (Linked List);recording   Classwork 25    
Friday 04/19 help session for Lab 11;recording     Lab 11  
Week15          
Monday 04/22 Dynamic data structures (Dynamic Arrays);recording   Classwork 26    
Wednesday 04/24 Memory profiling with valgrind;recording   Classwork 27    
Friday 04/26     Quiz 6 Lab 12  
Week16          
Monday 04/29 Bit operators; binary and hexadecimal;recording   Classwork 28    
Wednesday 05/01 Bit masking;recording   Classwork 29    
Friday 05/03 Lab 13 help session;final     Lab 13  
Week17          
Wednesday 05/08, 8:00-9:50am Optional final (to replace quiz grade) in lecture classroom        

Catalog description

3 Credits. PREREQUISITE: CSCI 127. Programming knowledge. Introduces imperative programming and the C standard library. Course covers pointers, memory management and structures.

Course Info

This course meets for lectures on Mondays, Wednesdays, and Fridays from 9:00-9:50am in REID Hall 108. The first 30 minutes of lecture will be spent learning new material, and the last 20 minutes will be spent on small programming assignments (or on short quizzes). We will use Slack as the primary method of course communication, and all course information will be posted on this website or on the Slack server; D2L will be used only for grading.

There is an optional lab on Fridays from 10:00 am to 4:00 pm in BARNAR 254 that you may attend to get extra help.

Note that this class is for Computer Science and Computer Engineering majors. If you are not one of those majors, you should take CSCI 109 instead of this course.

Course Resources

Textbook

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.

You can find free PDFs of the textbook online.

Linux server

We have a shared course server for you to develop, compile, and run your C programs on. Details for how to access the server can be found on the lecture 1 page.

Optional open lab and TAs

There is an optional lab on Fridays from 10:00 am to 4:00 pm in BARNAR 254. Note that there is no lab during the first week of classes (Friday, January 19th)! However, after this week, even when no lab is due, there will still be TAs in the lab to help you.

Instructor office hours

My office hours are 10:00am-10:50am on Mondays, Wednesdays and Fridays in the Barnard 352. You can also contact me on Slack to set up a different meeting time, and join the slack by the link, or drop by my office (Barnard 352) if my door is open. You can find office hours for all CS faculty here.

SmartyCats

There is SmartyCats tutoring for this course! Visit their website to find out more. You can also apply to be a SmartyCats tutor yourself for other CS courses you’ve taken, or for this one next semester.

Computer Science Success Center

There are free tutors available in Barnard 259. More information here.

Slack server

All course communication will be through our course Slack server. See D2L announcement for link. Please change your nickname to your full name (first and last). Additionally, I suggest managing your notification settings. You may also need to manage the application notification settings on your device.

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.

Grading

You will be graded on the following:

  • 29 classwork assignments (lowest five dropped): 20%
  • 13 labs (lowest two dropped): 60%
  • 6 in-class quizzes (or replace with final): 20%

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-.

Bonus

There are three ways to earn bonus points in this class.

Catch errors in course materials

If you find an error in any of the course materials (typo, incorrect statement, etc.), post in the #errors-in-course-material channel on Slack. I will decide whether it’s truly an error and not a duplicate. If it is really an error, you get a quarter of a point. Only the first person to post about an error gets the points. You can earn a max of 1 total point toward your 100 for the course (for four errors).

Additional work throughout the semester

Since five classworks and two labs are dropped, your work on dropped assignments may be counted as a bonus. You get:

  • 1 point for a score of 75% or more on any lab beyond your required 11, and
  • 0.1 point for any completed classwork beyond your required 24.

Course survey and evaluation

If 75% or more of the class completes the mid-semester course survey, the whole class gets 1 bonus point. Same goes for the course evaluation.

Late assignment policies

To run a course of this size we cannot accommodate individual requests for extensions on assignments; therefore, we have strict rules for when assignments are due, but have some leeway built in. Please read the bullet points below carefully, respect the policy, and get help early if you are having any problems. We want you to succeed!

  • You are responsible for any announcements about assignments made in class, on Slack, on D2L, and here on the course website.
  • All assignments are due on their due date by the Anywhere on Earth (AoE) timezone, which is 6 hours behind Bozeman (Actually, it’s only 5 hours behind during standard time, but we’ll go with 6 hours behind at all times). This means that the real due date is 6am the following day. If you submit labs and programs within 24 hours of the due date, you get 25% off of whatever score you earn. If you submit within two days of the due date you get 50% off. Otherwise, no points are possible.
  • You can submit as many times as you would like; only your last submission will be graded.
  • Classwork cannot be submitted late.

Missed quiz policy

Note that quizzes are taken in-class. Any conflicts with a quiz must be discussed with me prior to missing the quiz. I follow University policy on makeups, which allows that serious illness or a serious family emergency are valid reasons requiring an accommodation.

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 (unless the assignment explicitly says you can):

  • Share your code with other people.
  • Submit code that you did not write.
  • Use generative AI (e.g., ChatGPT) to search for approaches or ideas to assigned coding problems.
  • Modify someone else’s solution and claim it as your own.
  • Post your own solutions on the internet.
  • Post the course assignments or quizzes on the internet.

Academic misconduct

In line with the MSU student code of conduct, if I or the teaching assistants suspect that you have committed academic misconduct, we will schedule a meeting with you to discuss. If, after the meeting, we believe that you did commit academic misconduct, you will receive a 0 on the assignment and I will submit a report to the Dean of Students. It’s just not worth it to cheat in this course.

Important dates

The last day to drop the course online (with no instructor or advisor approval) is January 30th. The last day to drop without a W grade (instructor or advisor approval required) is Feburary 6th. The last day to drop with a W grade (instructor and advisor approval required) is April 17th. See the full add/drop schedule for more information.

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.

Accommodations

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 the instructor or the course assistants using Slack if you have any questions outside of class time.
  • Be respectful of your classmates, your instructor, and the course assistants.
  • Do your own work.

What I can do:

  • Grade promptly (exact guarantees TBD).
  • Respond to all Slack messages and emails 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.

This syllabus, course lectures and presentations, and any course materials provided throughout this term are protected by U.S. copyright laws. Students enrolled in the course may use them for their own research and educational purposes. However, reproducing, selling or otherwise distributing these materials without written permission of the copyright owner is expressly prohibited, including providing materials to commercial platforms such as Chegg or CourseHero. Doing so may constitute a violation of U.S. copyright law as well as MSU’s Code of Student Conduct.

Instructors are free to use this material in their own courses. Feel free to drop me a line if you do but no need.