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

## 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` called `test.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

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[]) {
}

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`?