实习题,设计实现抽象数据类型“有理数”。基本操作包括有理数的加法减法乘法除法以及求有理数的分子,分母。
时间: 2024-09-14 17:03:01 浏览: 61
要设计实现一个抽象数据类型“有理数”,首先需要定义有理数的基本表示方式和它的基本操作。有理数可以表示为两个整数的比,即分子和分母的比例。我们通常使用一个类来封装这些数据和操作,让类的使用者不需要关心内部的实现细节。
下面是一个可能的类设计实现的示例:
```java
public class RationalNumber {
// 成员变量
private int numerator; // 分子
private int denominator; // 分母
// 构造函数
public RationalNumber(int numerator, int denominator) {
if (denominator == 0) {
throw new IllegalArgumentException("分母不能为0");
}
this.numerator = numerator;
this.denominator = denominator;
normalize();
}
// 归一化方法,将分数化为最简形式
private void normalize() {
int gcd = gcd(numerator, denominator);
numerator /= gcd;
denominator /= gcd;
if (denominator < 0) { // 如果分母为负数,则同时取分子分母的负值
numerator = -numerator;
denominator = -denominator;
}
}
// 辗转相除法求最大公约数
private int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
// 加法操作
public RationalNumber add(RationalNumber other) {
int newNumerator = this.numerator * other.denominator + this.denominator * other.numerator;
int newDenominator = this.denominator * other.denominator;
return new RationalNumber(newNumerator, newDenominator);
}
// 减法操作
public RationalNumber subtract(RationalNumber other) {
int newNumerator = this.numerator * other.denominator - this.denominator * other.numerator;
int newDenominator = this.denominator * other.denominator;
return new RationalNumber(newNumerator, newDenominator);
}
// 乘法操作
public RationalNumber multiply(RationalNumber other) {
int newNumerator = this.numerator * other.numerator;
int newDenominator = this.denominator * other.denominator;
return new RationalNumber(newNumerator, newDenominator);
}
// 除法操作
public RationalNumber divide(RationalNumber other) {
int newNumerator = this.numerator * other.denominator;
int newDenominator = this.denominator * other.numerator;
return new RationalNumber(newNumerator, newDenominator);
}
// 获取分子的方法
public int getNumerator() {
return numerator;
}
// 获取分母的方法
public int getDenominator() {
return denominator;
}
// 重写toString方法,方便打印有理数
@Override
public String toString() {
return numerator + "/" + denominator;
}
}
```
在上述代码中,我们定义了一个`RationalNumber`类来表示有理数,并实现了基本的加、减、乘、除运算。同时提供了获取分子和分母的方法,以及对分数进行归一化的私有方法。归一化方法是为了确保有理数以最简形式存在。
阅读全文