玩点不一样的

一、利用回调函数实现

#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");
}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 Calc(int(*pf)(int, int))//传入函数的地址
{int x = 0;int y = 0;printf("请输入两个操作数:>");scanf_s("%d %d", &x, &y);return pf(x, y);
}int main()
{int input = 0;do{menu();int ret = 0;printf("请选择:>");scanf_s("%d", &input);switch(input){case 1:ret = Calc(Add);printf("ret=%d\n", ret);break;case 2:ret = Calc(Sub);printf("ret=%d\n", ret);break;case 3:ret = Calc(Mul);printf("ret=%d\n", ret);break;case 4:ret = Calc(Div);printf("ret=%d\n", ret);break;case 0:printf("退出程序\n");break;default:printf("选择错误,请重新选择:>\n");break;}} 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");
}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 input = 0;do{menu();int (*pfarr[5])(int, int) = { NULL,Add,Sub,Mul,Div };//利用函数指针数组//放NULL空指针是为了,把下标和选项对上,1是Add,2是Sub……int x = 0;int y = 0;int ret = 0;printf("请选择:>");scanf_s("%d", &input);if (input >= 1 && input <= 4){printf("请输入两个操作数:>");scanf_s("%d %d", &x, &y);ret = (pfarr[input])(x, y);//利用函数指针调用函数的三种形式//(*pf)(x,y);//pf(x,y);//function(x,y);printf("ret=%d\n", ret);}else if (input == 0){printf("退出程序\n");break;}else{printf("选择错误,请重新选择:>\n");}} while (input);return 0;
}

计算器(利用回调函数/函数指针数组实现) C语言相关推荐

  1. 指向函数的指针数组(C++)

    我们能够创建一个指向函数的指针数组.为了选择一个函数,只需要使用数组的下标,然后间接引用这个指针.这种方式支持表格式驱动码的概念:可以根据状态变量去选择被执行函数,而不用条件语句或case语句.这种设 ...

  2. 指针,指针函数,指针数组的区别

    1.指针 #include<iostream> using namespace std;int main() {int a=2;int *p;p=&a;printf("% ...

  3. c语言在函数中返回数组,关于C语言函数返回数组的问题

    关于C语言函数返回一个数组 c语言中函数不能直接返回一个数组,但是可以用其他方式实现类似功能,不过需要注意: 1.该数组不能是返回函数的局部变量数组,因为局部变量数组在退出函数后会被释放. 可以是全局 ...

  4. 字符串排序(函数,指针)(C语言实现)

    编写程序,用户输入n个(n<100)字符串(每个字符串长度小于100),按照字典顺序将字符串进行排序,并输出.要求在排序中使用指针数组完成. [输入说明] 输入第一行是一个整数数字,表示n,接下 ...

  5. c语言不能在函数中求数组大小,C语言中数组长度不能用变量定义吗?

    翻翻过去那场雪 1.C语言中不支持.C++中支持变长数组(你可以自行度娘变长数组和alloca函数),但是因为其实在栈上分配,不被推荐使用.做为解决方案,你可以使用C式的malloc函数或者C++式的 ...

  6. C语言数组fun函数逆置数组元素,C语言

    第一套 1. 程序填空 程序通过定义学生结构体数组,存储了若干个学生的学号.姓名和三门课的成绩.函数fun的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大排序).请在程序的下划线处填入正 ...

  7. c语言itoa函数用指针怎么写,C语言中实现itoa函数的实例

    搜索热词 C语言中实现itoa函数的实例 一.原型: char *itoa( int value,char *string,int radix); 二.函数说明: value:欲转换的数据. stri ...

  8. c语言itoa函数用指针怎么写,C语言实现itoa函数

    最近在写C语言用到了_itoa函数自己也想着实现一个. 首先要知道_itoa函数是干什么的,在百度百科上对itoa函数有这样一句:"itoa取整数输入值,并将其转换为相应进制数字的字符串.& ...

  9. c语言指针数组课件,C语言指针与数组教程课件.ppt

    C语言指针与数组教程;教学要求;本章主要内容;引子;#include void swap ( int x, int y ) { printf("调用时:x地址为:%p, 值为:%d\n&qu ...

  10. 指针数组下标JAVA_C语言中下标与指针的转换以及指向指针的指针的例子

    下标到指针之间和转换以下的程序做了什么. #include int main() { int a[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}}; int i = ...

最新文章

  1. 查看git当前tag_git对象浅析
  2. Python 初学者的最佳学习资源
  3. 熬夜肝完这份Framework笔记,已拿到offer
  4. plt.errorbar画误差曲线
  5. win7双系统,暴力删除ubuntu后出现grub rescue解决
  6. ios中蓝牙自动连接出现硬件提示框的问题
  7. c#学习-base和this在构造函数中的应用
  8. 2019 ICPC中国邀请赛(南昌)暨国际丝绸之路程序设计竞赛-网络赛题解
  9. Docker部署微服务应用的架构设计
  10. 我拿什么拯救你,混乱的思维?不如试试这3款神器
  11. VS2017配置opencv-c++
  12. nero linux4 序列号,Nero Linux 4 Nero Linux v4.0.0.0b
  13. java 参考期刊文章_计算机论文java参考文献_期刊[J]_学位论文[D]_专著[M]_(30)
  14. 【自学Python:Day2】磨洋工的我一周一课……
  15. 《一个人的朝圣》读后感
  16. 2020年不再迷茫,解密:拼多多无货源店群实操分享!
  17. 有没有被坦克大战支配过?
  18. SF-60/385/4PY智能浪涌保护器 带遥信功能 四川 重庆项目大力推荐应用 带通讯 上防雷系统平台
  19. 面向NLP的AI产品方法论——如何设计多轮语音技能
  20. 笔记:新一代视频压缩编码标准-h.264/AVC

热门文章

  1. YOLOv7 论文翻译
  2. HTML5插入视频音频的方式
  3. 数据结构与算法学习路线
  4. 关于path变量配置出现LRE的问题
  5. 微信小程序输入框光标从中间删除跳到最后bug解决
  6. 水果店圈子:水果店如何快速提高销售额和营业额,精品水果店如何提高营业额
  7. 什么是数字签名?什么是数字证书?密码学知识?
  8. 如何解决Golang项目采用go mod时出现i/o timeout的问题
  9. 跟着Cell学单细胞转录组分析(十三):单细胞GSVA分析|这个包涵盖大多数物种
  10. android使用fontfamily引入ttf