复数四则运算源代码

#include
#include
typedef struct Complex
{
float real;
float image;
}Complex;
Complex InitComplex(float a,float b) /*给复数的实部和虚部复制,并返回复数。*/
{
Complex c;
c.real=a;
c.image=b;
return c;
}
Complex Add(Complex c1,Complex c2)
{/*两个复数相加。公式:(a+bi)+(c+di)=(a+b)+(c+d)i。*/
Complex sum;
sum.real=c1.real+c2.real ;
sum.image=c1.image+c2.image ;
return sum;
}
Complex Sub(Complex c1,Complex c2)
{/*两个复数相减。公式:(a+bi)-(c+di)=(a-b)+(c-d)i。 */
Complex dif;
dif.real=c1.real-c2.real ;
dif.image=c1.image-c2.image ;
return dif;
}
Complex Mul(Complex c1,Complex c2)
{/*两个复数相乘。公式:(a+bi)*(c+di)=(ac-bd)+(ad+bc)i。 */
Complex product;
product.real=c1.real*c2.real-c1.image*c2.image;
product.image=c1.real*c2.image+c1.image*c2.real;
return product;
}
Complex Div(Complex c1,Complex c2)
{/*两个复数相除,利用分母的共轭复数来通分(i*i=-1)。
公式:(a+bi)/(c+di)=(a+bi)*(c-di)/((c+di)*(c-di))=(a+bi)*(c-di)/(c*c+d*d),其中c+di不等于0。 */
Complex quotient;
quotient.real=0;
quotient.image=0;
if (c2.real<1e-38&&c2.image<1e-38)
{printf("c2 is 0!error!\n");return quotient;}
quotient.real=
(c1.real*c2.real+c1.image*c2.image)/(c2.real*c2.real+c2.image*c2.image);
quotient.image=
(c1.image*c2.real-c1.real*c2.image)/(c2.real*c2.real+c2.image*c2.image);
return quotient;
}
float GetReal(Complex c)
{/*取复数实部 */
return c.real;
}
float GetImag(Complex c)
{/*取复数虚部 */
return c.image;
}
void Print_C(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 main()
{
Complex z1,z2,sum,dif,pro,quo;
float e1,e2;
char sym;
printf("Input the operation symbol(+,-,*,/):");
scanf("%c",&sym);/* ******************提示输入需要进行的四则运算。 */
printf("Input z1 like: 3.0+2.1i or -3.0+-2.1i\nz1=");
scanf("%f+%fi",&e1,&e2);
z1=InitComplex(e1,e2);/* **********提示输入复数z1,并存入变量中。 */
printf("Input z2 like: 3.0+2.1i or -3.0+-2.1i\nz2=");
scanf("%f+%fi",&e1,&e2);
z2=InitComplex(e1,e2);/* ****提示输入复数z2,并存入变量中。 */
switch(sym)
{
case '+': sum=Add(z1,z2);Print_C(sum);break;
case '-': dif=Sub(z1,z2);Print_C(dif);break;
case '*': pro=Mul(z1,z2);Print_C(pro);break;
case '/': quo=Div(z1,z2);Print_C(quo);break;
default: printf("error symbol!!");
/********如果输入了"+、-、*、/"以外的字符,则提示出错。 */
}
}

相关文档
最新文档