// ²òÅú4.5 frac1.c #include #include typedef struct fraction { int num; int dom; } Fraction; int gcd(int,int); void set_fraction(int, int, Fraction *); void add_fraction(const Fraction *,const Fraction *, Fraction *); void print_fraction(const Fraction *); void copy_fraction(const Fraction *, Fraction *); int gcd(int p, int q) { while (q>0) { int r = p%q; p = q; q = r; } return p; } void set_fraction(int x, int y, Fraction *f) { int d = gcd(x,y); f->num = x/d; f->dom = y/d; } void print_fraction(const Fraction *f) { printf("%12d/%12d", f->num, f->dom); } void add_fraction(const Fraction *a,const Fraction *b, Fraction *c) { int d = gcd(a->dom, b->dom); int x = a->num * b->dom/d + b->num * a->dom/d; int y = a->dom * b->dom/d; set_fraction(x, y, c); } void copy_fraction(const Fraction *a, Fraction *b) { b->num = a->num; b->dom = a->dom; } Fraction fx, fy, fz; void test_fraction() { set_fraction(3, 42, &fx); set_fraction(22, 35, &fy); add_fraction(&fx, &fy, &fz); print_fraction(&fx); printf(" + "); print_fraction(&fy); printf(" = "); print_fraction(&fz); printf("\n"); } int main() { int n; scanf("%d", &n); set_fraction(0,1,&fx); for (int i=1;i<=n;i++) { set_fraction(1, i*i, &fy); add_fraction(&fx,&fy,&fz); copy_fraction(&fz,&fx); printf("%3d:",i); print_fraction(&fx); printf("=%10.8f\n", (double)fx.num/fx.dom ); } return 0; }