C语言运用函数指针数组实现计算器功能

 更新时间:2021年10月10日 14:18:44   作者:久留不见i  
这篇文章主要为大家详细介绍了C语言运用函数指针数组实现计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言运用函数指针数组制作计算器的具体代码,供大家参考,具体内容如下

先来回顾一下概念:

指针数组 —— 存放指针的数组

函数指针 —— 存放函数地址的指针

函数指针数组 —— 存放函数指针的数组

接下来说说这次要制作的计算器的功能:

1.add —— 加法

2.sub —— 减法

3.mul —— 乘法

4.div —— 除法

0.exit —— 退出

具体来通过代码讲解:

(1)首先写一个菜单程序,在运行程序时首先打印一次菜单。

void menu()
{
 printf("*************************\n");
 printf("*******   1.add   *******\n");
 printf("*******   2.sub   *******\n");
 printf("*******   3.mul   *******\n");
 printf("*******   4.div   *******\n");
 printf("*******   0.exit  *******\n");
 printf("*************************\n");
}

(2)写好四个关于加、减、乘、除操作的函数。

int Add(int x, int y)
{
 return x + y;
}
int Sub(int x, int y)
{
 return x - y;
}
int Mul(int x, int y)
{
 return x * y;
}
int Div(int x, int y)
{
 return x / y;
}

(3)写主函数,定义input是你要输入的数,用来选择功能;定义x和y是你要输入两个的操作数;接着在主程序中调用菜单函数menu()。

int main()
{
 int x = 0;
 int y = 0;
 int input = 0;
 menu();
}

(4)使用do while循环,以及if else语句,建立规则,如果输入的input是0的话就退出循环,while(input)代表input非零的时候会继续循环;如果input在1~4之间则对应计算器菜单上的功能,这时你需要输入两个数字;如果超出这个范围则重新循环。

int main()
{
 int x = 0;
 int y = 0;
 int input = 0;
 menu();
 do{
  printf("请选择你要进行的操作:\n");
  scanf("%d", &input);
  if (input == 0) {
   printf("退出计算器!\n");
  }
  else if (input >= 1 && input <= 4)
  {
   printf("请输入两个数字:\n");
   scanf("%d %d", &x, &y);
  }
  else {
   printf("选择错误!\n");
  }
 } while (input);
  return 0;
}

(5)接下来在主函数中定义一个函数指针数组,int (*pfarr[5])(int,int) = { 0,Add,Sub,Mul,Div }; 代表名为pfarr的函数指针数组有存放了5个指向函数的指针,分别是0,Add,Sub,Mul,Div;之所以增加0为数组的首元素,是为了数组元素下标与菜单相对应。

int main()
{
 int x = 0;
 int y = 0;
 int input = 0;
 menu();
 int (*pfarr[5])(int,int) = { 0,Add,Sub,Mul,Div };
 do{
  printf("请选择你要进行的操作:\n");
  scanf("%d", &input);
  if (input == 0) {
   printf("退出计算器!\n");
  }
  else if (input >= 1 && input <= 4)
  {
   printf("请输入两个数字:\n");
   scanf("%d %d", &x, &y);
  }
  else {
   printf("选择错误!\n");
  }
 } while (input);
  return 0;
}

(6)最后我们定义ret用来接收函数的返回值也就是运算结果,并打印;调用的时候直接调用函数指针数组中的input位,就是在调用相应的函数地址,并使用该函数;调用完成后打印ret。

int main()
{
 int x = 0;
 int y = 0;
 int ret = 0;
 int input = 0;
 menu();
 int (*pfarr[5])(int,int) = { 0,Add,Sub,Mul,Div };
 do{
  printf("请选择你要进行的操作:\n");
  scanf("%d", &input);
  if (input == 0) {
   printf("退出计算器!\n");
  }
  else if (input >= 1 && input <= 4)
  {
   printf("请输入两个数字:\n");
   scanf("%d %d", &x, &y);
   ret = pfarr[input](x,y);
   printf("ret = %d\n", ret);
  }
  else {
   printf("选择错误!\n");
  }
 } while (input);
  return 0;
}

到这里就全部讲解完成,喜欢的话点个赞再走吧~

全部代码在这里:

#include <stdio.h>
 
void menu()
{
 printf("*************************\n");
 printf("*******   1.add   *******\n");
 printf("*******   2.sub   *******\n");
 printf("*******   3.mul   *******\n");
 printf("*******   4.div   *******\n");
 printf("*******   0.exit  *******\n");
 printf("*************************\n");
}
 
int Add(int x, int y)
{
 return x + y;
}
int Sub(int x, int y)
{
 return x - y;
}
int Mul(int x, int y)
{
 return x * y;
}
int Div(int x, int y)
{
 return x / y;
}
 
int main()
{
 int x = 0;
 int y = 0;
 int ret = 0;
 int input = 0;
 menu();
 int (*pfarr[5])(int,int) = { 0,Add,Sub,Mul,Div };
 do{
  printf("请选择你要进行的操作:\n");
  scanf("%d", &input);
  if (input == 0) {
   printf("退出计算器!\n");
  }
  else if (input >= 1 && input <= 4)
  {
   printf("请输入两个数字:\n");
   scanf("%d %d", &x, &y);
   ret = pfarr[input](x,y);
   printf("ret = %d\n", ret);
  }
  else {
   printf("选择错误!\n");
  }
 } while (input);
  return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C语言的数组与指针可以这样了解

    C语言的数组与指针可以这样了解

    这篇文章主要介绍了C语言的数组与指针,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下,希望能给你带来帮助
    2021-08-08
  • C语言实现打飞机游戏

    C语言实现打飞机游戏

    这篇文章主要为大家详细介绍了C语言实现打飞机游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • 带你了解C++中的sort函数

    带你了解C++中的sort函数

    这篇文章主要给大家介绍了关于C++中sort函数的基础入门使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2021-08-08
  • C语言实现可排序通讯录的示例代码

    C语言实现可排序通讯录的示例代码

    本文主要介绍了C语言实现可排序通讯录的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • C语言中break与continue的用法和区别详解

    C语言中break与continue的用法和区别详解

    当我们使用while或for循环时,如果想提前结束循环(在不满足结束条件的情况下结束循环),可以使用break或continue关键字,这篇文章主要给大家介绍了关于C语言中break与continue的用法和区别的相关资料,需要的朋友可以参考下
    2021-10-10
  • 美化你的代码 vb(VBS)代码格式化的实现代码

    美化你的代码 vb(VBS)代码格式化的实现代码

    虽然VB.NET出现很久了,但还有好多人仍然在使用VB6。我在实现一些小功能的时候也喜欢用VB6,毕竟谁都不想每天的美好心情被VS那乌龟般的启动速度影响
    2012-05-05
  • c++的virtual和override作用及说明

    c++的virtual和override作用及说明

    这篇文章主要介绍了c++的virtual和override作用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • C++98/11/17表达式类别(小结)

    C++98/11/17表达式类别(小结)

    这篇文章主要介绍了C++98/11/17表达式类别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • 适合初学者的C语言数据类型的讲解

    适合初学者的C语言数据类型的讲解

    在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。
    2022-04-04
  • 一篇文章带你了解c++运算符重载

    一篇文章带你了解c++运算符重载

    下面小编就为大家带来一篇深入理解C++运算符重载。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-08-08

最新评论