Jul 27 17:12 1984  6.14struct1.c Page 1


/* demonstration of a structure, 1st version */

struct data
{ char first[20];
  char  last[26];
  double     sal;
};                      /* external definition */
main()                  /* print structure contents */
{ static struct data emp = { "Linda",
                             "Sample",
                              39000.0
                           };   /* declare and init */
  printf("%s %s earns $%.2f per year\n",
                emp.first, emp.last, emp.sal);
}
















































Jul 27 17:12 1984  6.17struct2.c Page 1


/* demonstration of a structure, 2nd version */

#define FSZ 20
#define LSZ 26
#include <stdio.h>
#include "getlinepn.f"  /* does not retain newline */
#include "getdbl.f"
struct
{ char first[FSZ];
  char  last[LSZ];
  double     sal;
} emp;  /* external definition and declaration */
main()  /* populate then print structure */
{ double getdbl();
  printf("input first name: "); getlinepn(emp.first, FSZ);
  printf("input last name: ");  getlinepn(emp.last, LSZ);
  printf("(annual salary) ");   emp.sal = getdbl();
  printf("%s %s earns $%.2f per year\n",
                emp.first, emp.last, emp.sal);
}











































Jul 27 17:12 1984  6.20aos.c Page 1


/* demonstration of an array of structures */

struct data
{ char first[20];
  char  last[26];
  double     sal;
};              /* external definition */
main()          /* find and print last names M - Z */
{ register i;
  static struct data ar[] = { { "Linda", "Sample", 39000.0 },
                              { "Sam", "Next", 37500.0 },
                              { "Larry", "Last", 34900.0 },
                             }; /* declare and init array ar */
  printf("employees with last names M - Z...\n");
  for (i = 0; i < (sizeof(ar) / sizeof(ar[0])); ++i)
    if (ar[i].last[0] >= 'M' && ar[i].last[0] <= 'Z')
        printf("\t%s %s earns $%.2f per year\n",
          ar[i].first, ar[i].last, ar[i].sal);
}












































Jul 27 17:12 1984  6.24cbv.c Page 1


/* passing structures as arguments - by value */

struct data
{ char first[20];
  char  last[26];
  double     sal;
};              /* external definition */
main()          /* test check() */
{ register i;
  double pay = 36000.0;
  static struct data ar[] = { { "Linda", "Sample", 39000.0 },
                              { "Sam", "Next", 37500.0 },
                              { "Larry", "Last", 34900.0 },
                             }; /* declare and init array ar */
  printf("employees earning more than $%.2f per year...\n", pay);
  for (i = 0; i < (sizeof(ar) / sizeof(ar[0])); ++i)
    if (check(ar[i], pay))
        printf("\t%s %s earns $%.2f per year\n",
          ar[i].first, ar[i].last, ar[i].sal);
}
check(str, lim)         /* return 1 if sal >= lim */
struct data str;        /* struct declaration */
double lim;
{ if (str.sal >= lim)
        return (1);
  return (0);
}




































Jul 27 17:12 1984  6.26cbr.c Page 1


/* passing structures as arguments - by reference */

struct data
{ char first[20];
  char  last[26];
  double     sal;
};              /* external definition */
main()          /* test check_p() */
{ register i;
  double pay = 36000.0;
  static struct data ar[] = { { "Linda", "Sample", 39000.0 },
                              { "Sam", "Next", 37500.0 },
                              { "Larry", "Last", 34900.0 },
                             }; /* declare and init array ar */
  printf("employees earning more than $%.2f per year...\n", pay);
  for (i = 0; i < (sizeof(ar) / sizeof(ar[0])); ++i)
    if (check_p(&ar[i], pay))
        printf("\t%s %s earns $%.2f per year\n",
          ar[i].first, ar[i].last, ar[i].sal);
}
check_p(pstr, lim)      /* return 1 if sal >= lim */
struct data *pstr;      /* pointer to struct declaration */
double lim;
{ if (pstr->sal >= lim)
        return (1);
  return (0);
}




































Jul 27 17:12 1984  6.34fields.c Page 1


/* structure with fields */

#define YES 1
#define NO  0
struct
{ char first[20];
  char  last[26];
  double     sal;
  unsigned retire : 1;  /* field width 1 bit */
  unsigned school : 1;  /* field width 1 bit */
} ar[] = { { "Linda", "Sample", 39000.0, NO,  NO },
           { "Sam",   "Next",   37500.0, NO, YES },
           { "Larry", "Last",   34900.0, YES, NO },
         };     /* declare and init external array */
main()  /* find and print active employees;
        /* note if in school */
{ register i;
  printf("active employees...\n");
  for (i = 0; i < (sizeof(ar) / sizeof(ar[0])); ++i)
  { if (!ar[i].retire)
    {   printf("\t%s %s earns $%.2f per year\n",
           ar[i].first, ar[i].last, ar[i].sal);
        if (ar[i].school)
           printf("\t\t(in school)\n");
    }
  }
}




































Aug  7 15:11 1984  6.40unions.c Page 1


union utag
{ char  ca[256];        /* type 1 */
  int       num;        /* type 2 */
};                      /* external definition */
#include <stdio.h>
#include "getline.f"
#include "getint.f"
main(argc, argv)        /* load union, call chk_u() */
int argc;               /*      to test and print  */
char **argv;
{ union utag udemo;     /* union declaration */
  ++argv;               /* point to argv[1]  */
  if (*++*argv != '\0') /* test 2nd char of *argv[1] */
    chk_u(0, &udemo);   /*      if not '\0' fail    */
  switch (*--*argv)     /* test 1st char of *argv[1] */
  { case '1': printf("input line: "); getline(udemo.ca, 256);
              chk_u(**argv, &udemo);
    case '2': udemo.num = getint(); chk_u(**argv, &udemo);
    default:  chk_u(**argv, &udemo);
  }
}
chk_u(utype, pun)       /* test, then print union and exit */
char utype;
union utag *pun;        /* pun is pointer to union */
if(pun -> ca == pun ->num)
     printf("same size");
else printf("different size");
{ switch(utype)
  { case '1': printf("type 1, content...\n\t%s", pun->ca);
              break;
    case '2': printf("type 2, value is %d\n", pun->num);
              break;
    default:  printf("usage: filename { 1 2 }\n");
              exit(1);  /* exit unsuccessfully */
  }
  exit(0);              /* exit successfully */
}
