请,我需要写一个程序,从用户接受两个复杂的数字,并输出他们的差异。复数是以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时,如果
拜托,我需要一个如何克服这些问题的线索。谢谢。
发布于 2013-04-19 06:00:39
您只需要对这些特殊情况进行show()方法测试,并显式地处理它们。
+)。+。这是没有捷径的;只需在其中放置一些if语句。
(我认为您这样做是为了教育目的,但如果不是,您应该注意到复数是C++标准库的一部分。。)
发布于 2013-04-19 06:10:00
要么您可以像这样重写显示函数
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;
}这样,所有的正值都会用前导“+”符号显示,而负值也会用“-”符号显示。祝你好运!)
发布于 2013-04-19 08:26:12
在C中,您可以使用+标志强制对数字进行+或-签名.对于流,你需要自己处理这个情况。没有什么比做简单的功能更容易了:
下面是模板化的版本,用于实现< operator和<<运算符的任何操作:
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;}https://stackoverflow.com/questions/16099027
复制相似问题