|
|
|
Chapter 26Answers to Selected Exercises2. [was #2] void int_printf(const char *format, ...) { va_list ap; const char *p; int digit, i, power, temp; va_start(ap, format); for (p = format; *p != '\0'; p++) { if (*p != '%') { putchar(*p); continue; } if (*++p == 'd') { i = va_arg(ap, int); if (i < 0) { i = -i; putchar('-'); } temp = i; power = 1; while (temp > 9) { temp /= 10; power *= 10; } do { digit = i / power; putchar(digit + '0'); i -= digit * power; power /= 10; } while (i > 0); } } va_end(ap); }
7. [was #4] The statement converts the string that 9. [was #6] double rand_double(void) { return (double) rand() / (RAND_MAX + 1); } Answers to Selected Programming Projects1. [was #8] (a) #include <stdio.h> #include <stdlib.h> int main(void) { int count = 1000; while (count-- > 0) printf("%d", rand() & 1); printf("\n"); return 0; }
(b) For generating numbers in the range 0 to 3. [was #10; modified] #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 1000 int compare_ints(const void *p, const void *q); int main(void) { int a[N], i; clock_t start_clock; for (i = 0; i < N; i++) a[i] = N - i; start_clock = clock(); qsort(a, N, sizeof(a[0]), compare_ints); printf("Time used to sort %d integers: %g sec.\n", N, (clock() - start_clock) / (double) CLOCKS_PER_SEC); return 0; } int compare_ints(const void *p, const void *q) { return *(int *)p - *(int *)q; } 4. [was #12] #include <stdio.h> #include <time.h> int main(void) { struct tm t; int n; /* initialize unused members */ t.tm_sec = t.tm_min = t.tm_hour = 0; t.tm_isdst = -1; printf("Enter month (1-12): "); scanf("%d", &t.tm_mon); t.tm_mon--; printf("Enter day (1-31): "); scanf("%d", &t.tm_mday); printf("Enter year: "); scanf("%d", &t.tm_year); t.tm_year -= 1900; printf("Enter number of days in future: "); scanf("%d", &n); t.tm_mday += n; mktime(&t); printf("\nFuture date: %d/%d/%d\n", t.tm_mon + 1, t.tm_mday, t.tm_year + 1900); return 0; } 6. [was #14] (a) #include <stdio.h> #include <time.h> int main(void) { time_t current = time(NULL); struct tm *ptr; char date_time[37]; ptr = localtime(¤t); strftime(date_time, sizeof(date_time), "%A, %B %d, %Y %I:%M", ptr); printf("%s%c\n", date_time, ptr->tm_hour <= 11 ? 'a' : 'p'); return 0; } (b) #include <stdio.h> #include <time.h> int main(void) { time_t current = time(NULL); char date_time[22]; strftime(date_time, sizeof(date_time), "%a, %d %b %y %H:%M", localtime(¤t)); puts(date_time); return 0; } (c) #include <stdio.h> #include <time.h> int main(void) { time_t current = time(NULL); struct tm *ptr; char date[9], time[12]; ptr = localtime(¤t); strftime(date, sizeof(date), "%m/%d/%y", ptr); strftime(time, sizeof(time), "%I:%M:%S %p", ptr); /* print date and time, suppressing leading zero in hours */ printf("%s %s\n", date, time[0] == '0' ? &time[1] : time); return 0; } Copyright © 2008, 1996 W. W. Norton & Company, Inc. All rights reserved. |