刚学完第九章,可能代码不是很漂亮,欢迎大家提意见!
建立一个分数类Fraction。分数类的数据成员包括分子和分母。成员函数包括构造函数、
复制构造函数。构造函数要对初始化数据进行必要的检查(分母不能为0)。
将分数显示成“a/b”形式的输出函数。成员函数包括约分、通分、加、减、乘、除、
求倒数、比较大小、显示和输入。完成以上所有成员函数并在主函数中进行检验。
#include<iostream>
using namespace std;
class Fraction
{
private:
int numerator;//分子
int denominator;//分母
public:
Fraction() { numerator = 1; denominator = 1; };
Fraction(int a, int b);
Fraction(Fraction& s) { numerator = s.numerator; denominator = s.denominator; };
~Fraction() {};
void yuefen();
void tongfen(Fraction m);
void add(Fraction m);//加
void subtract(Fraction m);//减
void multiply(Fraction m);//乘
void divide(Fraction m);//除
void reciprocal();//求倒数
void compare(Fraction m);//比较大小
void print();
void input();
};
Fraction::Fraction(int a, int b)
{
numerator = a;
denominator = b;
}
void Fraction::input()
{
cin >> numerator >> denominator;
if (denominator == 0)
{
cout << "分母为0,请重新输入" << endl;
cin >> numerator >> denominator;
}
Fraction m(numerator, denominator);
}
void Fraction::yuefen()
{
int fac;
fac = (numerator > denominator) ? denominator : numerator;
while ((numerator % fac != 0) || (denominator % fac != 0))
fac--;
numerator = numerator / fac;
denominator = denominator / fac;
print();
}
void Fraction::print()
{
cout << "结果为:" << endl;
cout << numerator << "/" << denominator<<endl;
}
void Fraction::tongfen(Fraction m)
{
if (denominator != m.denominator)
{
denominator = denominator * m.denominator;
numerator = numerator * m.denominator;
}
}
void Fraction::add(Fraction m)//加
{
/*int numb,denb, numa,dena;
numa = numerator;
dena = denominator;
numb = m.numerator;
denb = m.denominator;
numerator = numa * denb + numb * dena;
denominator = dena * denb;*/
tongfen(m);//用通分步骤化简
m.numerator = m.numerator * (denominator / m.denominator);
numerator = numerator + m.numerator;
yuefen();
}
void Fraction::subtract(Fraction m)//减
{
/*int numb, denb, numa, dena;
numa = numerator;
dena = denominator;
numb = m.numerator;
denb = m.denominator;
numerator = numa * denb - numb * dena;
denominator = dena * denb;*/
tongfen(m);//用通分步骤化简
m.numerator = m.numerator * (denominator / m.denominator);
numerator = numerator - m.numerator;
yuefen();
}
void Fraction::multiply(Fraction m)//乘
{
int numb, denb, numa, dena;
numa = numerator;
dena = denominator;
numb = m.numerator;
denb = m.denominator;
numerator = numa * numb;
denominator = dena * denb;
//或者直接计算
/*numerator = numerator * m.numerator;
denominator = m.denominator;*/
yuefen();
}
void Fraction::reciprocal()//倒数
{
int numa, dena;
numa = numerator;
dena = denominator;
denominator = numa;
numerator = dena;
}
void Fraction::divide(Fraction m)//除
{
int numb, denb, numa, dena;
m.reciprocal();
numerator = numerator * m.numerator;
denominator = denominator * m.denominator;
yuefen();
}
void Fraction::compare(Fraction m)//比较大小
{
tongfen(m);
m.numerator= m.numerator * (denominator / m.denominator);
if (numerator == m.numerator)
cout << "一样大" << endl;
else if (numerator > m.numerator)
cout << numerator << "/" << denominator << " > " << m.numerator << "/" << denominator<<endl;
else
cout<< numerator << "/" << denominator << " < " << m.numerator << "/" << denominator<<endl;
}
int main()
{
int a, b,cho=1,m;
cout << "请选择要进行的操作:" << endl;
cout << "(1输入 2加 3减 4乘 5除 6约分 7比较大小0 退出)" << endl;
cin >> cho;
Fraction x, y;
while (cho != 0)
{
switch (cho)
{
case 1:
{cout << "请输入分数A的分子,分母" << endl;
x.input();
cout << "请输入分数B的分子,分母" << endl;
y.input();
break;
}
case 2:x.add(y); break;
case 3:x.subtract(y); break;
case 4:x.multiply(y); break;
case 5:x.divide(y); break;
case 6: {
cout << "对A约分按1,对B约分按2" << endl;
cin >> m;
if (m == 1)
x.yuefen();
if (m == 2)
y.yuefen();
break; }
case 7:x.compare(y); break;
}
system("pause");
system("cls");//清屏
cout << "_______________________________________________" << endl;
cout << "请输入要进行的操作" << endl;
cout << "(1输入 2加 3减 4乘 5除 6求倒数 7比较大小 8约分 0 退出)" << endl;
cin >> cho;
}
return 0;
}