|
|
|
Chapter 9Answers to Selected Exercises2. [was #2] int check(int x, int y, int n) { return (x >= 0 && x <= n - 1 && y >= 0 && y <= n - 1); } 4. [was #4] int day_of_year(int month, int day, int year) { int num_days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int day_count = 0, i; for (i = 1; i < month; i++) day_count += num_days[i-1]; /* adjust for leap years, assuming they are divisible by 4 */ if (year % 4 == 0 && month > 2) day_count++; return day_count + day; } Using the expression year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) 6. [was #6; modified] int digit(int n, int k) { int i; for (i = 1; i < k; i++) n /= 10; return n % 10; }
8. [was #8] (a) and (b) are valid prototypes. (c) is illegal, since it doesn't specify the type of the
parameter. (d) incorrectly specifies that 10. [was #10] (a) int largest(int a[], int n) { int i, max = a[0]; for (i = 1; i < n; i++) if (a[i] > max) max = a[i]; return max; } (b) int average(int a[], int n) { int i, avg = 0; for (i = 0; i < n; i++) avg += a[i]; return avg / n; } (c) int num_positive(int a[], int n) { int i, count = 0; for (i = 0; i < n; i++) if (a[i] > 0) count++; return count; } 15. [was #12; modified] double median(double x, double y, double z) { double result; if (x <= y) if (y <= z) result = y; else if (x <= z) result = z; else result = x; else { if (z <= y) result = y; else if (x <= z) result = x; else result = z; } return result; } 17. [was #14] int fact(int n) { int i, result = 1; for (i = 2; i <= n; i++) result *= i; return result; }
19. [was #16] The following program tests the #include <stdio.h> void pb(int n); int main(void) { int n; printf("Enter a number: "); scanf("%d", &n); printf("Output of pb: "); pb(n); printf("\n"); return 0; } void pb(int n) { if (n != 0) { pb(n / 2); putchar('0' + n % 2); } }
Enter a number: 53 Output of pb: 110101
A trace of
Copyright © 2008, 1996 W. W. Norton & Company, Inc. All rights reserved. |