本题考虑对运算符进行重载。分别重载复数运算的+,-,*,/,=(赋值)运算符,以及比较大小的<=(复数1的模是否小于等于复数2的模)运算符,其中,比较运算符按复数的模进行比较。测试程序根据输入的mode值分别测试各个函数是否编写正确。
函数接口定义:
在这里描述函数接口:
#include <iostream>
using namespace std;
class Complex {
double real;
double imag;
public:
//构造函数
Complex(double real=0, double imag=0);
//operator+-*/=操作符函数
Complex operator+(const Complex& c) const;
Complex operator-(const Complex& c) const;
Complex operator*(const Complex& c) const;
Complex operator/(const Complex& c) const;
Complex operator=(const Complex& c);
//operator <=操作符函数
bool operator<=(const Complex& c) const;
//友元函数声明以帮助operator<<()函数访问Complex类的私有成员
friend ostream& operator<<(ostream& out, const Complex& c);
};
//n个复数,按模从小到达排序
void bubble_sort(Complex[],int n);
bubble_sort函数按冒泡排序的算法对n个复数按模从小到大的顺序排序。
裁判测试程序样例:
在这里给出函数被调用进行测试的例子:
int main() {
double dReal1, dImag1, dReal2, dImag2;
int mode;
cin>>mode;
cin>>dReal1>>dImag1>>dReal2>>dImag2;
Complex c1(dReal1, dImag1);
Complex c2(dReal2, dImag2);
Complex c[6] = {c1,c2,c1+c2,c1-c2,c1*c2,c1/c2};
switch(mode)
{
case 1: cout << c[0]<<" "<<c[1];break;
case 2: cout << c[2];break;
case 3: cout << c[3];break;
case 4: cout << c[4];break;
case 5: cout << c[5];break;
case 6: bubble_sort(c,6);
for(int i=0;i<6;i++)
cout<<c[i]<<" ";
}
return 0;
}
/* 请在这里填写答案 */
输入样例1:
在这里给出一组输入。例如:
1
1 2 3 4
输出样例1:
在这里给出相应的输出。例如:
1+2i 3+4i
注意:复数的输出,实部和虚部即使为0也输出。
输入样例2:
在这里给出一组输入。例如:
2
4 5 6 7
输出样例2:
在这里给出相应的输出。例如:
10+12i
注意:复数的输出,实部和虚部即使为0也输出。
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <cmath> Complex::Complex(double x,double y){ real=x; imag=y; } Complex Complex::operator+(const Complex& c) const{ return (Complex(real+c.real,imag+c.imag)); } Complex Complex::operator-(const Complex& c) const{ return (Complex(real-c.real,imag-c.imag)); } Complex Complex::operator*(const Complex& c) const{ return (Complex(((real*c.real)-(imag*c.imag)),((real*c.imag)+(imag*c.real)))); } Complex Complex::operator/(const Complex& c) const{ if(real==imag&&c.real==c.imag) return Complex(real/c.real,0); else return (Complex ((real*c.real+imag*c.imag)/(c.real*c.real+c.imag*c.imag),(imag*c.real-real*c.imag)/(c.real*c.real+c.imag*c.imag))); } Complex Complex::operator=(const Complex& c){ return (Complex(real=c.real,imag=c.imag)); } bool Complex::operator<=(const Complex& c) const{ double m,n; m=sqrt(pow(real,2)+pow(imag,2)); n=sqrt(pow(c.real,2)+pow(c.imag,2)); if(m<=n) return true; else return false; } ostream& operator<<(ostream& out, const Complex& c){ out<<c.real<<(c.imag>=0?"+":"")<<c.imag<<"i"; } void bubble_sort(Complex c[],int n){ for(int i=1;i<n;i++){ for(int j=0;j<n-i;j++){ if(c[j+1]<=c[j]){ Complex r=c[j]; c[j]=c[j+1]; c[j+1]=r; } } } }