switch&回调函数

#include <stdio.h>

// 函数原型声明
float calc(float a, float y, const char op);
float add(float a, float b);
float minus(float a, float b);
float multiple(float a, float b);
float divide(float a, float b);
float calc_using_callback(float a, float b, float (*op_callback)(float, float));

// 实现基本的数学运算
float calc(float a, float y, const char op)
{
    float res;

    switch (op)
    {
        case '+':
            res = a + y;
            break;

        case '-':
            res = a - y;
            break;

        case '*':
            res = a * y;
            break;

        case '/':
            if (y != 0)
                res = a / y;
            else
            {
                printf("Error: Division by zero.\n");
                res = 0; // 返回默认值
            }
            break;

        default:
            printf("Invalid operator '%c'.\n", op);
            res = 0; // 返回默认值
            break;
    }

    return res;
}

// 加法
float add(float a, float b)
{
    return (a + b);
}

// 减法
float minus(float a, float b)
{
    return (a - b);
}

// 乘法
float multiple(float a, float b)
{
    return (a * b);
}

// 除法
float divide(float a, float b)
{
    if (b != 0)
        return (a / b);
    else
    {
        printf("Error: Division by zero.\n");
        return 0; // 返回默认值
    }
}

// 使用回调函数进行数学运算
float calc_using_callback(float a, float b, float (*op_callback)(float, float))
{
    return (op_callback(a, b));
}

int main(void)
{
    float res;

    // 使用 calc 函数
    res = calc(1.6, 2, '-');
    printf("res = %.2f\n", res);

    // 使用 calc_using_callback 函数
    res = calc_using_callback(1.5, 2, add);
    printf("res = %.2f\n", res);

    res = calc_using_callback(1.5, 2, minus);
    printf("res = %.2f\n", res);

    res = calc_using_callback(1.5, 2, multiple);
    printf("res = %.2f\n", res);

    res = calc_using_callback(1.5, 2, divide);
    printf("res = %.2f\n", res);

    return 0;
}
posted @ 2024-08-28 19:31  stitchCat  阅读(31)  评论(0)    收藏  举报