c++特殊计算器

代码可能有点长因为本人技术还不太行
一、问题描述:
用面向对象的方法(C++)设计并实现⼀个特殊计算器,具体功能包括:
(1)实现复数的加减乘除功能:
z1=a+bi,z2=c+di是任意两个复数
①和:z1+z2=(a+c)+(b+d)i
②差:z1-z2=(a-c)+(b-d)i
③积:z1z2=(ac-bd)+(bc+ad)i
④商:z1/z2=[(ac+bd)+(bc-ad)i]/(c^2 +d ^2)
(2)实现分数(有理数)的加减乘除、化简、转化成小数的功能:
z1=a/b,a2=c/d是两个任意的分数
①和:z1+z2=(ad+cb)/(bd)
②差:z1-z2=(ad-cb)/(bd)
③积:z1
z2=(ac)/(bd)
④商:z1/z2=(ad)/(bc)
⑤化简(约分)
⑥转化成小数

二、代码实现
(一)复数部分
(1)类声明

class Complex{
	private:
		int image;
		int real;
	public:
		Complex(int real=0,int image=0):real(real),image(image){}
		friend Complex operator + (const Complex &c1, const Complex &c2);
		friend Complex operator - (const Complex &c1, const Complex &c2);
		friend Complex operator * (const Complex &c1, const Complex &c2);
		friend Complex operator / (const Complex &c1, const Complex &c2);
		void disp(){
			cout<<this->real<<"+"<<this->image<<"i"<<endl;
		}
}; 

(2)符号的重载
(这里是使用的方法是友元函数的方法,成员函数的方法在下面分数运算使用)

//友元重载复数+ 
Complex operator + (const Complex &c1, const Complex &c2){
	Complex c11 (0,0);
	c11.real=c1.real+c2.real;
	c11.image=c1.image+c2.image;
	return c11;
}

//友元重载复数- 
Complex operator - (const Complex &c1, const Complex &c2){
	Complex c22 (0,0);
	c22.real=c1.real-c2.real;
	c22.image=c1.image-c2.image;
	return c22;
}

//友元重载复数*
Complex operator * (const Complex &c1, const Complex &c2){
	Complex c33 (0,0);
	c33.real=c1.real*c2.real-c1.image*c2.image;
	c33.image=c1.image*c2.real+c1.real*c2.image;
	return c33;
}

//友元重载复数/
Complex operator / (const Complex &c1, const Complex &c2){
	Complex c44 (0,0);
	c44.real=(c1.real*c2.real+c1.image*c2.image)/(c2.real*c2.real+c2.image*c2.image);
	c44.image=(c1.image*c2.real-c1.real*c2.image)/(c2.real*c2.real+c2.image*c2.image);
	return c44;
}

(二)分数(有理数)部分
(1)类声明
(约分、转化成小数和打印功能在类声明里面直接做了)

class Rational{
	private:
		int denominator;
		int numerator;
	public:
		Rational(int numerator=0,int denominator=0):numerator(numerator),denominator(denominator){}
		Rational operator + (const Rational &r2)const;
		Rational operator - (const Rational &r2)const;
		Rational operator * (const Rational &r2)const;
		Rational operator / (const Rational &r2)const;
		//约分 a/b
		void optimization(Rational rat0){
			int i,max,min,yueshu;
			if(rat0.numerator==rat0.denominator){
				cout<<1<<endl;
			}
			else{
				if(rat0.numerator>rat0.denominator) {max=rat0.numerator;min=rat0.denominator;}
				if(rat0.numerator<rat0.denominator) {max=rat0.denominator;min=rat0.numerator;}
				for(i=1;i<=min;i++){
					if((max%i)==0&&(min%i)==0){
						yueshu=i;
					}
				} 
			cout<<rat0.numerator/yueshu<<"/"<<rat0.denominator/yueshu<<endl;
			}
			
		} 
		
		//转化成小(实)数 
		void real(){
			double t;
			t=static_cast<double>(numerator)/denominator; 
			cout<<setprecision(4)<<t<<endl;
		}
		void print(){
			cout<<"计算结果是:"<<numerator<<"/"<<denominator<<endl;
		}
};

(2)符号重载(成员函数方法)

//成员重载有理数+
Rational Rational::operator + (const Rational & other)const{
	int n=this->numerator*other.denominator+denominator*other.numerator;
	int d=this->denominator*other.denominator;
	return Rational(n,d);
}

//成员重载有理数-
Rational Rational::operator - (const Rational & other)const{
	int n=this->numerator*other.denominator-denominator*other.numerator;
	int d=this->denominator*other.denominator;
	return Rational(n,d);
}

//成员重载有理数*
Rational Rational::operator * (const Rational & other)const{
	int n=this->numerator*other.numerator;
	int d=this->denominator*other.denominator;
	return Rational(n,d);
}

//成员重载有理数/
Rational Rational::operator / (const Rational & other)const{
	int n=this->numerator*other.denominator;
	int d=this->denominator*other.numerator;
	return Rational(n,d);
} 

主函数部分比较简单这里就不讲了,直接定义类的对象和调用函数就好了。
完整代码请到 https://download.csdn.net/download/JJL1307/12594606

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值