下面
#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;
} 这段代码使用了函数指针数组来实现对四则运算的动态调用。在main函数中,定义了一个函数指针数组 cal ,其中每个元素指向一个对应的四则运算函数。然后通过循环遍历这个函数指针数组,依次调用对应的四则运算函数,将结果打印出来。
这种方式的好处在于可以通过修改函数指针数组的方式,方便地扩展或修改支持的运算类型,而不需要修改主程序的逻辑。
需要注意的是,代码中定义的 EPSINON 应该是 EPSILON ,表示允许的误差值。在 divi 函数中,当除数接近0时会触发错误提示并退出程序,这是一个良好的做法。
除此之外,代码中存在一个小问题,即 result 的类型应该是 double 而不是 float ,因为四则运算可能产生小数结果。因此,应该将 result 的类型修改为 double 以保证精度。 请问main函数里面,有注释下面那一行是什么意思?函数指针的数组? isdkz 发表于 2023-11-10 21:43
这段代码使用了函数指针数组来实现对四则运算的动态调用。在main函数中,定义了一个函数指针数组 cal ,其 ...
我就是想问一下怎么理解这句话:
double (*cal)(double, double) = {add, sub, mul, divi};
页:
[1]