• 数据结构与算法基础(王卓)(1)


    目录

    标准答案:

    一:typedef struct 

    赋值

    将该程序补充完整:

    最后,我们再来补充完整标准答案中没有写的主函数:(具体实例实际具体运算部分)

    但是为啥运行不出来嘞???


    题目位于:1.3;PPT:第一章29;

    标准答案:

    (来源自数据结构与算法基础(青岛大学——王卓) note_Tarench的博客-CSDN博客

    1. #include
    2. using namespace std;
    3. typedef struct {
    4. float realpart; //实部
    5. float imagpart; //虚部
    6. }Complex;
    7. /*函数声明*/
    8. void assign(Complex* A, float real, float imag); //赋值
    9. //加减乘除
    10. void add(Complex* C, Complex A, Complex B);
    11. void minus(Complex* C, Complex A, Complex B);
    12. void mutiply(Complex* C, Complex A, Complex B);
    13. void divide(Complex* C, Complex A, Complex B);
    14. /*函数实现*/
    15. void assign(Complex* A, float real, float imag)
    16. {
    17. A->realpart = real;
    18. A->imagpart = imag;
    19. }
    20. void add(Complex* C, Complex A, Complex B)
    21. {
    22. C->realpart = A.realpart + B.realpart;
    23. C->imagpart = A.imagpart + B.imagpart;
    24. }
    25. void minus(Complex* C, Complex A, Complex B)
    26. {
    27. C->realpart = A.realpart - B.realpart;
    28. C->imagpart = A.imagpart - B.imagpart;
    29. }
    30. void mutiply(Complex* C, Complex A, Complex B)
    31. {
    32. C->realpart = A.realpart * B.realpart - A.imagpart * B.imagpart;
    33. C->imagpart = A.realpart * B.imagpart + A.imagpart * B.realpart;
    34. }
    35. void divide(Complex* C, Complex A, Complex B)
    36. {
    37. C->realpart = (A.realpart * B.realpart + A.imagpart * B.imagpart) / (B.realpart * B.realpart + B.imagpart * B.imagpart);
    38. C->imagpart = (B.realpart * A.imagpart - B.imagpart * A.realpart) / (B.realpart * B.realpart + B.imagpart * B.imagpart);
    39. }

    (学习该块知识过程中)碰到的之前没学过的,之前不会的新学的,零碎的知识点和问题:

    一:typedef struct 

    (1):这是个什么东西?

    (2):这个typedef总感觉之前学习C++模块的基础知识时好像看到过

    但是具体在哪里真的学过翻书翻了半天好像又找不出来

    (3):之前我们在C++里面学习定义一个新的类型(结构体)时不都是用:

    struct <新建类型名>

    的格式吗?

    关于typedef struct的详细解释,详见:typedef struct_宇 -Yu的博客-CSDN博客

    在这里,简单来说,我们只需要知道: 模块

    1. typedef struct {
    2. float realpart; //实部
    3. float imagpart; //虚部
    4. }Complex;

    等价于

    1. struct Complex {
    2. float realpart; //实部
    3. float imagpart; //虚部
    4. };

    最终(已经实践验证)结果一样,把这里的typedef struct模块替换为我们熟悉的struct格式的模块即可;


    将大段程序简化拆解(把五种运算拆开来一个一个说):

    赋值

    1. #include
    2. using namespace std;
    3. struct Complex
    4. {//复杂的<复数>
    5. float realpart; //实部
    6. float imagpart; //虚部
    7. };
    8. /*函数声明*/
    9. void assign(Complex* A, float real, float imag); //赋值
    10. /*函数实现(定义)*/
    11. void assign(Complex* A, float real, float imag)
    12. {
    13. A->realpart = real;
    14. A->imagpart = imag;
    15. }

    给复数赋值部分,程序运行步骤相当于:

        (A->realpart) = real;
        (A->imagpart) = imag;

    即:

    第一个语句:

    指针A访问结构体中的realpart部分

    相当于(A->realpart)就是(代表)complex结构体中的realpart实数型变量,把这一部分调用出来

    并且(然后),把函数给出的实参real赋给这个realpart部分

    同样的,第二个语句:

    指针A访问结构体中的imagpart部分

    相当于(A->imagpart)就是(代表)complex结构体中的imagpart实数型变量,把这一部分调用出来

    并且(然后),把函数给出的实参imag赋给这个imagpart部分

    于是,赋值操作就完成啦


    将该程序补充完整:

    1. #include
    2. using namespace std;
    3. struct Complex
    4. {//复杂的<复数>
    5. float realpart; //实部
    6. float imagpart; //虚部
    7. };
    8. /*函数声明*/
    9. void assign(Complex* A, float real, float imag); //赋值
    10. /*函数实现(定义)*/
    11. void assign(Complex* A, float real, float imag)
    12. {
    13. (A->realpart) = real;
    14. (A->imagpart) = imag;
    15. }
    16. int main()
    17. {
    18. Complex n;
    19. Complex* p = &n;
    20. assign(p, 1, 2);
    21. cout << "该复数等于:"<realpart<<"+"<imagpart<<"i"<
    22. }

    结果:

     至于后面其他的加减乘除的函数定义,和赋值部分相似

    (用“->”调用出所输出结果的实部/虚部部分,然后再针对该部分的运算规则分别给其赋值)

    在此不再赘述,唯一有一点需要说明的,就是关于复数的除法公式:(如下)

    另外,在除法运算中其实还默认要求分母不等于0,补充程序为:(标准答案multiply打错了)

    1. #include
    2. using namespace std;
    3. typedef struct //复杂的<复数>
    4. {
    5. float realpart; //实部
    6. float imagpart; //虚部
    7. }Complex;
    8. /*函数声明*/
    9. void assign(Complex* A, float real, float imag); //赋值
    10. //加减乘除
    11. void add(Complex* C, Complex A, Complex B);
    12. void minus(Complex* C, Complex A, Complex B);
    13. void mutiply(Complex* C, Complex A, Complex B);
    14. void divide(Complex* C, Complex A, Complex B);
    15. /*函数实现*/
    16. void assign(Complex* A, float real, float imag)
    17. {
    18. A->realpart = real;
    19. A->imagpart = imag;
    20. }
    21. void add(Complex* C, Complex A, Complex B)
    22. {
    23. C->realpart = A.realpart + B.realpart;
    24. C->imagpart = A.imagpart + B.imagpart;
    25. }
    26. void minus(Complex* C, Complex A, Complex B)
    27. {
    28. C->realpart = A.realpart - B.realpart;
    29. C->imagpart = A.imagpart - B.imagpart;
    30. }
    31. void multiply(Complex* C, Complex A, Complex B)
    32. {
    33. C->realpart = A.realpart * B.realpart - A.imagpart * B.imagpart;
    34. C->imagpart = A.realpart * B.imagpart + A.imagpart * B.realpart;
    35. }
    36. void divide(Complex* C, Complex A, Complex B)
    37. {
    38. while (B.realpart * B.realpart + B.imagpart * B.imagpart != 0)
    39. C->realpart = (A.realpart * B.realpart + A.imagpart * B.imagpart) / (B.realpart * B.realpart + B.imagpart * B.imagpart);
    40. C->imagpart = (B.realpart * A.imagpart - B.imagpart * A.realpart) / (B.realpart * B.realpart + B.imagpart * B.imagpart);
    41. }

    最后,我们再来补充完整标准答案中没有写的主函数:(具体实例实际具体运算部分)

    以PPT中的具体运算为例

    1. void 输出结果(Complex a)
    2. {
    3. cout << "结果为: " << a.realpart
    4. << "+" << a.imagpart << "i;" << endl;
    5. }
    6. int main()
    7. {
    8. Complex z1, z2,a,m,result;
    9. assign(&z1, 8, 6);
    10. assign(&z2, 4, 3);
    11. add(&a,z1,z2);
    12. multiply(&m, z1, z2);
    13. divide(&result, m, a);
    14. 输出结果(result);
    15. }

    最终:

    1. #include
    2. using namespace std;
    3. typedef struct //复杂的<复数>
    4. {
    5. float realpart; //实部
    6. float imagpart; //虚部
    7. }Complex;
    8. /*函数声明*/
    9. void assign(Complex* A, float real, float imag); //赋值
    10. //加减乘除
    11. void add(Complex* C, Complex A, Complex B);
    12. void minus(Complex* C, Complex A, Complex B);
    13. void mutiply(Complex* C, Complex A, Complex B);
    14. void divide(Complex* C, Complex A, Complex B);
    15. /*函数实现*/
    16. void assign(Complex* A, float real, float imag)
    17. {
    18. A->realpart = real;
    19. A->imagpart = imag;
    20. }
    21. void add(Complex* C, Complex A, Complex B)
    22. {
    23. C->realpart = A.realpart + B.realpart;
    24. C->imagpart = A.imagpart + B.imagpart;
    25. }
    26. void minus(Complex* C, Complex A, Complex B)
    27. {
    28. C->realpart = A.realpart - B.realpart;
    29. C->imagpart = A.imagpart - B.imagpart;
    30. }
    31. void multiply(Complex* C, Complex A, Complex B)
    32. {
    33. C->realpart = A.realpart * B.realpart - A.imagpart * B.imagpart;
    34. C->imagpart = A.realpart * B.imagpart + A.imagpart * B.realpart;
    35. }
    36. void divide(Complex* C, Complex A, Complex B)
    37. {
    38. while (B.realpart * B.realpart + B.imagpart * B.imagpart != 0)
    39. C->realpart = (A.realpart * B.realpart + A.imagpart * B.imagpart)
    40. / (B.realpart * B.realpart + B.imagpart * B.imagpart);
    41. C->imagpart = (B.realpart * A.imagpart - B.imagpart * A.realpart)
    42. / (B.realpart * B.realpart + B.imagpart * B.imagpart);
    43. }
    44. void 输出结果(Complex a)
    45. {
    46. cout << "结果为: " << a.realpart
    47. << "+" << a.imagpart << "i;" << endl;
    48. }
    49. int main()
    50. {
    51. Complex z1, z2,a,m,result;
    52. assign(&z1, 8, 6);
    53. assign(&z2, 4, 3);
    54. add(&a,z1,z2);
    55. multiply(&m, z1, z2);
    56. divide(&result, m, a);
    57. 输出结果(result);
    58. }

    但是为啥运行不出来嘞???

    md你一个判断语句,你在这放while循环干什么???这不是陷入死循环么??

    把while改成if即可:

    1. #include
    2. using namespace std;
    3. typedef struct //复杂的<复数>
    4. {
    5. float realpart; //实部
    6. float imagpart; //虚部
    7. }Complex;
    8. /*函数声明*/
    9. void assign(Complex* A, float real, float imag); //赋值
    10. //加减乘除
    11. void add(Complex* C, Complex A, Complex B);
    12. void minus(Complex* C, Complex A, Complex B);
    13. void mutiply(Complex* C, Complex A, Complex B);
    14. void divide(Complex* C, Complex A, Complex B);
    15. /*函数实现*/
    16. void assign(Complex* A, float real, float imag)
    17. {
    18. A->realpart = real;
    19. A->imagpart = imag;
    20. }
    21. void add(Complex* C, Complex A, Complex B)
    22. {
    23. C->realpart = A.realpart + B.realpart;
    24. C->imagpart = A.imagpart + B.imagpart;
    25. }
    26. void minus(Complex* C, Complex A, Complex B)
    27. {
    28. C->realpart = A.realpart - B.realpart;
    29. C->imagpart = A.imagpart - B.imagpart;
    30. }
    31. void multiply(Complex* C, Complex A, Complex B)
    32. {
    33. C->realpart = A.realpart * B.realpart - A.imagpart * B.imagpart;
    34. C->imagpart = A.realpart * B.imagpart + A.imagpart * B.realpart;
    35. }
    36. void divide(Complex* C, Complex A, Complex B)
    37. {
    38. if(B.realpart * B.realpart + B.imagpart * B.imagpart != 0)
    39. {
    40. C->realpart = (A.realpart * B.realpart + A.imagpart * B.imagpart)
    41. / (B.realpart * B.realpart + B.imagpart * B.imagpart);
    42. C->imagpart = (B.realpart * A.imagpart - B.imagpart * A.realpart)
    43. / (B.realpart * B.realpart + B.imagpart * B.imagpart);
    44. }
    45. }
    46. void 输出结果(Complex a)
    47. {
    48. cout << "结果为: " << a.realpart
    49. << "+" << a.imagpart << "i;" << endl;
    50. }
    51. int main()
    52. {
    53. Complex z1, z2, a, m, result;
    54. assign(&z1, 8, 6);
    55. assign(&z2, 4, 3);
    56. add(&a, z1, z2);
    57. multiply(&m, z1, z2);
    58. divide(&result, m, a);
    59. 输出结果(result);
    60. }

    结果:

  • 相关阅读:
    金仓数据库 KingbaseGIS 使用手册(6.21. 长事务支持)
    前端面试题---作用域链和原型链
    NetCore VUE 前后端分离获取IP
    【ESP32_FreeRTOS篇】
    k8s master节点更换ip 重签证书
    ES6笔记————Array的扩展方法、模板字符串定义Array对象常用方法
    helm使用
    物理学家用AI改写教科书!质子中发现新的夸克,可能性高达99.7%
    【tio-websocket】8、T-IO对半包和粘包的处理
    Linux下自动备份MySQL数据库并上传到远程FTP服务器
  • 原文地址:https://blog.csdn.net/Zz_zzzzzzz__/article/details/127773346