建立一个分数类。分数类的数据成员包括分子和分母,操作包括 约分、通分、比较、加、减、乘、除、求倒数、显示和输入代码
时间: 2023-03-28 15:03:50 浏览: 170
设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。
5星 · 资源好评率100%
以下是分数类的代码实现:
```c
#include <stdio.h>
// 分数类
typedef struct {
int numerator; // 分子
int denominator; // 分母
} Fraction;
// 求最大公约数
int gcd(int a, int b) {
if (b == ) {
return a;
}
return gcd(b, a % b);
}
// 约分
void reduce(Fraction *f) {
int g = gcd(f->numerator, f->denominator);
f->numerator /= g;
f->denominator /= g;
}
// 通分
void common(Fraction *f1, Fraction *f2) {
int lcm = f1->denominator * f2->denominator / gcd(f1->denominator, f2->denominator);
f1->numerator *= lcm / f1->denominator;
f1->denominator = lcm;
f2->numerator *= lcm / f2->denominator;
f2->denominator = lcm;
}
// 比较
int compare(Fraction *f1, Fraction *f2) {
common(f1, f2);
if (f1->numerator > f2->numerator) {
return 1;
} else if (f1->numerator < f2->numerator) {
return -1;
} else {
return ;
}
}
// 加
void add(Fraction *f1, Fraction *f2, Fraction *result) {
common(f1, f2);
result->numerator = f1->numerator + f2->numerator;
result->denominator = f1->denominator;
reduce(result);
}
// 减
void subtract(Fraction *f1, Fraction *f2, Fraction *result) {
common(f1, f2);
result->numerator = f1->numerator - f2->numerator;
result->denominator = f1->denominator;
reduce(result);
}
// 乘
void multiply(Fraction *f1, Fraction *f2, Fraction *result) {
result->numerator = f1->numerator * f2->numerator;
result->denominator = f1->denominator * f2->denominator;
reduce(result);
}
// 除
void divide(Fraction *f1, Fraction *f2, Fraction *result) {
result->numerator = f1->numerator * f2->denominator;
result->denominator = f1->denominator * f2->numerator;
reduce(result);
}
// 求倒数
void reciprocal(Fraction *f, Fraction *result) {
result->numerator = f->denominator;
result->denominator = f->numerator;
}
// 显示
void display(Fraction *f) {
printf("%d/%d", f->numerator, f->denominator);
}
// 输入
void input(Fraction *f) {
scanf("%d/%d", &(f->numerator), &(f->denominator));
}
int main() {
Fraction f1, f2, result;
printf("请输入第一个分数:");
input(&f1);
printf("请输入第二个分数:");
input(&f2);
printf("两个分数的和为:");
add(&f1, &f2, &result);
display(&result);
printf("\n");
printf("两个分数的差为:");
subtract(&f1, &f2, &result);
display(&result);
printf("\n");
printf("两个分数的积为:");
multiply(&f1, &f2, &result);
display(&result);
printf("\n");
printf("两个分数的商为:");
divide(&f1, &f2, &result);
display(&result);
printf("\n");
printf("第一个分数的倒数为:");
reciprocal(&f1, &result);
display(&result);
printf("\n");
printf("第二个分数的倒数为:");
reciprocal(&f2, &result);
display(&result);
printf("\n");
return ;
}
```
注意:以上代码仅供参考,可能存在一些问题,需要根据具体情况进行修改和完善。
阅读全文