题目
采用C/C++如何实现复数抽象数据类型Complex?提交源代码和报告,报告内描述算法流程(可以用伪代码、流程图或者自然语言描述)。请注意文件命名。
过程
定义结构体
typedef struct Complex
{
double e1; // 实部
double e2; // 虚部
} Complex;
成员包含一个实部和虚部
类型为双精度浮点型
Complex* AssignComplex(Complex* z, double v1, double v2);//构造复数Z
z = new Complex;
z->e1 = v1;
z->e2 = v2;
return z;
构造复数Z,
使Z的实部e1为v1,虚部为v2
void DestroyComplex(Complex* z);//销毁复数Z
delete z;
销毁复数Z
double GetReal(Complex z, double* real);//返回复数的实部
*real = z.e1;
return *real;
将Z的实部赋值给real
并返回real
double GetImag(Complex z, double* Imag);//返回复数的虚部
*Imag = z.e2;
return *Imag;
将Z的虚部赋值给Imag
并返回Imag
Complex Add(Complex z1, Complex z2, Complex* sum);//返回两个复数和
sum->e1 = z1.e1 + z2.e1;
sum->e2 = z1.e2 + z2.e2;
return *sum;
将两个复数实部相加,虚部相加
得到另一个复数的实部、虚部
返回该复数
代码
#include<bits/stdc++.h>
using namespace std;
typedef struct Complex
{
double e1; // 实部
double e2; // 虚部
}Complex;
// 函数声明
Complex* AssignComplex(Complex* z, double v1, double v2);
void DestroyComplex(Complex* z);
double GetReal(Complex z, double* real);
double GetImag(Complex z, double* Imag);
Complex Add(Complex z1, Complex z2, Complex* sum);
int main(void)
{
double v1 = 2.0, v2 = 3.0;
double v3 = 5.0, v4 = 8.5;
Complex* pc1=NULL ,*pc2=NULL ;
pc1 = AssignComplex(pc1, v1, v2);
pc2 = AssignComplex(pc2, v3, v4);
double real, imag;
printf("pc1: 实部为:%.3f, 虚部为:%.3f\n", GetReal(*pc1, &real), GetImag(*pc1, &imag));
printf("pc2: 实部为:%.3f, 虚部为:%.3f\n", GetReal(*pc2, &real), GetImag(*pc2, &imag));
Complex sum = Add(*pc1, *pc2, &sum);
printf("SUM: 实部为:%.3f, 虚部为:%.3f\n", sum.e1, sum.e2);
return 0;
}
Complex* AssignComplex(Complex* z, double v1, double v2)
{
z = new Complex;
z->e1 = v1;
z->e2 = v2;
return z;
}
void DestroyComplex(Complex* z)
{
delete z;
}
double GetReal(Complex z, double* real)
{
*real = z.e1;
return *real;
}
double GetImag(Complex z, double* Imag)
{
*Imag = z.e2;
return *Imag;
}
Complex Add(Complex z1, Complex z2, Complex* sum)
{
sum->e1 = z1.e1 + z2.e1;
sum->e2 = z1.e2 + z2.e2;
return *sum;
}