第八週*【任務1】實現複數類中的運算符重載

/*【任務1】實現複數類中的運算符重載
定義一個複數類重載運算符+、-、*、/,使之能用於複數的加減乘除。
(1)方案一:請用類的成員函數完成運算符的重載;*/
#include <iostream>

using namespace std;

class Complex
{
public:
	Complex(){real=0;imag=0;}
	Complex(double r,double i){real=r;imag=i;}
	Complex operator+(Complex &c2);
	Complex operator-(Complex &c2);
	Complex operator*(Complex &c2);
	Complex operator/(Complex &c2);
	void display();
private:
	double real;
	double imag;
};
//下面定義成員函數
Complex  Complex::operator+(Complex &c2)
{
	Complex c ;
	c.real=real+c2.real;
	c.imag=imag+c2.imag;
	return c ;
}
Complex  Complex::operator-(Complex &c2)
{
	Complex c ;
	c.real=real-c2.real;
	c.imag=imag-c2.imag;
	return c ;
}

Complex  Complex::operator*(Complex &c2)
{
	Complex c ;
	c.real=real*c2.real-imag*c2.imag;
	c.imag=imag*c2.real+real*c2.imag;
	return c ;
}

Complex  Complex::operator/(Complex &c2)//:複數除法公式:(a+bi)/(c+di)=(ac+bd)/(c^2+d^2) +(bc-ad)/(c^2+d^2)i  
{
	Complex c ;
	c.real=(real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);
	c.imag=(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);
	return c ;
}
void Complex::display()
{
	cout<<"("<<real<<","<<imag<<")"<<endl;
}

int main()
{
	Complex c1(3,4),c2(5,-10),c3;
	cout<<"c1=";
	c1.display();
	cout<<"c2=";
	c2.display();
	c3=c1+c2;
	cout<<"c1+c2=";
	c3.display();
	c3=c1-c2;
	cout<<"c1-c2=";
	c3.display();
	c3=c1*c2;
	cout<<"c1*c2=";
	c3.display();
	c3=c1/c2;
	cout<<"c1/c2=";
	c3.display();
	system("pause");
	return 0;
}

/*編輯本段複數的四則運算法則:
  若複數z1=a+bi,z2=c+di,其中a,b,c,d∈R,則   z1±z2=(a+bi)±(c+di)=(a±c)+(b±d)i,  
 (a+bi)·(c+di)=(ac-bd)+(bc+ad)i,   (a+bi)÷(c+di)=(ac+bd)/(c^2+d^2) +((bc-ad)/(c^2+d^2))i
  其實兩複數相除,完全可以轉化爲兩複數相乘:(a+bi)÷(c+di)=(a+bi)/(c+di),此時分子分母同時乘以分母
c+di的共軛複數c-di即可。
複數的加法乘法運算律:
  z1+z2=z2+z1   (z1+z2)+z3=z1+(z2+z3)   z1z2=z2z1   z1(z2z3)=(z1z2)z3   z1(z2+z3)=z1z2+z1z3
虛數單位i的乘方:
  i^(4n+1)=i,i^(4n+2)=-1,i^(4n+3)=-i,i^4n=1(其中n∈Z)   複數的加法法則 複數的加法按照以下規定的法則
進行:設z1=a+bi,z2=c+di是任意兩個複數,   則它們的和是 (a+bi)+(c+di)=(a+c)+(b+d)i.   兩個複數的和依然
是複數,它的實部是原來兩個複數實部的和,它的虛部是原來兩個虛部的和。   複數的加法滿足交換律和結合律,  
 即對任意複數z1,z2,z3,有: z1+z2=z2+z1; (z1+z2)+z3=z1+(z2+z3).
編輯本段複數的乘法法則
  規定複數的乘法按照以下的法則進行:   設z1=a+bi,z2=c+di(a、b、c、d∈R)是任意兩個複數,那麼它們的積
(a+bi)(c+di)=(ac-bd)+(bc+ad)i.   其實就是把兩個複數相乘,類似兩個多項式相乘,在所得的結果中把i2換成-1
,並且把實部與虛部分別合併.兩個複數的積仍然是一個複數.
編輯本段複數的除法法則
  複數除法定義:滿足(c+di)(x+yi)=(a+bi)的複數x+yi(x,y∈R)叫複數a+bi除以複數c+di的商   運算方法:可以
把除法換算成乘法做,在分子分母同時乘上分母的共軛. 所謂共軛你可以理解爲加減號的變換,互爲共軛的兩個複數相乘
是個實常數.   除法運算規則:   ①設複數a+bi(a,b∈R),除以c+di(c,d∈R),其商爲x+yi(x,y∈R),   即
(a+bi)÷(c+di)=x+yi   ∵(x+yi)(c+di)=(cx-dy)+(dx+cy)i.   ∴(cx-dy)+(dx+cy)i=a+bi.   由複數相等定
義可知 cx-dy=a dx+cy=b   解這個方程組,得 x=(ac+bd)/(c^2+d^2) y=(bc-ad)/(c^2+d^2)   於是有:(a+bi)/(c+di)
=(ac+bd)/(c^2+d^2) +(bc-ad)/(c^2+d^2)i   ②利用(c+di)(c-di)=c^2+d^2.於是將 的分母有理化得:   原式= 
c^2-cdi+cdi-d^2×i^2   =c^2+d^2   ∴(a+bi)÷(c+di)= (ac+bd)/(c^2+d^2) +(bc-ad)/(c^2+d^2)i   點評:
①是常規方法,②是利用初中我們學習的化簡無理分式時,都是採用的分母有理化思想方法,而複數c+di與複數c-di
,相當於我們初中學習的 的對偶式 ,它們之積爲1是有理數,而(c+di)·(c-di)=c2+d2是正實數.所以可以分母實數
化. 把這種方法叫做分母實數化法*/


 

 

 

 

感言:貌似複數的計算公式給忘了啊,C++和數學真是密切啊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章