函数指针数组

#include <stdio.h>

// 加法
int addition(double num1, double num2, double *res);
// 减法
int subtraction(double num1, double num2, double *res);
// 乘法
int multiplication(double num1, double num2, double *res);
// 除法
int division(double num1, double num2, double *res);

int main(void) {
  /*
   * 定义加、减、乘、除四个函数
   * 用户键盘录入三个数字
   * 前两个表示参与计算的数字
   * 第三个数字表示调用的函数
   * */
  double num1;
  double num2;
  int calc;
  double answer;

  printf("输入需要计算的两个数字:");
  scanf("%lf %lf", &num1, &num2);
  printf("1) +\t2) -\t3) *\t4) /\t5) quit\n"
         "输入需要的计算符号:");
  scanf("%d", &calc);

  int (*add)(double, double, double *) = addition;
  int (*sub)(double, double, double *) = subtraction;
  int (*mul)(double, double, double *) = multiplication;
  int (*div)(double, double, double *) = division;

  switch (calc) {
  case 1:
    add(num1, num2, &answer);
    printf("%lf + %lf = %lf\n", num1, num2, answer);
    break;
  case 2:
    sub(num1, num2, &answer);
    printf("%lf - %lf = %lf\n", num1, num2, answer);
    break;
  case 3:
    mul(num1, num2, &answer);
    printf("%lf * %lf = %lf\n", num1, num2, answer);
    break;
  case 4:
    if (div(num1, num2, &answer) == 1) {
      printf("除数不能为0!\n");
    } else {
      printf("%lf / %lf = %lf\n", num1, num2, answer);
    }
    break;
  default:
    printf("运算符无效!\n");
    break;
  }

  return 0;
}

int addition(double num1, double num2, double *res) {
  *res = num1 + num2;

  return 0;
}

int subtraction(double num1, double num2, double *res) {
  *res = num1 - num2;

  return 0;
}

int multiplication(double num1, double num2, double *res) {
  *res = num1 * num2;

  return 0;
}

int division(double num1, double num2, double *res) {

  if (num2 == 0) {
    return 1;
  }
  *res = num1 / num2;

  return 0;
}
#include <stdio.h>

// 运算函数
int operate(double number1, double number2, char calc, double *answer);

int main(void) {
  /*
   * 定义一个运算函数
   * */
  double num1, num2, answer;
  char calc;

  printf("输入需要计算的两个数字:");
  scanf("%lf %lf", &num1, &num2);
  getchar();
  printf("1) +\t2) -\t3) *\t4) /\tq) quit\n"
         "输入需要的计算符号:");
  scanf("%c", &calc);

  int flag = operate(num1, num2, calc, &answer);
  if (flag == 1) {
    printf("除数不能为0!\n");
  } else if (flag == -1) {
    printf("运算符无效!\n");
  } else {
    printf("%lf %c %lf = %lf\n", num1, calc, num2, answer);
  }

  return 0;
}

int operate(double number1, double number2, char calc, double *answer) {
  switch (calc) {
  case '+':
    *answer = number1 + number2;
    break;
  case '-':
    *answer = number1 - number2;
    break;
  case '*':
    *answer = number1 * number2;
    break;
  case '/':
    if (number2 == 0) {
      return 1;
    }
    *answer = number1 / number2;
    break;
  default:
    return -1;
  }

  return 0;
}
#include <stdio.h>

// 加法
int addition(double num1, double num2, double *res, char *calc);
// 减法
int subtraction(double num1, double num2, double *res, char *calc);
// 乘法
int multiplication(double num1, double num2, double *res, char *calc);
// 除法
int division(double num1, double num2, double *res, char *calc);

int main(void) {
  /*
   * 定义加、减、乘、除四个函数
   * 用户键盘录入三个数字
   * 前两个表示参与计算的数字
   * 第三个数字表示调用的函数
   * */
  // 函数指针数组
  int (*arr[4])(double, double, double *, char *) = {addition, subtraction,
                                                     multiplication, division};

  double num1;
  double num2;
  int choose;
  double answer;
  char calc;

  printf("输入需要计算的两个数字:");
  scanf("%lf %lf", &num1, &num2);
  printf("1) +\t2) -\t3) *\t4) /\t5) quit\n"
         "输入需要的计算符号:");
  scanf("%d", &choose);

  int flag = (arr[choose - 1])(num1, num2, &answer, &calc);
  if (flag == 1) {
    printf("除数不能为0!\n");
  } else {
    printf("%lf %c %lf = %lf\n", num1, calc, num2, answer);
  }

  return 0;
}

int addition(double num1, double num2, double *res, char *calc) {
  *res = num1 + num2;
  *calc = '+';

  return 0;
}

int subtraction(double num1, double num2, double *res, char *calc) {
  *res = num1 - num2;
  *calc = '-';

  return 0;
}

int multiplication(double num1, double num2, double *res, char *calc) {
  *res = num1 * num2;
  *calc = '*';

  return 0;
}

int division(double num1, double num2, double *res, char *calc) {

  if (num2 == 0) {
    return 1;
  }
  *res = num1 / num2;
  *calc = '/';

  return 0;
}
posted @ 2026-01-16 21:41  Zhuye_inking  阅读(2)  评论(0)    收藏  举报