分數的四則運算及化簡(C語言實現)
阿新 • • 發佈:2018-12-14
下面這個程式使用C語言的結構體實現了分數的加減乘除四則運算,同時將結果最簡化。這裡為了簡化,將輸入值固定了,如果需要根據輸入進行計算,將main函式內的相應部分稍作修改即可。
#include <stdio.h>
struct fraction {
int numerator;
int denominator;
};
// 求解最大公約數
int find_gcd(int n1, int n2);
// 將分數化為最簡形式
struct fraction reduce_fraction(struct fraction f);
// 分數的四則運算
struct fraction add_fractions(struct fraction f1, struct fraction f2);
struct fraction subtract_fractions(struct fraction f1, struct fraction f2);
struct fraction multiply_fractions(struct fraction f1, struct fraction f2);
struct fraction divide_fractions(struct fraction f1, struct fraction f2);
int main(void )
{
struct fraction f = { 21, 3 };
struct fraction f1 = { 8, 64 };
struct fraction f2 = { 9, 711 };
struct fraction reducedf = reduce_fraction(f);
printf("%d/%d reduced to simplest terms: %d/%d\n", f.numerator,
f.denominator, reducedf.numerator, reducedf.denominator);
struct fraction addedf = add_fractions(f1, f2);
printf("%d/%d + %d/%d = %d/%d\n", f1.numerator, f1.denominator,
f2.numerator, f2.denominator, addedf.numerator, addedf.denominator);
struct fraction subtractedf = subtract_fractions(f1, f2);
printf("%d/%d - %d/%d = %d/%d\n", f1.numerator, f1.denominator,
f2.numerator, f2.denominator, subtractedf.numerator,
subtractedf.denominator);
struct fraction multipliedf = multiply_fractions(f1, f2);
printf("%d/%d * %d/%d = %d/%d\n", f1.numerator, f1.denominator,
f2.numerator, f2.denominator, multipliedf.numerator,
multipliedf.denominator);
struct fraction dividedf = divide_fractions(f1, f2);
printf("%d/%d / %d/%d = %d/%d\n", f1.numerator, f1.denominator,
f2.numerator, f2.denominator, dividedf.numerator,
dividedf.denominator);
return 0;
}
int find_gcd(int n1, int n2)
{
int temp;
while (n1 != 0) {
temp = n2 % n1;
n2 = n1;
n1 = temp;
}
return n2;
}
struct fraction reduce_fraction(struct fraction f)
{
int gcd = find_gcd(f.numerator, f.denominator);
f.numerator /= gcd;
f.denominator /= gcd;
return f;
}
struct fraction add_fractions(struct fraction f1, struct fraction f2)
{
f1.numerator *= f2.denominator;
f2.numerator *= f1.denominator;
struct fraction result = {
f1.numerator + f2.numerator,
f1.denominator * f2.denominator
};
result = reduce_fraction(result);
return result;
}
struct fraction subtract_fractions(struct fraction f1, struct fraction f2)
{
f1.numerator *= f2.denominator;
f2.numerator *= f1.denominator;
struct fraction result = {
f1.numerator - f2.numerator,
f1.denominator * f2.denominator
};
result = reduce_fraction(result);
return result;
}
struct fraction multiply_fractions(struct fraction f1, struct fraction f2)
{
struct fraction result = {
f1.numerator * f2.numerator,
f1.denominator * f2.denominator
};
result = reduce_fraction(result);
return result;
}
struct fraction divide_fractions(struct fraction f1, struct fraction f2)
{
struct fraction result = {
f1.numerator * f2.denominator,
f1.denominator * f2.numerator
};
result = reduce_fraction(result);
return result;
}