建立一个分数类。分数类的数据成员包括分子和分母,操作包括 约分、通分、比较、加、减、乘、除、求倒数、显示和输入。
时间: 2023-03-28 11:03:48 浏览: 130
好的,我可以回答这个问题。建立一个分数类,可以定义两个数据成员:分子和分母。可以定义以下操作:约分、通分、比较、加、减、乘、除、求倒数、显示和输入。其中,约分可以通过求分子和分母的最大公约数来实现;通分可以通过求两个分数的最小公倍数来实现;比较可以通过将两个分数通分后比较分子的大小来实现;加、减、乘、除可以通过将两个分数通分后进行相应的运算来实现;求倒数可以通过将分子和分母交换来实现。显示和输入可以通过重载输出运算符和输入运算符来实现。
相关问题
建立一个分数类。分数类的数据成员包括分子和分母,操作包括 约分、通分、比较、加、减、乘、除、求倒数、显示和输入代码
以下是分数类的代码实现:
```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 ;
}
```
注意:以上代码仅供参考,可能存在一些问题,需要根据具体情况进行修改和完善。
(1)建立一个分数类。分数类的数据成员包括分子和分母,操作包括通分、比较、加、减、乘、除、求倒数、显示和输入。
以下是一个简单的分数类实现,包括了所要求的操作:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
class Fraction {
public:
Fraction(int num = 0, int den = 1) : numerator(num), denominator(den) {}
void normalize() {
int gcd = __gcd(numerator, denominator);
numerator /= gcd;
denominator /= gcd;
}
void common_denominator(Fraction &other) {
int lcm = denominator * other.denominator / __gcd(denominator, other.denominator);
numerator *= lcm / denominator;
other.numerator *= lcm / other.denominator;
denominator = other.denominator = lcm;
}
bool operator==(const Fraction &other) const {
return numerator == other.numerator && denominator == other.denominator;
}
bool operator<(const Fraction &other) const {
return numerator * other.denominator < other.numerator * denominator;
}
Fraction operator+(const Fraction &other) const {
Fraction result = *this;
result.common_denominator((Fraction &) other);
result.numerator += other.numerator;
result.normalize();
return result;
}
Fraction operator-(const Fraction &other) const {
Fraction result = *this;
result.common_denominator((Fraction &) other);
result.numerator -= other.numerator;
result.normalize();
return result;
}
Fraction operator*(const Fraction &other) const {
Fraction result = *this;
result.numerator *= other.numerator;
result.denominator *= other.denominator;
result.normalize();
return result;
}
Fraction operator/(const Fraction &other) const {
Fraction result = *this;
result.numerator *= other.denominator;
result.denominator *= other.numerator;
result.normalize();
return result;
}
Fraction reciprocal() const {
Fraction result(denominator, numerator);
result.normalize();
return result;
}
void display() const {
cout << numerator << "/" << denominator;
}
void input() {
cout << "Enter numerator and denominator: ";
cin >> numerator >> denominator;
normalize();
}
private:
int numerator, denominator;
};
```
这个类里面,我们定义了构造函数,通分函数,归一化函数,比较运算符,加减乘除运算符,求倒数函数,显示函数和输入函数。其中,通分函数用于将两个分数的分母变为最小公倍数,以便进行加减运算。归一化函数用于将分数约分为最简形式。比较运算符用于比较两个分数的大小关系。加减乘除运算符则实现了对应的数学运算。求倒数函数用于求出分数的倒数。显示函数用于将分数以 x/y 的形式输出。输入函数用于从键盘输入分数的值。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)