/*
复数抽象数据类型ADT的描述
ADT Complex{
数据对象:D={c1,c2|c1,c2∈ FloatSet}
数据关系:R={<c1,c2>,c1是复数的实部,c2是复数的虚部};
基本操作:创建一个复数 creat(a);
输出一个复数 output(a);
求两个复数相加 add(a,b);
求两个复数相乘 multi(a,b)
*/
#include<stdio.h>
struct ADTComplex{
float c1;//复数实部
float c2;//复数虚部
};
struct ADTComplex creat(struct ADTComplex A)//创建一个复数
{
float a,b;
scanf("%f %f",&a,&b);
A.c1=a;A.c2=b;
return A;
}
void output(struct ADTComplex sum) //输出一个复数
{
if(sum.c2<0) printf("%.2f%.2fi\n",sum.c1,sum.c2);
else printf("%.2f+%.2fi\n",sum.c1,sum.c2);
}
struct ADTComplex add(struct ADTComplex A,struct ADTComplex B)//求两个复数相加
{
struct ADTComplex sum;
sum.c1=A.c1+B.c1;
sum.c2=A.c2+B.c2;
return sum;
}
struct ADTComplex multi(struct ADTComplex A,struct ADTComplex B)//求两个复数相乘
{
struct ADTComplex chengji;
chengji.c1=A.c1B.c1-A.c2B.c2 ;
chengji.c2=A.c1B.c2+A.c2B.c1;
return chengji;
}
int main()
{
struct ADTComplex A,B,sum,chengji;
creat(A);
creat(B);
sum=add(A,B);
chengji=multi(A,B);
output(sum);
output(chengji);
return 0;
}