数据结构之复数的四则运算

来源:互联网 发布:mac 修改系统版本号 编辑:程序博客网 时间:2024/05/16 06:55
#include <stdio.h>
#include <stdlib.h>
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 a1,Complex a2)
{
Complex sum;
sum.real=a1.real+a2.real;
sum.image=a1.image+a2.image;
return sum;
}//加法:(a+bi)+(c+di)=(a+b)+(c+d)i
Complex Sub(Complex a1,Complex a2)
{
Complex dif;
dif.real=a1.real-a2.real;
dif.image=a1.image-a2.image;
return dif;
}//减法
Complex Mul(Complex a1,Complex a2)
{
Complex pro;
pro.real=a1.real*a2.real-a1.image*a2.image;
pro.image=a1.real*a2.image+a1.image*a2.real;
return pro;
}//乘法(a+bi)*(c+di)=(ac-bd)+(ad+bc)i
Complex Div(Complex a1,Complex a2)
{
Complex quo;
quo.real=0;
quo.image=0;
if (a2.real<1e-38&&a2.image<1e-38)
{
printf("a2 is 0!ERROR\n");
return quo;
}
quo.real=(a1.real*a2.real+a1.image*a2.image)/(a2.real*a2.real+a2.image*a2.image);
quo.image=(a2.real*a1.image-a1.real*a2.image)/(a2.real*a2.real+a2.image*a2.image);
return quo;
}//除法(a+bi)/(c+di)=(a+bi)*(c-di)/((c+di)*(c-di))=(a+bi)*(c-di)/(c*c+d*d)


float GetReal(Complex a)
{
return a.real;
}
float GetImage(Complex b)
{
return b.image;
}
void Print(Complex c)
{
if(GetReal(c)==0.0)
printf("%.2f\n",GetImage(c));
else if(GetImage(c)==0.0)
printf("%.2f\n",GetReal(c));
else
printf("%.2f+%.2fi\n",GetReal(c),GetReal(c));
}
void main()
{
Complex a,b,sum,dif,pro,quo;
float m,n;
int i;
char s;
for(i=0;;i++)
{
printf("请输入您所要进行的四则运算(+,-,*,/):");
scanf("%c",&s);
printf("请以a+bi形式输入两个数:");
scanf("%f+%fi",&m,&n);
a=InitComplex(m,n);
printf("请以c+di形式输入两个数:");
scanf("%f+%fi",&m,&n);
b=InitComplex(m,n);
switch(s)
{
case '+': sum=Add(a,b);Print(sum);break;    
case '-': dif=Sub(a,b);Print(dif);break;  
case '*': pro=Mul(a,b);Print(pro);break;    
case '/': quo=Div(a,b);Print(quo);break;
default:printf("有误,请重新输入!");
}
}

}


花了j时间写这个,新手上路,真不容易 。。还好有一些参照。嘿嘿