鱼C论坛

 找回密码
 立即注册
查看: 1391|回复: 3

下面

[复制链接]
发表于 2023-11-10 21:43:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x


  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define EPSINON 0.000001 // 定义允许的误差

  4. double add(double x, double y);
  5. double sub(double x, double y);
  6. double mul(double x, double y);
  7. double divi(double x, double y);

  8. double add(double x, double y)
  9. {
  10.     return x + y;
  11. }

  12. double sub(double x, double y)
  13. {
  14.     return x - y;
  15. }

  16. double mul(double x, double y)
  17. {
  18.     return x * y;
  19. }

  20. double divi(double x, double y)
  21. {
  22.     if (y >= -EPSINON && y <= EPSINON)
  23.     {
  24.         printf("除数不能为0\n");
  25.         exit(1);
  26.     }
  27.     else
  28.     {
  29.         return x / y;
  30.     }
  31. }

  32. int main()
  33. {
  34.     float x, y, result;
  35.     //  下面这一行是什么意思?
  36.     double (*cal[4])(double, double) = {add, sub, mul, divi};   
  37.     printf("请输入两个数:");
  38.     scanf("%f %f", &x, &y);
  39.     printf("对这两个数进行加减乘除后的结果是:");
  40.     for (int i = 0; i < 4; i++)
  41.     {
  42.         result = (*cal[i])(x, y);
  43.         printf("%.2f ", result);
  44.     }
  45.     return 0;
  46. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-10 21:43:59 | 显示全部楼层
这段代码使用了函数指针数组来实现对四则运算的动态调用。在main函数中,定义了一个函数指针数组 cal ,其中每个元素指向一个对应的四则运算函数。然后通过循环遍历这个函数指针数组,依次调用对应的四则运算函数,将结果打印出来。

这种方式的好处在于可以通过修改函数指针数组的方式,方便地扩展或修改支持的运算类型,而不需要修改主程序的逻辑。

需要注意的是,代码中定义的 EPSINON 应该是 EPSILON ,表示允许的误差值。在 divi 函数中,当除数接近0时会触发错误提示并退出程序,这是一个良好的做法。

除此之外,代码中存在一个小问题,即 result 的类型应该是 double 而不是 float ,因为四则运算可能产生小数结果。因此,应该将 result 的类型修改为 double 以保证精度。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-10 21:44:38 | 显示全部楼层
请问main函数里面,有注释下面那一行是什么意思?函数指针的数组?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-10 21:50:14 | 显示全部楼层
isdkz 发表于 2023-11-10 21:43
这段代码使用了函数指针数组来实现对四则运算的动态调用。在main函数中,定义了一个函数指针数组 cal ,其 ...

我就是想问一下怎么理解这句话:
  1. double (*cal[4])(double, double) = {add, sub, mul, divi};  
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 03:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表