我正在尝试完成使用复数运算的C ++赋值代码。我在操作中使用的逻辑几乎可以,但是我无法按需输出。这肯定是一个逻辑错误,但我只是不明白。
我已经尝试过构造函数,参数化等等,但是我只是不明白。
#include<iostream>
using namespace std;
class complex
{
int r, i;
public:
int Read()
{
cout << "Enter Real part" << endl;
cin >> r;
cout << "Enter Imaginary part" << endl;
cin >> i;
return 0;
}
complex Add(complex A, complex B)
{
complex sum;
sum.r = A.r + B.r;
sum.i = A.i + B.i;
return sum;
}
complex Subtract(complex A, complex B)
{
complex diff;
diff.r = A.r - B.r;
diff.i = A.i - B.i;
return diff;
}
complex Multiply(complex A, complex B)
{
complex prod;
prod.r = A.r*B.r + A.i*B.i*(-1);
prod.i = A.r*B.i + B.r*A.i;
return prod;
}
complex Divide(complex A, complex B)
{
complex c_B; //conjugate of complex number B
c_B.r = B.r;
c_B.i = -B.i;
complex quotient;
complex numerator;
complex denominator;
numerator.Multiply(A, c_B);
denominator.Multiply(B, c_B);
int commonDenom = denominator.r + denominator.i;
quotient.r = numerator.r / commonDenom;
quotient.i = numerator.i / commonDenom;
return quotient;
}
int Display()
{
cout << r << "+" << i << "i" << endl;
return 0;
}
};
int main()
{
complex a, b, c;
cout << "Enter first complex number" << endl;
a.Read();
cout << "Enter second complex number" << endl;
b.Read();
c.Add(a, b);
c.Display();
c.Multiply(a, b);
c.Display();
system("pause");
return 0;
}
the expected output on input of 1+2i and 2+3i should be
3+5i
8+i
but output is
-858993460+-858993460i
-858993460+-858993460i
答案 0 :(得分:1)
看看这段代码:
c.Add(a, b);
c.Display(); // <- Here
需要考虑的事情:您要在此处显示哪个复数?
看看您的Add
函数。请注意,调用c.Add(a, b)
实际上并不将c
设置为等于a
和b
的和。相反,它实际上会忽略c
(查看代码-请注意,您从未读取或写入接收器对象的任何字段),然后产生一个等于a + b
的新复数。因此,当您致电c.Display()
时,并没有打印总和。相反,您将使用c
(它从未初始化其数据成员)并打印其值。
您可以使用几种不同的策略来解决此问题。从根本上讲,我将回顾一下您如何定义Add
以及其他根据复数计算的成员函数。如果这些成员函数不使用接收器对象,则可以考虑使用
使它们成为static
或自由函数,以便它们仅对它们的两个参数进行操作,而不是对两个参数加上隐式的this
参数或
使它们仅使用一个参数,并使用两个复数作为接收器对象和参数。然后,您可以选择是否使这些功能修改接收方或返回新值。
一旦确定了解决上述问题的方式,请返回并查看为增加和打印值而编写的代码。您可能需要引入更多变量,以明确捕获已执行操作的总和,差异等。
希望这会有所帮助!