读书人

关于数据结构复数的四则运算的疑问 -求

发布时间: 2012-04-17 15:06:33 作者: rapoo

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

[解决办法]

探讨

3楼的这个方法我用了 ,我们老师讲可以简洁些 !!! 用封装 !!我不懂怎么封装!!!

[解决办法]
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;} 

读书人网 >C语言

热点推荐