EXERCISES ON STRUCTURES



 1. What is wrong with the following C declarations?
 
        A.   struct point ( double x, y )
        B.   struct point { double x, double y };
        C.   struct point { double x; double y }
        D.   struct point { double x; double y; };
        E.   struct point { double x; double y; }


 2. What is wrong with the following C declarations?
 
        A.   typedef struct { double x; double y } Point;
        B.   typedef { double x; double y; } Point;
        C.   typedef struct { double x; double y; };
        D.   typedef struct { double x; double y; } Point;


 3. What is the difference among the following three programs?

    (a)   #include <stdio.h>
          struct point { double x; double y; };
          int main(void) {
             struct point test;
             test.x = .25; test.y = .75;
             printf("[%f %f]\n", test.x, test.y);
             return 0;
          }

    (b)   #include <stdio.h>
          typedef struct { double x; double y; } Point;
          int main(void) {
             Point test;
             test.x = .25; test.y = .75;
             printf("[%f %f]\n", test.x, test.y);
             return 0;
          }

    (c)   #include <stdio.h>
          typedef struct { double x; double y; } Point;
          int main(void) {
             Point test = {.25, .75};
             printf("[%f %f]\n", test.x, test.y);
             return 0;
          }


 4. Provide an implementation of a function POINTshow() so that the following
    program is functionally equivalent to the three programs above.

          #include <stdio.h>
          typedef struct { double x; double y; } Point;
          int main(void) {
            Point test = {.25, .75};
            POINTshow(test);
            return 0;
          }

 5. Provide an implementation of a function POINTdist() that computes the
    Euclidean distance between two Points.

 6. Provide an implementation of a function POINTeq() that returns 1 if
    the two points are "equal"; and 0 otherwise.  With floating point
    values it doesn't make much sense to test for exact equality; instead
    check to see if the distance between the points is less than 0.000001.

 7. Define a type Rect for rectangles that are parallel to the axes in a
    Cartesian coordinate system. Represent a rectangle by its lower left
    and upper right endpoints using the Point type above.

 8. Write a function RECTarea() that computes the area of a rectangle. 
 
 9. Write a function that returns 1 if a point falls within a rectangle,
    0 otherwise. Use the Point and Rectangle types above.

10. Write a function that returns 1 if the first rectangle is completely
    contained inside the second rectangle, and 0 otherwise.  Hint: check if
    the lower left and upper right endpoints of the first rectangle fall
    within the second rectangle.

11. Write a program that reads in a list of points (given by their x and
    y coordinates) and determines the pair that is the farthest apart.
    Hint: store them in an array and use the POINTdist() function.