hanghanga 发表于 2023-11-10 21:43:49

下面



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

double add(double x, double y);
double sub(double x, double y);
double mul(double x, double y);
double divi(double x, double y);

double add(double x, double y)
{
    return x + y;
}

double sub(double x, double y)
{
    return x - y;
}

double mul(double x, double y)
{
    return x * y;
}

double divi(double x, double y)
{
    if (y >= -EPSINON && y <= EPSINON)
    {
      printf("除数不能为0\n");
      exit(1);
    }
    else
    {
      return x / y;
    }
}

int main()
{
    float x, y, result;
    //下面这一行是什么意思?
    double (*cal)(double, double) = {add, sub, mul, divi};   
    printf("请输入两个数:");
    scanf("%f %f", &x, &y);
    printf("对这两个数进行加减乘除后的结果是:");
    for (int i = 0; i < 4; i++)
    {
      result = (*cal)(x, y);
      printf("%.2f ", result);
    }
    return 0;
}

isdkz 发表于 2023-11-10 21:43:59

这段代码使用了函数指针数组来实现对四则运算的动态调用。在main函数中,定义了一个函数指针数组 cal ,其中每个元素指向一个对应的四则运算函数。然后通过循环遍历这个函数指针数组,依次调用对应的四则运算函数,将结果打印出来。

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

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

除此之外,代码中存在一个小问题,即 result 的类型应该是 double 而不是 float ,因为四则运算可能产生小数结果。因此,应该将 result 的类型修改为 double 以保证精度。

hanghanga 发表于 2023-11-10 21:44:38

请问main函数里面,有注释下面那一行是什么意思?函数指针的数组?

hanghanga 发表于 2023-11-10 21:50:14

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

我就是想问一下怎么理解这句话:
double (*cal)(double, double) = {add, sub, mul, divi};
页: [1]
查看完整版本: 下面