//环境 , vc 2010
#include <iostream>
#include <Windows.h>
#include <cmath>
using namespace std;
class integer{ //整数类
};
class fraction:integer{ //整数类的派生类分数类
private:
int above; //分子
int below; //分母
void reduction(); //约分
void makeCommond(fraction&); //通分
public:
fraction(int a=0,int b=1){ //构造函数
above=a;
below=b;
}
~fraction(); //析构函数
fraction add(fraction); //两分数相加
fraction sub(fraction); //本分数减去实参分数
fraction mul(fraction); //两分数相乘
fraction div(fraction); //本分数除以实参分数
void display(); //分数显示`在这里插入代码片`
void input(); //输入分数
int menu();
};
fraction::~fraction(){ //析构函数
};
void fraction::reduction(){ //约分
int comdiv,a,b,temp;
a=abs(above);
b=abs(below);
while(a%b){ //欧几里德法求最大公约数
temp=a;
a=b;
b=temp%b;
}
comdiv=b;
above/=comdiv;
below/=comdiv;
}
void fraction::makeCommond(fraction &frac) //通分
{
int temp;
reduction();
frac.reduction();
above*=frac.below;
frac.above*=below;
temp=below*frac.below;
below=frac.below=temp;
}
fraction fraction::add(fraction frac){ //分数相加
fraction myFraction;
makeCommond(frac); //通分
myFraction.above=above+frac.above;
myFraction.below=below;
myFraction.reduction(); //约分
return myFraction;
}
fraction fraction::sub(fraction frac){ //分数相减
fraction myFraction;
makeCommond(frac); //通分
myFraction.above=above-frac.above;
myFraction.below=below;
myFraction.reduction(); //约分
return myFraction;
}
fraction fraction::mul(fraction frac){ //两分数相乘
fraction myFraction;
myFraction.above=above*frac.above;
myFraction.below=below*frac.below;
myFraction.reduction(); //约分
return myFraction;
}
fraction fraction::div(fraction fr){ //分数相除
fraction myFraction;
myFraction.above=above*fr.below;
myFraction.below=below*fr.above;
myFraction.reduction(); //约分
return myFraction;
}
void fraction::display(){ //结果显示
cout<<above<<"\/"<<below<<endl;
}
void fraction::input(){ //输入分数
cout<<"请输入分数的分子: ";
cin>>above;
//增加异常处理,分母不能为0.
again:
try{
cout<<"请输入分数的分母(不等于零): ";
cin>>below;
if(below==0)
throw below;
}catch(int &d){
cout<<"分母不能为0!"<<endl;
goto again;
}
}
int fraction::menu(){ //菜单函数
int num=0;
cout<<"***1.分数加法运算****"<<endl;
cout<<"***2.分数减法运算****"<<endl;
cout<<"***3.分数乘法运算****"<<endl;
cout<<"***4.分数除法运算****"<<endl;
//添加异常处理,序号必须在1与4之间
again:
try{
cout<<"请输入需运算的序号: "<<endl;
cin>>num;
if(num<1||num>4)
throw num;
}catch(int &d){
cout<<"序号必须在1与4之间!"<<endl;
goto again;
}
return num;
}
int main(void){
int num=0;
fraction frac1,frac2,Fraction;
//调用输入函数输入分数
frac1.input();
frac2.input();
cout<<"2个分数分别为:"<<endl;
//调用显示函数显示分数
frac1.display();
frac2.display();
num=Fraction.menu();
//选择结构判断输入的数
switch(num){
case 1:
cout<<"分数相加值为:"<<endl;
frac1.add(frac2).display();
break;
case 2:
cout<<"分数相减值为:"<<endl;
frac1.sub(frac2).display();
break;
case 3:
cout<<"分数相乘值为:"<<endl;
frac1.mul(frac2).display();
break;
case 4:
cout<<"分数相除值为:"<<endl;
frac1.div(frac2).display();
}
system("pause");
return 0;
}
[c++]实现分数计算器设计
于 2019-04-24 01:05:34 首次发布