注意
复数乘法(a+bi)(c+di)=( ac-bd)+(bc+ad)i;
复数除法(a+bi)/(c+di)=(ac+bd)/(c2+d2) +((bc-ad)/(c2+d2))i;
以及输入0的情况。
#include "stdio.h"
#include "stdlib.h"
typedef struct complex{
float e1;//实部
float e2;//虚部
}complex;
complex initcomplex(float x,float y)
{
complex z1;
z1.e1=x;
z1.e2=y;
return z1;
}
void addcomplex(complex &z,complex z1,complex z2)//sum
{
z.e1=z1.e1+z2.e1;
z.e2=z1.e2+z2.e2;
}
void subcomplex(complex &z,complex z1,complex z2)//subtraction
{
z.e1=z1.e1-z2.e1;
z.e2=z1.e2-z2.e2;
}
void mulcomplex(complex &z,complex z1,complex z2)//multplication
{
z.e1=z1.e1*z2.e1-z1.e2*z2.e2;
z.e2=z1.e2*z2.e1+z2.e2*z1.e1;
}
void divcomplex(complex &z,complex z1,complex z2)//division
{
z.e1=(z1.e1*z2.e1+z1.e2*z2.e2)/(z2.e2*z2.e2+(z2.e1*z2.e1));
z.e2=(z1.e2*z2.e1-z2.e2*z1.e1)/(z2.e2*z2.e2+z2.e1*z2.e1);
}
void outputcomplex(complex z)//out data
{
if(z.e1!=0&&z.e2!=0)
printf("%.2f+%.2fi\n",z.e1,z.e2);
else if(z.e1!=0&&z.e2==0)
printf("%.2f\n",z.e1);
else if(z.e1==0&&z.e2!=0)
printf("%.2fi\n",z.e2);
else if(z.e1==0&&z.e2==0)
printf("%d\n",0);
}
int main()
{
complex z1,z2,z;
float x,y;
int a=0;
printf("请输入第一个复数\n");
scanf("%f%f",&x,&y);
z1=initcomplex(x,y);
outputcomplex(z1);
printf("请输入第二个复数\n");
scanf("%f%f",&x,&y);
z2=initcomplex(x,y);
outputcomplex(z2);
do{
printf("请选择1加法\n 2减法\n 3乘法\n 4除法\n 0退出复数计算器\n");
scanf("%d",&a);
switch (a)
{
case 1:
addcomplex(z,z1,z2);
outputcomplex(z);
break;
case 2:
subcomplex(z,z1,z2);
outputcomplex(z);
break;
case 3:
mulcomplex(z,z1,z2);
outputcomplex(z);
break;
case 4:
divcomplex(z,z1,z2);
outputcomplex(z);
break;
default:
if (a == 0)
{
printf("谢谢使用");
}
else
{
printf("输入的操作有误,请您重新输入");
}
}
}while(a!=0);
return 0;
}