8.8 案例:复数类的设计

设计一个复数类,首先我们来看看什么是复数。
我们把形如a+bi(a,b均为实数)的数称为复数,其中a称为实部,b称为虚部,i称为虚数单位。i的平方等于-1。
当虚部等于零时,这个复数可以视为实数;当z的虚部不等于零时,实部等于零时,常称z为纯虚数。
复数是由意大利米兰学者卡当在十六世纪首次引入,经过达朗贝尔、棣莫弗、欧拉、高斯等人的工作,此概念逐渐为数学家所接受。
复数的四则运算规定为:
加法法则: (a+bi)+(c+di)=(a+c)+(b+d)i
减法法则: (a+bi)-(c+di)=(a-c)+(b-d)i
乘法法则: (a+bi)·(c+di)=(ac-bd)+(bc+ad)i
除法法则: (a+bi)/(c+di)=[(ac+bd)/(c²+d²)]+[(bc-ad)/(c²+d²)]i
复数的模:实部的平方加上虚部的平方,再开根号

练习题

  • 按照要求设计Complexx类,每一道题都是在上一题的基础上增加方法,例如第X题完成的代码是AABB,那么第X+1题的代码就在AABB的基础上增加方法。不要删除上一题已完成的方法。
    1.定义复数类Complexx,含有两个参数x和y,分别代表实部和虚部(x是实部) (10分) [编程]
    2.添加一个构造函数,接受两个参数,分别设置x和y的值 (10分) [编程]
    注意是在上题基础上添加
    <code><div class='codeNewLine'>s=Complexx(6,7)</div><div class='codeNewLine'><span class='pyFunction'>print</span>(<span class='pyFunction'>str</span>(s.x)+<span class='string'>"+"</span>+<span class='pyFunction'>str</span>(s.y)+<span class='string'>"i"</span>)</div><div class='codeNewLine'><span class="comments">#将打印6+7i</span></div><div class='codeNewLine'></div></code>
    
    3.(**)设计__str__函数,打印的复数对象的时候,以“5+6i”的形式打印实部和虚部 (10分) [编程]
    注意区别以下情况
    当虚部是0的时候,不打印i,例如7是正确的,7+0i是错误的
    当实部是0的时候,不打印“+”号,例如9i是正确的,0+9i就是错误的
    当虚部是负数的时候,不打印“+”号,例如5-7i是正确的,5+-7i是错误的。
    当虚部是1或者-1的时候,不打印1,例如4+i是正确的,4+1i是错误的
    <code><div class='codeNewLine'>s=Complexx(6,7)</div><div class='codeNewLine'><span class='pyFunction'>print</span>(s)  <span class="comments">#将打印6+7i</span></div><div class='codeNewLine'></div><div class='codeNewLine'>s=Complexx(0,7)</div><div class='codeNewLine'><span class='pyFunction'>print</span>(s)  <span class="comments">#将打印7i</span></div><div class='codeNewLine'></div><div class='codeNewLine'></div><div class='codeNewLine'>s=Complexx(5,0)</div><div class='codeNewLine'><span class='pyFunction'>print</span>(s)  <span class="comments">#将打印5</span></div><div class='codeNewLine'></div><div class='codeNewLine'></div><div class='codeNewLine'>s=Complexx(5,-4)</div><div class='codeNewLine'><span class='pyFunction'>print</span>(s)  <span class="comments">#将打印5-4i</span></div><div class='codeNewLine'></div><div class='codeNewLine'></div><div class='codeNewLine'>s=Complexx(5,-1)</div><div class='codeNewLine'><span class='pyFunction'>print</span>(s)  <span class="comments">#将打印5-i</span></div><div class='codeNewLine'></div><div class='codeNewLine'></div><div class='codeNewLine'>s=Complexx(5,1)</div><div class='codeNewLine'><span class='pyFunction'>print</span>(s)  <span class="comments">#将打印5+i</span></div></code>
    
    4.设计方法len,不需要参数,返回复数的模 (10分) [编程]
    实部的平方加上虚部的平方,再开平方,就是复数的模
    开平方可使用x**0.5,这表示x的0.5次方,也就是x开平方
    本题测试代码需要用到两个参数的构造函数
    <code><div class='codeNewLine'>c=Complexx(3,4)</div><div class='codeNewLine'><span class='pyFunction'>print</span>(c.<span class='pyFunction'>len</span>())<span class="comments">#将打印5</span></div></code>
    
    5.设计一个方法add,接收一个复数参数,返回两个复数加法的和(结果也是一个复数) (10分) [编程]
    此题要求先完成__str__函数
    <code><div class='codeNewLine'>com1=Complexx(5,6)</div><div class='codeNewLine'>com2=Complexx(3,2)</div><div class='codeNewLine'></div><div class='codeNewLine'>com3=com1.add(com2) <span class="comments">#com3的值是8+8i,com1和com2不变</span></div><div class='codeNewLine'><span class='pyFunction'>print</span>(com3) <span class="comments">#打印8+8i</span></div><div class='codeNewLine'><span class='pyFunction'>print</span>(com3.x) <span class="comments">#打印8</span></div><div class='codeNewLine'><span class='pyFunction'>print</span>(com3.y) <span class="comments">#打印8</span></div></code>
    
    6.设计一个方法minus,接收一个复数参数,返回两个复数减法的差(结果也是一个复数) (10分) [编程]
    此题要求先完成__str__函数
    <code><div class='codeNewLine'>com1=Complexx(5,6)</div><div class='codeNewLine'>com2=Complexx(3,2)</div><div class='codeNewLine'>com3=com1.minus(com2) <span class="comments">#com3的值是2+4i,com1和com2不变</span></div><div class='codeNewLine'><span class='pyFunction'>print</span>(com3) <span class="comments">#打印2+4i</span></div><div class='codeNewLine'><span class='pyFunction'>print</span>(com3.x) <span class="comments">#打印2</span></div><div class='codeNewLine'><span class='pyFunction'>print</span>(com3.y) <span class="comments">#打印4</span></div></code>
    
    7.设计一个方法com,功能是两个复数的乘法,接收一个复数参数,返回两个复数加法的积(也是一个复数) (10分) [编程]
    此题要求先完成__str__函数
    <code><div class='codeNewLine'>com1=Complexx(5,6)</div><div class='codeNewLine'>com2=Complexx(3,-2)</div><div class='codeNewLine'>com3=com1.com(com2) <span class="comments">#com3的值是27+8i,com1和com2不变</span></div><div class='codeNewLine'><span class='pyFunction'>print</span>(com3) <span class="comments">#打印27+8i</span></div><div class='codeNewLine'><span class='pyFunction'>print</span>(com3.x) <span class="comments">#打印27</span></div><div class='codeNewLine'><span class='pyFunction'>print</span>(com3.y) <span class="comments">#打印8</span></div></code>
    
    8.设计一个方法div,功能是两个复数的除法,接收一个复数参数,返回两个复数的商(也是一个复数) (10分) [编程]
    此题要求先完成__str__函数
    <code><div class='codeNewLine'>com1=Complexx(6,0)</div><div class='codeNewLine'>com2=Complexx(3,0)</div><div class='codeNewLine'>com3=com1.div(com2) </div><div class='codeNewLine'></div><div class='codeNewLine'></div><div class='codeNewLine'><span class='pyFunction'>print</span>(com3)</div><div class='codeNewLine'><span class='pyFunction'>print</span>(com3.x) <span class="comments">#打印6</span></div><div class='codeNewLine'><span class='pyFunction'>print</span>(com3.y) <span class="comments">#打印0</span></div></code>
    
    9.设计一个方法isPure,测试对象是否是纯虚数。是的话返回True,否则返回False (10分) [编程]
    实部为0,并且虚部不为0,那么它就是纯虚数,也就是只有后面i那部分,例如4i,-8.5i
    <code><div class='codeNewLine'>com1=Complexx(5,6)</div><div class='codeNewLine'>com2=Complexx(0,4)</div><div class='codeNewLine'>com3=Complexx(0,0)</div><div class='codeNewLine'><span class='pyFunction'>print</span>(com1.isPure()) <span class="comments">#打印False </span></div><div class='codeNewLine'><span class='pyFunction'>print</span>(com2.isPure()) <span class="comments">#打印True </span></div><div class='codeNewLine'><span class='pyFunction'>print</span>(com3.isPure()) <span class="comments">#打印False </span></div></code>
    
    10.设计一个方法isReal,测试对象是否是实数。是的话返回True,否则返回False (10分) [编程]
    虚部为0就是实数
    <code><div class='codeNewLine'>com1=Complexx(5,6)</div><div class='codeNewLine'>com2=Complexx(0,4)</div><div class='codeNewLine'>com3=Complexx(0,0)</div><div class='codeNewLine'>com4=Complexx(2,0)</div><div class='codeNewLine'><span class='pyFunction'>print</span>(com1.isReal()) <span class="comments">#打印False </span></div><div class='codeNewLine'><span class='pyFunction'>print</span>(com2.isReal()) <span class="comments">#打印False </span></div><div class='codeNewLine'><span class='pyFunction'>print</span>(com3.isReal()) <span class="comments">#打印True </span></div><div class='codeNewLine'><span class='pyFunction'>print</span>(com4.isReal()) <span class="comments">#打印True </span></div></code>