基本要求:

        为复数定义一个类。重载输入和输出运算符>>和<<。实现复数的+,-,*,/等运算。输出复数时,应对实部和虚部的各种情况加以讨论。以便能输出2,2+3i,2-3i,5i,-8i,i与-i这样的复数。

        复数的四则运算可以按如下方式进行:

 

  1 #include<iostream>
  2 using namespace std;
  3 #include<windows.h>
  4 
  5 //复数类
  6 class complexnumber
  7 {
  8 private:
  9     float real;
 10     float imag;
 11 public:
 12     friend istream& operator >>(istream& in,complexnumber &temple);//重载输入运算符
 13     friend ostream& operator <<(ostream& out,complexnumber &temple);//重载输出运算符
 14     friend complexnumber operator +(complexnumber t1,complexnumber t2);//重载加法运算符
 15     friend complexnumber operator -(complexnumber t1,complexnumber t2);//重载减法运算符
 16     friend complexnumber operator *(complexnumber t1,complexnumber t2);//重载乘法运算符
 17     friend complexnumber operator /(complexnumber t1,complexnumber t2);//重载除法运算符
 18 };
 19 
 20 //重载输入运算符
 21 istream& operator >>(istream& in,complexnumber &temple)
 22 {
 23     cout<<"实部    虚部"<<endl;
 24     in>>temple.real>>temple.imag;
 25     return in;
 26 }
 27 
 28 //重载输出运算符
 29 ostream& operator <<(ostream& out,complexnumber &temple)
 30 {
 31     if(temple.real==0)
 32     {
 33         if(temple.imag==0)
 34         {
 35             cout<<0<<endl;
 36         }
 37         else if(temple.imag==1)
 38         {
 39             out<<"i"<<endl;
 40         }
 41         else if(temple.imag==-1)
 42         {
 43             out<<"-i"<<endl;
 44         }
 45         else
 46         {
 47             out<<temple.imag<<"i"<<endl;
 48         }
 49     }
 50     else
 51     {
 52         out<<temple.real;
 53         if(temple.imag>0)
 54         {
 55             out<<"+";
 56         }
 57         if(temple.imag!=0)
 58         {
 59             out<<temple.imag<<"i"<<endl;
 60         }
 61     }
 62     return out;
 63 }
 64 
 65 //重载加法运算符
 66 complexnumber operator +(complexnumber t1,complexnumber t2)
 67 {
 68     complexnumber temple;
 69     temple.real=t1.real+t2.real;
 70     temple.imag=t1.imag+t2.imag;
 71     return temple;
 72 }
 73 
 74 //重载减法运算符
 75 complexnumber operator -(complexnumber t1,complexnumber t2)
 76 {
 77     complexnumber temple;
 78     temple.real=t1.real-t2.real;
 79     temple.imag=t1.imag-t2.imag;
 80     return temple;
 81 }
 82 
 83 //重载乘法运算符
 84 complexnumber operator *(complexnumber t1,complexnumber t2)
 85 {
 86     complexnumber temple;
 87     temple.real=(t1.real*t2.real)-(t1.imag*t2.imag);
 88     temple.imag=(t1.imag*t2.real)+(t1.real*t2.imag);
 89     return temple;
 90 }
 91 
 92 //重载除法运算符
 93 complexnumber operator /(complexnumber t1,complexnumber t2)
 94 {
 95     complexnumber temple;
 96     temple.real=((t1.real*t2.real)+(t1.imag*t2.imag))/((t2.real*t2.real)+(t2.imag*t2.imag));
 97     temple.imag=((t1.imag*t2.real)-(t1.real*t2.imag))/((t2.real*t2.real)+(t2.imag*t2.imag));
 98     return temple;
 99 }
100 
101 int main()
102 {
103     system("color f3");
104     int select;
105     complexnumber ob1,ob2,ob;
106     do
107     {
108         cout<<"*******************************"<<endl;//菜单
109         cout<<"*         复数计算器         *"<<endl;
110         cout<<"*******************************"<<endl;
111         cout<<"*1------------------------加法*"<<endl;
112         cout<<"*2------------------------减法*"<<endl;
113         cout<<"*3------------------------乘法*"<<endl;
114         cout<<"*4------------------------除法*"<<endl;
115         cout<<"*0------------------------退出*"<<endl;
116         cout<<"*******************************"<<endl;
117         cout<<"请输入你的选择:";
118         cin>>select;
119         switch(select)
120         {
121             case 1: cout<<endl<<"加法:"<<endl;
122                     cout<<"请输入第一个复数的值:"<<endl;
123                     cin>>ob1;
124                     cout<<"第一个复数为:"<<ob1<<endl;
125                     cout<<"请输入第二个复数的值:"<<endl;
126                     cin>>ob2;
127                     cout<<"第二个复数为:"<<ob2<<endl;
128                     system("pause");
129                     ob=ob1+ob2;
130                     system("cls");
131                     cout<<"第一个复数为:"<<ob1<<endl;
132                     cout<<"第二个复数为:"<<ob2<<endl;
133                     cout<<"两数之和为:"<<ob<<endl;
134                     system("pause");
135                     system("cls");
136                 break;
137             case 2: cout<<endl<<"减法:"<<endl;
138                     cout<<"请输入第一个复数的值:"<<endl;
139                     cin>>ob1;
140                     cout<<"第一个复数为:"<<ob1<<endl;
141                     cout<<"请输入第二个复数的值:"<<endl;
142                     cin>>ob2;
143                     cout<<"第二个复数为:"<<ob2<<endl;
144                     system("pause");
145                     ob=ob1-ob2;
146                     system("cls");
147                     cout<<"第一个复数为:"<<ob1<<endl;
148                     cout<<"第二个复数为:"<<ob2<<endl;
149                     cout<<"两数之差为:"<<ob<<endl;
150                     system("pause");
151                     system("cls");
152                 break;
153             case 3: cout<<endl<<"乘法:"<<endl;
154                     cout<<"请输入第一个复数的值:"<<endl;
155                     cin>>ob1;
156                     cout<<"第一个复数为:"<<ob1<<endl;
157                     cout<<"请输入第二个复数的值:"<<endl;
158                     cin>>ob2;
159                     cout<<"第二个复数为:"<<ob2<<endl;
160                     system("pause");
161                     ob=ob1*ob2;
162                     system("cls");
163                     cout<<"第一个复数为:"<<ob1<<endl;
164                     cout<<"第二个复数为:"<<ob2<<endl;
165                     cout<<"两数之积为:"<<ob<<endl;
166                     system("pause");
167                     system("cls");
168                 break;
169             case 4: cout<<endl<<"除法:"<<endl;
170                     cout<<"请输入第一个复数的值:"<<endl;
171                     cin>>ob1;
172                     cout<<"第一个复数为:"<<ob1<<endl;
173                     cout<<"请输入第二个复数的值:"<<endl;
174                     cin>>ob2;
175                     cout<<"第二个复数为:"<<ob2<<endl;
176                     system("pause");
177                     ob=ob1/ob2;
178                     system("cls");
179                     cout<<"第一个复数为:"<<ob1<<endl;
180                     cout<<"第二个复数为:"<<ob2<<endl;
181                     cout<<"两数之商为:"<<ob<<endl;
182                     system("pause");
183                     system("cls");
184                 break;
185         }
186     }while(select!=0);
187     system("cls");
188     cout<<"欢迎使用!!"<<endl;
189     return 0;
190 }

 

posted on 2013-12-27 03:32  ↗℡.Koen↘  阅读(752)  评论(0编辑  收藏  举报