|
|
|
Chapter 13Answers to Selected Exercises2. [was #2]
(a) Illegal; 4. [was #4] (a) int read_line(char str[], int n) { int ch, i = 0; while ((ch = getchar()) != '\n') if (i == 0 && isspace(ch)) ; /* ignore */ else if (i < n) str[i++] = ch; str[i] = '\0'; return i; } (b) int read_line(char str[], int n) { int ch, i = 0; while (!isspace(ch = getchar())) if (i < n) str[i++] = ch; str[i] = '\0'; return i; } (c) int read_line(char str[], int n) { int ch, i = 0; do { ch = getchar(); if (i < n) str[i++] = ch; } while (ch != '\n'); str[i] = '\0'; return i; } (d) int read_line(char str[], int n) { int ch, i; for (i = 0; i < n; i++) { ch = getchar(); if (ch == '\n') break; str[i] = ch; } str[i] = '\0'; return i; } 6. [was #6] void censor(char s[]) { int i; for (i = 0; s[i] != '\0'; i++) if (s[i] == 'f' && s[i+1] == 'o' && s[i+2] =='o') s[i] = s[i+1] = s[i+2] = 'x'; }
Note that the short-circuit evaluation of
8. [was #10]
10. [was #12] The value of 15. [was #8]
(a) 3 16. [was #16] int count_spaces(const char *s) { int count = 0; while (*s) if (*s++ == ' ') count++; return count; } Answers to Selected Programming Projects1. [was #14] #include <stdio.h> #include <string.h> #define WORD_LEN 20 void read_line(char str[], int n); int main(void) { char smallest_word[WORD_LEN+1], largest_word[WORD_LEN+1], current_word[WORD_LEN+1]; printf("Enter word: "); read_line(current_word, WORD_LEN); strcpy(smallest_word, strcpy(largest_word, current_word)); while (strlen(current_word) != 4) { printf("Enter word: "); read_line(current_word, WORD_LEN); if (strcmp(current_word, smallest_word) < 0) strcpy(smallest_word, current_word); if (strcmp(current_word, largest_word) > 0) strcpy(largest_word, current_word); } printf("\nSmallest word: %s\n", smallest_word); printf("Largest word: %s\n", largest_word); return 0; } void read_line(char str[], int n) { int ch, i = 0; while ((ch = getchar()) != '\n') if (i < n) str[i++] = ch; str[i] = '\0'; } 4. [was #18] #include <stdio.h> int main(int argc, char *argv[]) { int i; for (i = argc - 1; i > 0; i--) printf("%s ", argv[i]); printf("\n"); return 0; } 6. [was #20] #include <ctype.h> #include <stdio.h> #include <string.h> #define NUM_PLANETS 9 int string_equal(const char *s, const char *t); int main(int argc, char *argv[]) { char *planets[] = {"Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto"}; int i, j; for (i = 1; i < argc; i++) { for (j = 0; j < NUM_PLANETS; j++) if (string_equal(argv[i], planets[j])) { printf("%s is planet %d\n", argv[i], j + 1); break; } if (j == NUM_PLANETS) printf("%s is not a planet\n", argv[i]); } return 0; } int string_equal(const char *s, const char *t) { int i; for (i = 0; toupper(s[i]) == toupper(t[i]); i++) if (s[i] == '\0') return 1; return 0; } Copyright © 2008, 1996 W. W. Norton & Company, Inc. All rights reserved. |