|
|
|
|
|
|
![]() 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. |