MST

星途 面试题库

面试题:C语言函数指针数组的使用

假设有多个数学运算函数,如加法、减法、乘法、除法,每个函数接受两个double类型参数并返回double类型结果。要求定义一个函数指针数组,将这些运算函数的地址存入数组,然后编写一个函数,根据传入的操作符(如'+', '-', '*', '/'),通过函数指针数组调用相应的函数进行运算并返回结果。请给出完整的代码实现。
21.1万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>
#include <cassert>

// 加法函数
double add(double a, double b) {
    return a + b;
}

// 减法函数
double subtract(double a, double b) {
    return a - b;
}

// 乘法函数
double multiply(double a, double b) {
    return a * b;
}

// 除法函数
double divide(double a, double b) {
    assert(b != 0);
    return a / b;
}

int main() {
    // 定义函数指针类型
    using MathOp = double(*)(double, double);

    // 定义函数指针数组并初始化
    MathOp operations[4] = {add, subtract, multiply, divide};

    // 获取用户输入
    char op;
    double num1, num2;
    std::cout << "请输入操作符 (+, -, *, /): ";
    std::cin >> op;
    std::cout << "请输入两个数字: ";
    std::cin >> num1 >> num2;

    // 根据操作符调用相应函数
    double result;
    switch (op) {
        case '+':
            result = operations[0](num1, num2);
            break;
        case '-':
            result = operations[1](num1, num2);
            break;
        case '*':
            result = operations[2](num1, num2);
            break;
        case '/':
            result = operations[3](num1, num2);
            break;
        default:
            std::cout << "无效的操作符" << std::endl;
            return 1;
    }

    // 输出结果
    std::cout << "结果是: " << result << std::endl;

    return 0;
}