|  |   | 
|  | 
| 
 |  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. |