大一生在线学习数据结构,哭唧唧!
步入正题,数据结构的第一个程序就是抽象定义复数,因为我没有学过类和对象,所以只能用最简单的结构体来定义复数。
先来回顾一遍书上知识点
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 << "第一个复数为:C1=" << C1.realPart << "+" << C1.imagPart <<"i" << endl;
cout << "第二个复数为:C2=" << C2.realPart << "+" << C2.imagPart << "i" << endl;
//创建一个C3,使C3=C1+C2
Complex C3;
add(C3, C1, C2);
cout << "两个复数的和为:";
cout << "C3=C1+C2=" << C3.realPart << "+" << C3.imagPart << "i" << endl;
//创建一个C4,使C4=C1-C2
Complex C4;
subtraction(&C4, C1, C2);
cout << "两个复数的差为:";
cout << "C4=C1-C2=" << C4.realPart << "+" << "("<<C4.imagPart<<")" << "i" << endl;
//创建一个C5,使C5=C1*C2
Complex C5;
multiply(&C5, C1, C2);
cout << "两个复数的乘积为:";
cout << "C5=C1*C2=" << C5.realPart << "+" << C5.imagPart << "i" << endl;
//创建一个C6,使C6=C1/C2
Complex C6;
divide(&C6, C1, C2);
cout << "两个复数相除为:";
cout << "C6=C1/C2=" << C6.realPart << "+" << C6.imagPart << "i" << endl;
return 0;
}
但是主函数中的数据是我自己填进去的。小伙伴们可以自己修改C1和C2中的数据。其中源代码中有一个赋值的函数,我在主函数中并没有调用。如果要修改数据,就可以使用它。
若有不对,请指正,谢谢!文章来源:https://www.toymoban.com/news/detail-736118.html
学好数据结构是我这学期的痛,太难了!加油努力,最后,鼓励每一个热爱编程的人:勤奋,是一种最简单的人生投资。文章来源地址https://www.toymoban.com/news/detail-736118.html
到了这里,关于【C++】数据结构:抽象定义复数,并实现复数的加、减、乘、除四则运算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!