#include typedef struct rational { int a; int b; } RATIONAL; int gcd(int a, int b){ int r; if ( a < 0 ){ a *= -1; } if ( b < 0 ){ b *= -1; } r = a % b; while ( r != 0 ){ a = b; b = r; r = a % b; } return b; } void reduce(RATIONAL *p){ int c; c = gcd(p->a, p->b); p->a /= c; p->b /= c; } RATIONAL add(RATIONAL x, RATIONAL y){ RATIONAL z; z.a = (x.a * y.b) + (y.a * x.b); z.b = x.b * y.b; reduce(&z); return z; } RATIONAL sub(RATIONAL x, RATIONAL y){ } RATIONAL mul(RATIONAL x, RATIONAL y){ RATIONAL z; z.a = x.a * y.a; z.b = x.b * y.b; reduce(&z); return z; } RATIONAL div(RATIONAL x, RATIONAL y){ } void print_r(RATIONAL x ){ printf("%d/%d", x.a, x.b); } void print_expression(RATIONAL x, RATIONAL y, RATIONAL z, char *op){ print_r(x); printf(" %s ", op); print_r(y); printf(" = "); print_r(z); printf("\n"); } int main(void){ RATIONAL x, y; printf("有理数 x の分子と分母を入力してください:"); scanf("%d %d", &(x.a), &(x.b)); reduce(&x); printf("有理数 y の分子と分母を入力してください:"); scanf("%d %d", &(y.a), &(y.b)); reduce(&y); print_expression(x, y, add(x,y), "+"); print_expression(x, y, sub(x,y), "-"); print_expression(x, y, mul(x,y), "*"); print_expression(x, y, div(x,y), "/"); return 0; }