• 重生之我是一名程序员 33


    哈喽大家晚上好啊!今天呢给大家分享的知识是——教大家实现简易的代码计算机(拥有简单的加减乘除运算)。首先呢,想要实现一个计算机,就必须有一份简单的选择菜单,想必大家应该还记得我之前给大家讲过函数吧,那么这个菜单我们就用一个函数mune()函数实现,如下:

    1. void mune()
    2. {
    3. printf("*************************\n");
    4. printf("* 1:add 2:sub *\n");
    5. printf("* 3:mul 4:div *\n");
    6. printf("* 0:exit *\n");
    7. printf("*************************\n");
    8. }

    而加减乘除运算也用4个简单的函数实现,如下:

    1. int add(int a, int b)
    2. {
    3. return a + b;
    4. }
    5. int sub(int a, int b)
    6. {
    7. return a - b;
    8. }
    9. int mul(int a, int b)
    10. {
    11. return a*b;
    12. }
    13. int div(int a, int b)
    14. {
    15. return a / b;
    16. }

    最后,我们用do-while循环以及switch结构来实现这个计算机,如下:

    1. #include
    2. int add(int a, int b)
    3. {
    4. return a + b;
    5. }
    6. int sub(int a, int b)
    7. {
    8. return a - b;
    9. }
    10. int mul(int a, int b)
    11. {
    12. return a * b;
    13. }
    14. int div(int a, int b)
    15. {
    16. return a / b;
    17. }
    18. int main()
    19. {
    20. int x, y;
    21. int input = 1;
    22. int ret = 0;
    23. do
    24. {
    25. mune();
    26. printf("请选择:");
    27. scanf("%d", &input);
    28. switch (input)
    29. {
    30. case 1:
    31. printf("输⼊操作数:");
    32. scanf("%d %d", &x, &y);
    33. ret = add(x, y);
    34. printf("ret = %d\n", ret);
    35. break;
    36. case 2:
    37. printf("输⼊操作数:");
    38. scanf("%d %d", &x, &y);
    39. ret = sub(x, y);
    40. printf("ret = %d\n", ret);
    41. break;
    42. case 3:
    43. printf("输⼊操作数:");
    44. scanf("%d %d", &x, &y);
    45. ret = mul(x, y);
    46. printf("ret = %d\n", ret);
    47. break;
    48. case 4:
    49. printf("输⼊操作数:");
    50. scanf("%d %d", &x, &y);
    51. ret = div(x, y);
    52. printf("ret = %d\n", ret);
    53. break;
    54. case 0:
    55. printf("退出程序\n");
    56. break;
    57. default:
    58. printf("选择错误\n");
    59. break;
    60. }
    61. } while (input);
    62. return 0;
    63. }

    但是,此代码虽然可以实现我们的计算机程序,可一旦我们需要的运算多了(加减乘除之外的运算),switch结构所构成的代码就会非常的长,那我们是否可以改进一下代码呢?当然是可以的,见面给大家讲过指针数组,以及函数指针,那我们今天就用二者的结合——函数指针数组来优化这段代码,在此之前,先给大家介绍一下函数指针数组,函数指针数组顾名思义是指一个数组,其中的每一个元素都是一个指向函数的指针。函数指针数组的元素可以是不同的函数指针,也可以是相同的函数指针。通常,函数指针数组用于实现函数的动态调用或者实现函数的多态性。例如,可以根据函数指针数组中的元素来动态调用不同的函数,或者根据函数指针数组中的元素实现不同的算法,从而达到代码复用和灵活性的目的。最后,优化后的代码如下:

    1. #include
    2. int add(int a, int b)
    3. {
    4. return a + b;
    5. }
    6. int sub(int a, int b)
    7. {
    8. return a - b;
    9. }
    10. int mul(int a, int b)
    11. {
    12. return a*b;
    13. }
    14. int div(int a, int b)
    15. {
    16. return a / b;
    17. }
    18. int main()
    19. {
    20. int x, y;
    21. int input = 1;
    22. int ret = 0;
    23. int(*p[5])(int x, int y) = { 0, add, sub, mul, div }; //函数指针数组
    24. do
    25. {
    26. mune()
    27. printf( "请选择:" );
    28. scanf("%d", &input);
    29. if ((input <= 4 && input >= 1))//通过数组中的下标来构成判断
    30. {
    31. printf( "输⼊操作数:" );
    32. scanf( "%d %d", &x, &y);
    33. ret = (*p[input])(x, y);
    34. printf( "ret = %d\n", ret);
    35. }
    36. else if(input == 0)
    37. {
    38. printf("退出计算器\n");
    39. }
    40. else
    41. {
    42. printf( "输⼊有误\n" );
    43. }
    44. }while (input);
    45. return 0;
    46. }

    好啦,现在大家就应该知道怎么去构成一个简易的计算机了,那么今天的知识分享就到此结束啦,大家明天见!

  • 相关阅读:
    排序算法两万字总结(C语言实现)
    Mac OS m1 下安装Gradle5.1
    【Java面试】怎么防止缓存击穿的问题?
    JAVA练习百题之求矩阵对角线之和
    混合云运维解决方案,支持公有云、私有云、信创云等环境
    微信小程序的一些基础入门
    Cortex-A核的异常的处理过程
    PostgreSQL 索引优化与性能调优(十一)
    React报错之Parameter ‘props‘ implicitly has an ‘any‘ type
    【老生谈算法】利用matlab研究频率特性源码——频率特性
  • 原文地址:https://blog.csdn.net/StarslxYzxcvbnm/article/details/134470639