请我需要编写一个程序,该程序需要用户输入两个复数并输出它们的差。复数是a + bi形式的那些数字,其中a和b是分别称为实部和虚部的实数。因此,两个复数a1 + b1i和a2 + b2i之差为(a1-a2)+(b1-b2)i。我写的代码是

#include<iostream>
using namespace std;

class cmp {
    private:
        double re, im;
    public:
        cmp(double a, double b) {re=a; im=b;}
        friend cmp operator+(cmp&, cmp&);
        void show() {cout<<re<<" + "<<im<<"i"<<endl;}
};

cmp operator+(cmp& p, cmp& q) {return cmp (p.re-q.re, p.im-q.im);}

main() {
    double m1, n1, m2, n2;
    cout<<"Give two complex numbers: "; cin>>m1>>n1; cout<<endl;
    cout<<"Give another two complex numbers: "; cin>>m2>>n2; cout<<endl;
    cmp c1(m1,n1);
    cmp c2(m2,n2);
    cmp c3=c1+c2;
    c3.show();

    system("PAUSE");
}

但是,当您查看差异(a1-a2)+(b1-b2)i时,如果
  • b2> b1,则差异中的虚部将为负。例如(10.5 + 2i)-(5 + 4i)= 5.5-2i。但是,该程序无法显示该内容,而是显示5 + -2i。我的程序如何采用通常的数学格式?
  • a1 = a2和/或b1 = b2,程序中显示0不同于数学中的常用格式。例如,数学上,(4 + 7i)-(4 + 5i)=(4-4)+(7-5)i = 2i。但是该程序将显示0 + 2i。我也该如何解决这个问题?

  • 请我提供有关如何克服这些困难的线索。谢谢。

    最佳答案

    您只需要对这些特殊情况进行show()方法测试,并进行明确处理即可。

  • 如果组件之一为零,则仅显示另一个组件(不显示+)。
  • 如果两者均为零,则显示零。
  • 如果虚部为负,则不显示+
  • 正如Jan Hudec所提到的,如果某个东西足够接近零以至于将其打印为零,那么您可能还需要确保将其也视为零。

  • 没有捷径可走。只需在其中放置一些if语句即可。

    (我假设您这样做是出于教育目的,但如果不是,则应注意complex numbers are part of the C++ standard library。)

    关于c++ - 如何使用负值或零值格式化复数输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16099027/

    10-11 18:17