方法一:常规方法

#include<stdio.h>int Add(int a, int b)
{return a + b;
}
int Sub(int a, int b)
{return a - b;
}
int Mul(int a, int b)
{return a * b;
}
int Div(int a, int b)
{return a / b;
}void menu()
{printf("****************************\n");printf("***** 1.add      2.sub *****\n");printf("***** 3.mul      4.div *****\n");printf("******     0.exit      *****\n");printf("****************************\n");
}
int main()
{int input = 1;int x = 0;int y = 0;int ret = 0;while (input){menu();printf("请选择:");scanf_s("%d", &input);if (input >= 1 && input <= 4){printf("输入两个数:");scanf_s("%d%d", &x, &y);}switch (input){case 1:ret = Add(x, y);break;case 2:ret = Sub(x, y);break;case 3:ret = Mul(x, y);break;case 4:ret = Div(x, y);break;case 0:printf("退出\n");break;default:printf("输入错误\n");break;}printf("ret = %d\n", ret);}return 0;
}

方法二:函数指针数组法

#include<stdio.h>int Add(int a, int b)
{return a + b;
}
int Sub(int a, int b)
{return a - b;
}
int Mul(int a, int b)
{return a * b;
}
int Div(int a, int b)
{return a / b;
}void menu()
{printf("****************************\n");printf("***** 1.add      2.sub *****\n");printf("***** 3.mul      4.div *****\n");printf("******     0.exit      *****\n");printf("****************************\n");
}
int main()
{int input = 1;int x = 0;int y = 0;int ret = 0;int(*p[5])(int, int) = { 0, Add, Sub, Mul, Div };   //有五个元素是为了方便标号对齐while (input){menu();printf("请选择:");scanf_s("%d", &input);if (input >= 1 && input <= 4){printf("输入两个数:");scanf_s("%d%d", &x, &y);ret = p[input](x, y);printf("ret = %d\n", ret);}}return 0;
}

方法三:回调函数法

#include<stdio.h>int Add(int a, int b)
{return a + b;
}
int Sub(int a, int b)
{return a - b;
}
int Mul(int a, int b)
{return a * b;
}
int Div(int a, int b)
{return a / b;
}void menu()
{printf("****************************\n");printf("***** 1.add      2.sub *****\n");printf("***** 3.mul      4.div *****\n");printf("******     0.exit      *****\n");printf("****************************\n");
}void calc(int (*pfun) (int, int))
{int x = 0;int y = 0;int ret = 0;printf("输入两个数:");scanf_s("%d%d", &x, &y);ret = pfun(x, y);printf("ret = %d\n", ret);
}
int main()
{int input = 1;int(*p[5])(int, int) = { 0, Add, Sub, Mul, Div };while (input){menu();printf("请选择:");scanf_s("%d", &input);if (input >= 1 && input <= 4){calc(p[input]);          //传输的是加减乘除函数的地址}}return 0;
}

C语言写一个计算器的三种方法相关推荐

  1. 用C语言写一个计算器

    用C语言写一个计算器,除了四则混合运算之外,还支持三角函数和绝对值等函数. PS E:\Code\PL\calc> .\a.exe abs(3*5-4^2) abs(3*5-4^2)=1.000 ...

  2. c语言数组最大可定义多少位_C语言求数组的最大值三种方法

    /* 黄哥Python培训 黄哥所写*/#include int maxValue(int* arr, int n);int maxRecursionValue(int* arr, int n);in ...

  3. php 去掉后导字符,PHP去除字符串最后一个字符的三种方法实例

    前言 本文讲讲PHP中如何正确的去除字符串中的最后一个字符,之前跟大家分享过一篇关于PHP去除字符串最后一个字符的三种方法的文章,但是没给出实例,下面话不多说,直接上代码,相信一眼就能看出来了,直接将 ...

  4. 禁止手机侧滑返回上一个页面的三种方法

    禁止手机侧滑返回上一个页面的三种方法 侧滑返回上一个页面用户体验很很好.但是在特别的场景侧滑返回上一个页面严重影响用户体验: 1.如正在斗地主,结果在出牌时,由于出最左边的牌时,不小心触发了侧滑离开斗 ...

  5. 【C语言】输出闰年的三种方法

    系列文章目录 C语言基础整体框架(二)http://t.csdn.cn/QyW6l C语言基础整体框架(二)http://t.csdn.cn/BqPr5 猜数字游戏--分支循环 http://t.cs ...

  6. Shell 脚本调用另一个脚本的三种方法

    文章目录 1.source 2.点号. 3.sh 命令 4.三者的区别 5.export 命令设置临时环境变量 6.export 命令设置永久环境变量 参考文献 假如有脚本 first.sh: #!/ ...

  7. C语言求最大公约数的三种方法

    最大公约数是两个数可以同时整除的数中最大的那个 这里用三种方法来解决 穷举法求最大公约数 判断x和y的最大公约数,x和y其中一定有一个相对较小的数,然后从这个较小数开始遍历,不断地用x和y去除这个数, ...

  8. 监督学习:KNN(K-近邻)算法实现手写数字识别的三种方法

    没人会看的开场白:本来觉得自己从数据建模转人工智能方向应该问题不大(自我感觉自己算法学的不错).结果一个K-邻近实现手写数字识别的代码就让我改了三四天.虽然网上这方面的代码是很多,但是我运行了好几个, ...

  9. delphi 只允许运行一个实例的三种方法《转》

    一.创建互斥对象 在工程project1.dpr中创建互斥对象 Program project1UsesWindows,Form,FrmMain in 'FrmMain.pas' {MainForm} ...

  10. c语言求字符串长度的三种方法(部分略微优化)

    求字符串的长度,很多人都会直接想到用strlen函数,只需要头文件string.h就可以很轻松的实现,但对于我们c语言的初学者,也应该尝试用其他方法来进行实现,除了strlen函数外有三种方法可供参考 ...

最新文章

  1. Android Studio添加代码头注释使用
  2. jackson 反序列化string_java – 使用Jackson对数组进行反序列化
  3. 网络延迟造成插入多条重复数据
  4. decose oracle_ORACLE会话连接进程三者总结
  5. HTML5标准有缺陷 手机电池信息可泄露上网活动
  6. python学习手册第五版_自学笔记系列:《Python学习手册 第五版》 -写在开始之前...
  7. EasyRecovery2022真正不收费的数据恢复软件
  8. 机票订票b系统的服务器,飞机订票系统分析与总结
  9. python在idle中输入多行_pythonidle中多行输入
  10. 光学系统设计学习笔记1
  11. IP地址绕过 . 拦截
  12. UGUI源码分析:开关组件Toggle与ToggleGroup
  13. 基于51单片机十字路口交通信号灯(启动按键+绿灯同亮报警)
  14. ubuntu 配置本地源
  15. 对SingleTask和TaskAffinity的理解
  16. 程序员写代码要写注释吗?写你就输了
  17. 使用httpclient时报错NoHttpResponseException failed to respond
  18. 为什么我们需要软件定制化?
  19. 【读点论文】Swin Transformer: Hierarchical Vision Transformer using Shifted Windows通过窗口化进行局部MSA,sw-MSA融合信息
  20. 研发项目工时统计工具哪个好?9大工时管理系统盘点

热门文章

  1. ARM与x86–蝶变ARM
  2. #怎样获取当前时间和时区_JDK1.8新增日期时间类型
  3. pythonnet 引用_Python netmiko模块的使用
  4. itext 表格宽度自适应_微信公众号推文中如何自定义添加表格?
  5. 怎么把mysql 查询数据_如何使用查询字符串值从数据库中查询数据
  6. 设定asp服务器外部组件对象的方法是,ASP 3.0对ASP 2.0的改进
  7. STL中常用容器的数据结构与底层实现
  8. CCNA 网络安全答案汇总
  9. xs资料网-jdpaint编程图档下载_限时下载 | 西门子、三菱、欧姆龙PLC电气设计与编程自学宝典(3册)...
  10. 查看CSDN历史下载明细