关于数据结构复数的四则运算的疑问 --求解决
我们老师叫我做的复数四则运算 如若输出的时候是0+0i ,我不知道怎样做才能把输出的变成0。
主函数:
#include <stdio.h>
#include "Complex.h"
#include "ComplexOperation.c"
void main()
{
struct Complex c1,c2,sum;
int real,imag;
//构造复数c1
printf("请输入第一个复数的实部:");
scanf("%d,",&real);
printf("请输入第一个复数的虚部:");
scanf("%d,",&imag);
c1=InitComplex(real,imag);
//构造复数c2
printf("请输入第二个复数的实部:");
scanf("%d,",&real);
printf("请输入第二个复数的虚部:");
scanf("%d,",&imag);
c2=InitComplex(real,imag);
//复数的加法
sum=AddComplex(c1,c2);
printf("复数%d+%di和复数%d+%di的和是:%d+%di\n",c1.real,c1.imag,c2.real,c2.imag,sum.real,sum.imag);
//复数的减法
sum=JianComplex(c1,c2);
printf("复数%d+%di和复数%d+%di的差是:%d+%di\n",c1.real,c1.imag,c2.real,c2.imag,sum.real,sum.imag);
//复数的乘法
sum=MultiplyComplex(c1,c2);
printf("复数%d+%di和复数%d+%di的积是:%d+%di\n",c1.real,c1.imag,c2.real,c2.imag,sum.real,sum.imag);
}
头文件:
struct Complex {
int real;
int imag;
};
操作:
struct Complex InitComplex(int real, int imag)
{
struct Complex t;
t.real=real;
t.imag=imag;
return t;
}
struct Complex AddComplex(struct Complex c1, struct Complex c2)
{
struct Complex t;
t.real=c1.real+c2.real;
t.imag=c1.imag+c2.imag;
return t;
}
struct Complex JianComplex(struct Complex c1, struct Complex c2)
{
struct Complex t;
t.real=c1.real-c2.real;
t.imag=c1.imag-c2.imag;
return t;
}
struct Complex MultiplyComplex(struct Complex c1, struct Complex c2)
{
struct Complex t;
t.real=c1.real*c2.real-c1.imag*c2.imag;
t.imag=c1.real*c2.imag+c2.real*c1.imag;
return t;
}
int GetReal(struct Complex c)
{/*取复数实部 */
return c.real;
}
int GetImag(struct Complex c)
{/*取复数虚部 */
return c.imag;
}
void Print_C(struct Complex c)
{/*复数输出*/
if(GetImag(c)==0.0) printf("%5.2f\n",GetReal(c));
else if(GetReal(c)==0.0) printf("%5.2fi\n",GetImag(c));
else printf("%5.2f+%5.2fi\n",GetReal(c),GetImag(c));
}
/*完成该函数输出复数
void PrintComplex(struct Complex c1, struct Complex c2)
{struct Complex sum;
if(sum.real==0&&sum.imag==0)
printf("复数%d+%di和复数%d+%di的是:0\n",c1.real,c1.imag,c2.real,c2.imag,sum.real,sum.imag);
else
if(sum.real==0)
printf("复数%d+%di和复数%d+%di的和是:%di\n",c1.real,c1.imag,c2.real,c2.imag,sum.real,sum.imag);
else
if(sum.imag==0)
printf("复数%d+%di和复数%d+%di的和是:%d\n",c1.real,c1.imag,c2.real,c2.imag,sum.real,sum.imag);
else
printf("复数%d+%di和复数%d+%di的和是:%d+%di\n",c1.real,c1.imag,c2.real,c2.imag,sum.real,sum.imag);
}
*/
不知道怎么改 ,才能使输出的结果时若是特殊的虚数为0 时输出的只有实部a,而不是a+0i。
[解决办法]
- C/C++ code
#include<iostream>using namespace std;class ComplexNum{private: int real; int imaginary;public: ComplexNum() { this->real=0; this->imaginary=0; } ComplexNum(int real,int imaginary) { this->real=real; this->imaginary=imaginary; } int getReal() { return this->real; } void setReal(int real) { this->real=real; } void setImaginary(int imaginary) { this->imaginary=imaginary; } int getImaginary() { return this->imaginary; } ComplexNum operator+(ComplexNum &x) { ComplexNum y; y.setReal(this->real+x.real); y.setImaginary(this->imaginary+x.imaginary); return y; } ComplexNum operator-(ComplexNum &x) { ComplexNum y; y.setReal(this->real-x.real); y.setImaginary(this->imaginary-x.imaginary); return y; } ComplexNum operator*(ComplexNum &x) { ComplexNum y; y.setReal(this->real*x.real-this->imaginary*x.imaginary); y.setImaginary(this->imaginary*x.real+this->real*x.imaginary); return y; } friend ostream&operator<<(ostream&,ComplexNum &x) { if(x.getImaginary()==0) return cout<<x.getReal(); else if(x.getImaginary()<0) return cout<<x.getReal()<<x.getImaginary()<<"i"; else if(x.getImaginary()>0) return cout<<x.getReal()<<"+"<<x.getImaginary()<<"i"; return cout<<" "; }}; void main() { ComplexNum c1(10,5); ComplexNum c2(3,7); ComplexNum c3(0,0); cout<<"c1+c2="<<c1+c2<<endl; cout<<"c1-c2="<<c1-c2<<endl; cout<<"c1*c2="<<c1*c2<<endl; cout<<"c1*c1-c2*c2+c1*c2="<<c1*c1-c2*c2+c1*c2<<endl; cout<<"c3="<<c3<<endl; }
[解决办法]
先
http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express
右边Visual C++ 2010 Express下面的Select language...下拉选‘简体中文’,再按Install Now按钮
然后再参考
C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\complex
[解决办法]
[解决办法]
- C/C++ code
#include <iostream>using namespace std;struct Complex{ int real; int imag;};void Print(Complex cp){ if (cp.real==0) { if (cp.imag==0) { cout<<0<<endl; } else { cout<<cp.imag<<"i"<<endl; } } else { if (cp.imag==0) { cout<<cp.real<<endl; } else { if (cp.imag<0) { cout<<cp.real<<cp.imag<<"i"<<endl; } else { cout<<cp.real<<"+"<<cp.imag<<"i"<<endl; } } }}Complex Multiply(Complex cp1,Complex cp2){ Complex temp; temp.real=(cp1.real*cp2.real-cp1.imag*cp2.imag); temp.imag=(cp1.real*cp2.imag)+(cp1.imag*cp2.real); return temp;}