有理数をn回足し合わせる関数reductionrの作成方法がわかりません。
forとaddr関数を組み合わせることはわかっているのですが、問題として与えられたcheck5の中身があまり理解できず、どのように作成すれば良いのかわかりません。
#include<stdio.h> #include<stdlib.h> typedef struct { int n, d; // n: \u5206\u5B50, d: \u5206\u6BCD } rational; int gcd(int a, int b) { int i; int min = a; if (a > b) min = b; for (i = min; i > 0; i--){ if ((a % i == 0) && ( b % i == 0)) return i; } return 1; } rational setr(int n, int d) { rational z; if (d == 0) { fprintf(stderr, "Denominator must be nonzero.\n"); exit(1); } z.n = n; z.d = d; return z; } void printr(rational z) { printf("%d/%d\n", z.n, z.d); } rational addr(rational x, rational y) { int n = x.n * y.d + y.n * x.d; int d = x.d * y.d; rational z = setr(n, d); return z; } rational reductionr(int n, rational ary[]) { } void check5(int argc, char *argv[]) { int n = atoi(argv[1]); rational ary[n]; for(int i = 0; i < n; i++) { ary[i] = setr(atoi(argv[2+i*2]), atoi(argv[3+i*2])); } rational z = reductionr(n, ary); printr(z); } int main(int argc, char *argv[]) { check5(argc, argv); return 0; }
回答2件
あなたの回答
tips
プレビュー