关于数据结构复数的四则运算的疑问 -求解决解决方法
关于数据结构复数的四则运算的疑问 --求解决
我们老师叫我做的复数四则运算 如若输出的时候是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。
------解决方案--------------------
我们老师叫我做的复数四则运算 如若输出的时候是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; }