[c++]实现分数计算器设计

//环境 , 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;	
}

分别输入2个分数的分子和分母,选择运算方式运算

  • 25
    点赞
  • 130
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值