取名字好难-_- 2022-05-17 20:45 采纳率: 58.3%
浏览 81
已结题

c++:复数的运算符重载

本题考虑对运算符进行重载。分别重载复数运算的+,-,*,/,=(赋值)运算符,以及比较大小的<=(复数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;
}
/* 请在这里填写答案 */

我的答案如下:


#include<math.h>
Complex::Complex(double r,double i)
{
    real=r;
    imag=i;
 } 
Complex Complex::operator+(const Complex &c) const
{
    Complex c1;
    c1.real=real+c.real;
    c1.imag=imag+c.imag;
    return c1;
 }
Complex Complex::operator-(const Complex &c) const
{
    Complex c1;
    c1.real=real-c.real;
    c1.imag=imag-c.imag;
    return c1;
  } 
Complex Complex::operator=(const Complex &c)
{
    Complex c1;
    c1.real=real*c.real;
    c1.imag=imag*c.imag;
    return c1;
  }
Complex Complex::operator/(const Complex &c) const
{
    Complex c1;
    c1.real=(real*c.real+imag*c.imag)/(c.imag*c.imag+c.real*c.real);
    c1.imag=(imag*c.real-real*c.imag)/(c.imag*c.imag+c.real*c.real);
    return c1;
  } 
Complex Complex::operator*(const Complex &c) const
{
    Complex c1;
    c1.real=real*c.real-imag*c.imag;
    c1.imag=real*c.imag+imag*c.real;
    return c1;
  }
ostream& operator<<(ostream& out, const Complex& c)
{
    if(c.imag>0)
        out<<c.real<<"+"<<c.imag<<"i";
    else
        out<<c.real<<"+"<<c.imag;
    return out;        
}

double distance(double r,double i)
{
    return sqrt(pow(r,2)+pow(i,2));
}
bool Complex::operator<=(const Complex &c) const
{
    double a,b;
    a=distance(real,imag);
    b=distance(c.real,c.imag);
    if(a<=b) return true;
    else return false;
 } 
//n个复数,按模从小到达排序
void bubble_sort(Complex D[],int n)
{
    int i,j;
    for(i=1;i<n;i++)
    {
        for(j=0;j<n-i;j++)
        {
            if(!(D[j]<=D[j+1]))
            {
                Complex temp=D[j];
                D[j]=D[j+1];
                D[j+1]=temp;
            }
        }
      } 
}

在输入

6
1 2 3 4

这个例子的时候答案始终不对,输出是错的

img

请问为什么啊?

  • 写回答

3条回答 默认 最新

查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月25日
  • 已采纳回答 5月17日
  • 创建了问题 5月17日

悬赏问题

  • ¥15 为什么eprime输出的数据会有缺失?
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题