鱼C论坛

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

下面

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

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

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

x

#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[4])(double, double) = {add, sub, mul, divi};   
    printf("请输入两个数:");
    scanf("%f %f", &x, &y);
    printf("对这两个数进行加减乘除后的结果是:");
    for (int i = 0; i < 4; i++)
    {
        result = (*cal[i])(x, y);
        printf("%.2f ", result);
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

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

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

使用道具 举报

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

使用道具 举报

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

我就是想问一下怎么理解这句话:
double (*cal[4])(double, double) = {add, sub, mul, divi};  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 10:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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