-1

私は分数を扱う小さなプログラムを書いています:

struct fraction
{
     int num;
     int den;
};

typedef struct fraction FRAC;

最小公倍数関数を使用して 2 つの分数を加算します (後で単純化することはありません)。

FRAC *add (FRAC a, FRAC b)
{
    int l = lcm(a.den, b.den);
    FRAC *sum;
    sum = malloc(sizeof(FRAC));
    sum->den = l;
    int la = l/a.den;
    int lb = l/b.den;
    sum->num = a.num*la + b.num*lb;
    return sum;
}

の配列が与えられた場合、FRAC次の関数で合計を計算したいと思います。

FRAC* fraction_sum (FRAC *a, unsigned int size)
{
    int i;
    FRAC* sum = malloc(sizeof(FRAC));
    sum->num = 0;
    sum->den = 0;

    for (i = 0; i < size; i++)
    {
        FRAC b = {sum->num, sum->den};
        sum = add(b,a[i]);
    }

    return sum;
}

しかし、この表現は

print(*fraction_sum(fractions, N));

エラーを返します

Floating point exception (core dumped)

何か案は?これを行うよりエレガントな方法はありますか?

4

3 に答える 3

5

あなたはゼロで割っているように見えます。

于 2012-10-17T19:19:15.717 に答える
0

初期化を次のように変更します

   sum->den = 1;
于 2012-10-17T19:23:39.923 に答える
0

あなたはゼロで割っています

関数 add を初めて呼び出すと、パラメーターa のnumdenの両方がゼロに等しくなります。これにより、この式の後半で例外が発生します。

int la = l/a.den;

b.den を 1 に初期化すると、プログラムがクラッシュしなくなります。しかし、それは私が恐れている正しい合計を生成しないかもしれません.

于 2012-10-17T19:56:58.333 に答える