**Given the following C code:**

\nint numbers[5];\n\n\n

**Which of the following statements regarding arrays are true\n(select all that apply)?**

**Which of the following statements regarding dynamic arrays are\ntrue (select all that apply)?**

**Given the following C code involving a stack:**

\n// Assume we have the operations:\n// push(int *stack, int value) -> Adds value to the top of stack\n// pop(int *stack) -> Removes value at the top of stack and returns it\n// peek(int *stack) -> Returns value at the top of stack\n// empty(int *stack) -> Returns whether or not the stack is empty\n\nint stack[5] = {1, 2, 3};\n\nprintf(\"%d\\n\", peek(stack)); // 1. ____\n\npush(stack, 4);\nprintf(\"%d\\n\", peek(stack)); // 2. ____\n\nprintf(\"%d\\n\", pop(stack)); // 3. ____\nprintf(\"%d\\n\", peek(stack)); // 4. ____\n\npop(stack);\nprintf(\"%d\\n\", pop(stack)); // 5. ____\n\n\n

Fill in the blanks corresponding to trace the output of the\n`printf` statements.

**Given the following C code involving a stack:**

\n// Assume we have the operations:\n// push(int *stack, int value) -> Adds value to the top of stack\n// pop(int *stack) -> Removes value at the top of stack and returns it\n// peek(int *stack) -> Returns value at the top of stack\n// empty(int *stack) -> Returns whether or not the stack is empty\n\nvoid reverse_array(int *array, size_t n) {\n int stack[n];\n\n for (size_t i = 0; !empty(stack); i++)\n for (size_t i = 0; i < n; i++)\n memset(stack, 0, sizeof(int)*n);\n\n push(stack, array[i]);\n array[i] = pop(stack);\n}\n\n\n

The code is suppose to reverse all the elements in `array` (ie.\n`{1, 2, 3}` becomes `{3, 2, 1}`. Unfortunately, the lines of\ncode are scrambled.

Unscramble the following lines of code to implement the\n`reverse_array` function: