【C++】数据结构:抽象定义复数,并实现复数的加、减、乘、除四则运算
大一���在线学习数据结构,哭唧唧!
步入正题,数据结构的第一个程序就是抽象定义复数,因为我没有学过类和对象,所以只能用最简单的结构体来定义复数。
先来回顾一遍书上知识点
1.复数的抽象定义
2.表示部分
3.实现部分
谢谢是个懒人,直接搬书。
我将数据结构中算法设计简化为“三步走”。
首先定义复数,需要一个实部和虚部。利用结构体来创建对象。
其次对象有了,接下来是寻找对象之间的关系。
最后是对对象的操作。
复数C为复数A和复数B之间的操作转化而来。因为结构体默认是私有成员,所以外部无法访问他的成员。
注:在 add, minus, multiply, divide 函数中,我使用了引用传递和地址传递两种方式来修改结构体参数,并且声明了参数为 const,以防止在函数内修改参数。(最开始我使用值传递,编译器就会报错。)
1.加法操作
这里引用C,A,B,返回的是数。
2.减法操作
这里用的是C,A,B的地址。返回的是一个指针。
3.乘法操作
复数C的实部=实部A*实部B-虚部A*虚部B
复数C的虚部=实部A*虚部B+虚部A*实部B(高中数学知识)
4.除法操作
实部C=(实部A*实部B+虚部A*虚部B)/(2*实部B+2*虚部B)
虚部C=(虚部A*实部B-实部A*虚部B)/(2*实部B+2*虚部B)
所有操作完成构造以后,就能在主函数中测试了。
完整源代码
struct Complex//构建复数的实部和虚部 { float realPart; float imagPart; }; void create(Complex &A, float x, float y)//创建一个复数 { A.realPart = x;//A的实部为x A.imagPart = y;//A的虚部为y } void Assign(Complex* A, float real, float imag)//赋值 { A->realPart = real; A->imagPart = imag; } Complex add(Complex&C, const Complex&A,const Complex&B)//两个复数相加 { C.realPart = A.realPart + B.realPart; C.imagPart = A.imagPart + B.imagPart; return C; } Complex subtraction(Complex* C,const Complex& A,const Complex& B)//两个复数相减 { C->realPart = A.realPart - B.realPart; C->imagPart = A.imagPart - B.imagPart; return *C; } Complex multiply(Complex* C,const Complex& A,const Complex& B)//复数相乘 { C->realPart = A.realPart * B.realPart - A.imagPart*B.imagPart;//(ac-bd) C->imagPart = A.realPart * B.imagPart + A.imagPart * B.realPart;//(bc+ad) return *C; } Complex divide(Complex* C, const Complex& A,const Complex& B)//复数相除 { C->realPart=(A.realPart*B.realPart+A.imagPart*B.imagPart)/(B.realPart*2+B.imagPart*2);// (ac + bd) / (c ^ 2 + d ^ 2) C->imagPart = (A.imagPart * B.realPart - A.realPart * B.imagPart) / (B.realPart * 2 + B.imagPart * 2); //(bc-ad)/(c^2+d^2) return *C; } int main() { //创建两个复数 Complex C1; Complex C2; create(C1, 2, 4); create(C2, 3, 5); cout
The End