CMSC216 HW01: C Basics
- Due: 11:59pm Sun 07-Sep-2025 via Quiz on Gradescope
- Approximately 0.83% of total grade
CODE DISTRIBUTION: hw01-code.zip
- Download the code distribution
- See further setup instructions below
CHANGELOG: Empty
Table of Contents
1 Rationale
C programming is as close as most programmers get to the bare metal of computer systems and is an essential tool in any programmers toolkit. Completing this HW will cover principles in C of editing, compilation, running, basic data types, functions, and control.
Associated Reading / Preparation
Prior programming experience is presumed: students not familiar with variable types, loops, conditionals, functions, etc. should review them quickly.
Basic familiarity with the Unix command line environment is also presumed. If you have never worked in this type of environment, spend some time getting oriented with staff help during office hours or discussion sections.
Study any good C resource/tutorial particularly those listed on the course web site or the optional text and C programming:
C Programming Language Second Edition by Brian Kernighan and Dennis M. Ritchie, Prentice Hall 1988
Also make sure to consult the Course Syllabus prior to taking the Quiz associated with the HW. Some questions on the Quiz may test knowledge of the course syllabus.
Grading Policy
Credit for this HW is earned by taking the associated HW Quiz which is
linked under Gradescope
. The quiz will ask similar questions as
those that are present in the QUESTIONS.txt
file and those that
complete all answers in QUESTIONS.txt
should have no trouble with
the quiz.
Homework and Quizzes are open resource/open collaboration. You must submit your own work but you may freely discuss HW topics with other members of the class.
See the full policies in the course syllabus.
2 Codepack
The codepack for the HW contains the following files:
File | Description |
---|---|
QUESTIONS.txt |
Questions to answer |
age.c |
C file for Problem 1 |
collatz_main.c |
C file for Problem 2 |
collatz_funcs.c |
C file for Problem 2 |
collatz.h |
C file for Problem 2 |
3 What to Understand
Ensure that you understand
- Basic C syntax for functions, conditions, loops
- How to compile C programs on the command line with
gcc
and some errors that arise due to compilation mistakes - Some inkling about the limits of binary number representations
- A basic understanding of the course Syllabus
4 QUESTIONS.txt
Analyze the files in the provided codepack and answer the questions
given in QUESTIONS.txt
.
_________________ HW 01 QUESTIONS _________________ Write your answers to the questions below directly in this text file to prepare for the associated quiz. Credit for the HW is earned by completing the associated online quiz on Gradescope. ADVISORY: HW is PRACTICE ======================== HWs are practice. To earn credit for doing this HW, you will at some point visit Gradescope and take an online quiz which asks about items studied in the HW; the multiple choice quiz will inform you of correct/incorrect answers making it hard not get full credit. In the spaces below you'll be asked to "write your answer" or "do this and paste what you see." No staff will check these answers except if you want them. Credit for the HW is earned through the online quiz, not writing answers to the questions. Solutions to the HW will also be posted some time after the due date. Knowing that your written answers won't be checked may disincline you to actually write anything down. Just keep in mind that exam questions are similar but more difficult and WILL require you to write an answer. That makes HW a good chance to practice studying code, editing it, running it, and writing about it. Writing down your answers will also make it quick and simple to get full credit on the multiple choice quiz questions for the HW as they are easier to solve than full written answers. Finally, it's a great tactic to write your own answers, then compare then later to the provided solutions as a means to study and identify weak points in your understanding. Office hours or discussion sections are a good time to chat up a staff member if you are perplexed by HW content. Students sometimes approach staff and ask for extra practice problems. They will be asked, "sure, but first show me your written answers to the last few HWs." In 6 semesters, staff have not yet needed to create more practice problems as students asking for them invariably skipped doing the provided HW problems. PROBLEM 1 `age.c' ================= A ~ Examine the source code for `age.c'. Compile it using the following invocation of `gcc' ,---- | gcc age.c `---- This should create the executable `a.out'. Run this program using the invocation. ,---- | ./a.out `---- Perform several runs of the program with the following values and paste your output in the space below. - Enter 16 - Enter 18 - Enter 25 - Enter 44 B ~ Analyze the code for `age.c' and describe a flaw in the conditional structure towards the end that prevents the output: ,---- | You can vote, drink, and be president. | Try all three at once! `---- from being printed. Alter the code to fix this bug so that for ages 35 and larger, the above text is printed. Paste your fixed code for the conditional below and test it by recompiling and showing a demo run. C ~ Attempt to enter some absurd ages for the age computation. - Enter 5000 - Enter -5000 Describe anything strange that seems to be happening based your understanding of how basic arithmetic is supposed to work. If you happen to know WHY this strangeness is happening, describe it below. If not, you will find out soon. D ~ Describe which function is used to print information to the screen. Describe how it seems to work to substitute values into output and what *format specifier* indicates an integer should be substituted. E ~ Describe what function is used to read typed input interactively from a user in the `age.c' program. Describe anything that seems strange about this function or its arguments. We will learn in not long why this bit of strangeness is necessary. PROBLEM 2 Collatz ================= A ~ Examine and compile the code associated with the collatz program. There are three files associated with this program. - `collatz_funcs.c' which defines two utility functions for computing the Collatz sequence - `collatz_main.c' which defines a `main()' function to compute a Collatz sequence - `collatz.h' header file which declares functions in `collatz_funcs.c' so that they are known to `collatz_main.c' To compile the program, use the following invocation of `gcc' ,---- | gcc -o collatz collatz_funcs.c collatz_main.c `---- This should create the program `collatz' which can be run with ,---- | ./collatz `---- Do so and enter inputs - Starting integer 7 - Show output: 1 Paste the output below. B ~ Determine what the "dash-O" option used above for `gcc -o' does. For example, what happens if one runs ,---- | gcc -o GLIPGLOP collatz_funcs.c collatz_main.c `---- instead. You may wish to use the `ls' command to list the files in the current directory. Describe what happens if you omit this option `-o' when compiling as in ,---- | gcc collatz_funcs.c collatz_main.c `---- C ~ Attempt to compile only the file `collatz_main.c' by doing ,---- | gcc -o something collatz_main.c `---- This should result in an error. Show the output of that error and determine why the compilation fails. D ~ Attempt to compile only the file `collatz_funcs.c' by doing ,---- | gcc -o something collatz_funcs.c `---- This should result in an error. Show the output of that error and determine why the compilation fails. Review Course Syllabus ====================== Make sure to review the Course Syllabus to acquaint yourself with course policies such as the following. - The PRIME DIRECTIVE to preserve academic integrity - Fair collaboration with other students - Late submission policies on assignments (projects, HW, quizzes, lab work) - Grading criteria and weighting on exams/assignments