关于复数 我的结果总是0+0i
/*
复数抽象数据类型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;
}
未更新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.c1 * B.c1 - A.c2 * B.c2;
chengji.c2 = A.c1 * B.c2 + A.c2 * B.c1;
return chengji;
}
int main()
{
struct ADTComplex A, B, sum, chengji;
//~~~~~~~~~~~~~~~没将A和B更新~~~~~~~~~~~~~~~~~
A = creat(A);
B = creat(B);
sum = add(A, B);
chengji = multi(A, B);
output(sum);
output(chengji);
return 0;
}
这个代码建议重新编辑在代码框中
太乱了。。