> **1.** The following function calls supposedly write a single new-line character, but some are incorrect. Identify which calls don't work and explain why. b. `printf("%c", "\n");` - This is invalid because the double quotes make `\n` a string, but it's being displayed with the `%c`formatting specifier. c. `printf(%s, '\n');` - This is invalid because it's trying to display a `char` using the string formatting specifier. e. `printf('\n');` - `printf`'s first argument should be a string, not a `char`. h. `putchar("\n");` - `putchar`'s first argument should be a `char`, not a string. i. `puts('\n');` - `puts`'s first argument should be a string, not a `char`. j. `puts("\n");` - `puts` will write a newline after writing a string, so this will write two newlines. --- > **2.** Suppose that `p` has been declared as follows: ```c char *p = "abc"; ``` > Which of the following function calls are legal? Show the output produced by each legal call, and explain why all the others are illegal. ```c // A - Not legal, because putchar accepts a `char`, not a pointer. putchar(p); // B - Legal, output: `a` putchar(*p); // C - Legal, output: `abc` puts(p) // D - Illegal, `puts` accepts a pointer to a null terminated string, not a `char`. ``` --- > **3.** Suppose that we call `scanf` as follows: ```c scanf("%d%s%d", &i, s, &j); ``` > If the user enters `12abc34` `56def78`, what will be the values of `i`, `s`, and `j` after the call? (Assume that `i` and `j` are `int` variables and `s` is an array of characters.) - `i`: `12` - `s`: `"abc34"` - `j`: `56` --- > **7.** Suppose that `str` is an array of three characters. Which one of the following statements is not equivalent to the other three? ```c // A *str = 0; // B str[0] = '\0'; // C strcpy(str, ""); // D strcat(str, ""); ``` (d) is different because it effectively does nothing (concatenates `"abc"` with an empty string). The rest of them make `str` effectively empty by setting the first character to a null byte. --- > **9.** What will be the value of the string `s1` after the following statements have been executed? ```c // Assuming `str` is an empty string with enough space to store everything: strcpy(str, "tire-bouchon"); // "tire-bouchon" strcpy(&str[4], "d-or-wi"); // "tired-or-wir" strcat(str, "red?"); // "tired-or-wired?" ``` Expected output: ```c "tired-or-wired?" ```