/* * Program demonstrating use of struct to represent fractions. */ #include #include /* struct representing a fraction */ struct fraction { int numer; int denom; }; /* function declarations -- comments below with definitions */ void init_fraction(struct fraction * f, int numer, int denom); int print_fraction(struct fraction * f); int gcd(int a, int b); void simplify_fraction(struct fraction * f); /* function declarations for add, subtract, multiply, divide go here */ /* main program */ int main(void) { struct fraction f1; struct fraction f2; struct fraction result; int numer_in; int denom_in; printf("enter numerator and denominator for first fraction:\n"); if (scanf("%d %d", &numer_in, &denom_in) != 2) { fprintf(stderr, "values must be numeric\n"); return EXIT_FAILURE; } init_fraction(&f1, numer_in, denom_in); printf("enter numerator and denominator for second fraction:\n"); if (scanf("%d %d", &numer_in, &denom_in) != 2) { fprintf(stderr, "values must be numeric\n"); return EXIT_FAILURE; } init_fraction(&f2, numer_in, denom_in); printf("input fractions:\n"); printf("f1 = "); print_fraction(&f1); printf("\n"); printf("f2 = "); print_fraction(&f2); printf("\n"); add(&f1, &f2, &result); printf("f1 + f2 = "); print_fraction(&result); printf("\n"); subtract(&f1, &f2, &result); printf("f1 - f2 = "); print_fraction(&result); printf("\n"); multiply(&f1, &f2, &result); printf("f1 * f2 = "); print_fraction(&result); printf("\n"); divide(&f1, &f2, &result); printf("f1 / f2 = "); print_fraction(&result); printf("\n"); return EXIT_SUCCESS; } /* * initialize instance of "fraction" structure. */ void init_fraction(struct fraction * f, int numer, int denom) { /* another syntax (*f).numer = numer; (*f).denom = denom; */ f->numer = numer; f->denom = denom; simplify_fraction(f); } /* * "print" instance of "fraction" structure to standard output, in the * form numerator/denominator. * * returns return value from printf (which is usually ignored, but * return for consistency, or just in case caller wants it). */ int print_fraction(struct fraction * f) { return printf("%d/%d", f->numer, f->denom); } /* * find greatest common divisor of two non-negative integers. */ int gcd(int a, int b) { /* euclid's algorithm */ if (b == 0) return a; else return gcd(b, a % b); } /* * "simplify" fraction -- reduce to lowest terms. * (Not implemented.) */ void simplify_fraction(struct fraction * f) { }