#include #include struct rational { int a,b; }; struct rational make_rational(int a,int b) { struct rational z; z.a=a; z.b=b; return z; } struct rational add_rational(struct rational a,struct rational b) { struct rational c; c.a=a.a*b.b+a.b*b.a; c.b=a.b*b.b; return c; } struct rational sub_rational(struct rational a,struct rational b) { struct rational c; c.a=a.a*b.b-a.b*b.a; c.b=a.b*b.b; return c; } struct rational mul_rational(struct rational a,struct rational b) { struct rational c; c.a=a.a*b.a; c.b=a.b*b.b; return c; } struct rational div_rational(struct rational a,struct rational b) { struct rational c; c.a=a.a*b.b; c.b=a.b*b.a; return c; } int gcd (int a,int b) { if(b==0) return abs(a); else return gcd(b,a%b); } void print_rational(struct rational a) { int ra_gcd=gcd(a.a,a.b); a.a=a.a/ra_gcd; a.b=a.b/ra_gcd; if(a.a==0) printf("0\n"); else if(abs(a.b)==1) printf("%d\n",a.a/a.b); else printf("%d/%d\n",a.a,a.b); } int main(int argc, char* argv[]) { struct rational a = make_rational(-1, 8); /* a=1/8 */ struct rational b = make_rational(-1, 8); /* b=-1/8 */ print_rational(add_rational(a, b)); print_rational(sub_rational(a, b)); print_rational(mul_rational(a, b)); print_rational(div_rational(a, b)); return 0; system("pause"); }