Study Guide 1
Code Jams are open book. 40 minutes in lab.
Topics:
-
Programming in C
-
Data types and sizes
-
UNIX commands
-
Function stacks
-
Basic arrays
Write C programs to check your answers. Or you can ask a TA or instructor to give feedback on your responses.
Practice questions
1) What is the minimum size of the following structures?
struct Snack {
char name[32];
int quantity;
float cost;
};
Hint: To check your answers, use the sizeof()
function.
2) Consider navigating directories from the command prompt in UNIX. Suppose you are in your home directory.
-
How would you create a subdirectory with name
foo
? -
How would you see the contents of your
.bashrc
file? -
How would you list the contents of
foo
? -
How can you create a file in the directory
foo
calledtest.c
? -
How can you compile a c program?
3) When Willow runs her program from the command line, she gets the following error? What is happening and how can she fix it?
$ ls
Makefile fortune fortune.c hello hello.c
$ hello
Command 'hello' not found
4) Implement and test a power function (for positive integer exponents only). A call to your function should compute \(base^{exp}\) and might look like:
result = power(base, exp);
5) Implement a function void removeLetter(char* str, char letter)
that removes all occurrences of letter
from str
. Your function should modify the contents of str. Test your function from main
.
6) Implement a function isPalindrome
that returns 1 if a given string is a palindrome and 0 otherwise.
Your function can be iterative or recursive. Test your function from main
.
7) The following program crashes. What is the problem and how can we fix it?
#include <stdio.h>
int main() {
int* value = NULL;
int a = 4;
printf("value is %d\n", *value);
}
8) The following program crashes. What is the problem and how can we fix it?
#include <stdio.h>
#include <string.h>
void initialize(char text[]) {
strcpy(text, "pina collada");
}
int main() {
char str1[5];
initialize(str1);
printf("%s\n", str1);
return 0;
}
9) What is the output of this program?
#include <stdio.h>
int arg_modifier(int x, int *y);
int main() {
int val1, val2, ret;
printf("Enter a value: ");
scanf("%d", &val1);
printf("Enter another value: ");
scanf("%d", &val2);
// pass val1 by value and val2 by pointer:
printf("before call: val1 = %d val2 = %d\n", val1, val2);
ret = arg_modifier(val1, &val2);
printf("after call: val1 = %d val2 = %d ret = %d\n", val1, val2, ret);
return 0;
}
int arg_modifier(int x, int *y) {
printf(" in arg_modifier: x = %d *y = %d\n", x, *y);
*y = *y + x;
x = x + 5;
printf(" leaving arg_modifier: x = %d *y = %d\n", x, *y);
// Draw function stack here
return x;
}
10) Draw the state of the function stack and heap for the program above in arg_modifier
. Assume the
user entered the values 6 and 1. Draw the stack at the point in the execution
right before the return from the arg_modifier function, and consider the
following questions:
-
Where are variables val1 and val2 located on the stack?
-
Where are the parameter values located?
-
What value does each parameter get?
-
What variables are in scope of
arg_modifier
?