我需要编写一个程序,从用户那里获取两个复数并输出它们的区别。复数是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。我怎样才能解决这个问题?
请知道如何克服这些问题。感谢。
答案 0 :(得分:4)
您只需针对这些特殊情况进行show()
方法测试并明确处理它们。
+
)。+
。这没有捷径;只需在其中添加一些if
语句。
(我假设你这样做是出于教育目的,但如果没有,你应该知道complex numbers are part of the C++ standard library。)
答案 1 :(得分:0)
您可以像这样重写show函数
void show() {cout<<"("<<re<<") + ("<<im<<"i"<<")"<<endl;}
(以便显示括号以使结果清晰)
或者你可以这样做,
void show()
{
if (re==0 && im>0)
cout<<re<<" + "<<im<<"i"<<endl;
else if (re==0 && im<0)
cout<<re<<" "<<im<<"i"<<endl;
else if(im==0 && re>0)
cout<<re<<" + "<<im<<"i"<<endl;
else if(im==0 && re<0)
cout<<re<<" + "<<im<<"i"<<endl;
else
cout<<re<<" + "<<im<<"i"<<endl;
}
这样,所有正值都将以前导“+”符号显示,否则将以“ - ”符号显示。祝好运! :)
答案 2 :(得分:0)
在C中,您可以使用+
标志强制+或 - 对数字进行签名。对于流,您需要自己处理这种情况。没有什么比简单的功能更容易了:
这是模板化版本,适用于任何实现&lt;运算符和&lt;&lt;操作者:
template <typename T>
std::string forceSign(T number){
std::string ret;
std::stringstream helper;
ret=(number<0)?'-':((0<number)?'+':'\0');
helper<<number;
helper>>ret;
return ret
}
然后你可以使用:
void show() {cout<<re<<" "<<forceSign(im)<<"i"<<endl;}