当前位置:网站首页>看【C语言】实现简易计算器教程,让小伙伴们为你竖起大拇指
看【C语言】实现简易计算器教程,让小伙伴们为你竖起大拇指
2022-08-02 18:12:00 【eat_sleep_play( )】
目录
1.实现逻辑
实现一个简易的计算器,可以计算两个整数的加减乘除
2.运行过程
3.优化前代码分析
主函数
int main()
{
int x = 0;
int y = 0;
int ret = 0;
int input = 0;
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 0:
printf("退出计算器\n");
break;
case 1:
printf("请输入两个操作数:");
scanf("%d %d", &x, &y);
ret = Add(x, y);
printf("%d\n", ret);
break;
case 2:
printf("请输入两个操作数:");
scanf("%d %d", &x, &y);
ret = Sub(x, y);
printf("%d\n", ret);
break;
case 3:
printf("请输入两个操作数:");
scanf("%d %d", &x, &y);
ret = Wul(x, y);
printf("%d\n", ret);
break;
case 4:
printf("请输入两个操作数:");
scanf("%d %d", &x, &y);
ret = Div(x, y);
printf("%d\n", ret);
break;
default:
printf("输入错误\n");
break;
}
} while (input);
return 0;
}
利用switch语句选择要进行的计算方式,利用do while 来实现是继续计算还是退出计算器。case语句分别调用了不同的计算函数。
计算函数
int Add(int x, int y)//加法函数
{
return x + y;
}
int Sub(int x, int y)//减法函数
{
return x - y;
}
int Wul(int x, int y)//乘法函数
{
return x * y;
}
int Div(int x, int y)//除法函数
{
return x / y;
}
4.优化后代码分析
主函数
int main()
{
int input = 0;
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 0:
printf("退出计算器\n");
break;
case 1:
salc(Add);
break;
case 2:
salc(Sub);
break;
case 3:
salc(Wul);
break;
case 4:
salc(Div);
break;
default:
printf("输入错误\n");
break;
}
} while (input);
return 0;
}
利用switch语句选择要进行的计算方式,利用do while 来实现是继续计算还是退出计算器。case语句的参数是计算方法函数的函数名,也是函数的地址。
计算方法函数
int Add(int x, int y)//加法函数
{
return x + y;
}
int Sub(int x, int y)//减法函数
{
return x - y;
}
int Wul(int x, int y)//乘法函数
{
return x * y;
}
int Div(int x, int y)//除法函数
{
return x / y;
}
计算函数,用来完成两个整数的计算。返回的值就是计算的结果。
输入操作数的函数
void salc(int (*pf)(int, int))
{
int x = 0;
int y = 0;
int ret = 0;
printf("请输入两个操作数:");
scanf("%d %d", &x, &y);
ret = pf(x, y);
printf("%d\n", ret);
}
因为传过来的是函数的地址,所以要使用一个指针来接受,这就是一个函数指针。
5.完整代码展示
#include<stdio.h>
void menu()
{
printf("***************************\n");
printf("****** 1.Add 2.Sub ******\n");
printf("****** 3.Mul 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 Wul(int x, int y)//乘法函数
{
return x * y;
}
int Div(int x, int y)//除法函数
{
return x / y;
}
//回调函数
void salc(int (*pf)(int, int))
{
int x = 0;
int y = 0;
int ret = 0;
printf("请输入两个操作数:");
scanf("%d %d", &x, &y);
ret = pf(x, y);
printf("%d\n", ret);
}
int main()
{
int input = 0;
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 0:
printf("退出计算器\n");
break;
case 1:
salc(Add);
break;
case 2:
salc(Sub);
break;
case 3:
salc(Wul);
break;
case 4:
salc(Div);
break;
default:
printf("输入错误\n");
break;
}
} while (input);
return 0;
}
边栏推荐
- E-Surfing Cloud 4.0 Distributed Cloud Enables Digital Transformation of Thousands of Industries
- 2022最新彩虹表
- shell中awk命令的if条件语句引入外置变量
- Win11主题下载一直转圈怎么办?Win11主题下载一直转圈的解决方法
- 洛谷P2574 XOR的艺术
- Win11dll文件缺失怎么修复?Win11系统dll文件丢失的解决方法
- 开源一夏 | Web开发(七):登录实现及功能测试
- LeetCode 2336. 无限集中的最小数字(SortedSet)
- How to ensure the security of smart factories?
- TSF微服务治理实战系列(一)——治理蓝图
猜你喜欢
力扣 622. 设计循环队列
天翼云4.0来了!千城万池,无所不至!
成功部署工业物联网的五个关键
Open Source Summer | [Cloud Native] DevOps (5): Integrating Harbor
基于HDF的LED驱动程序开发(1)
Detailed explanation of AtomicInteger
为何国内年轻人都抢购iPhone,因为它更实惠也更亲民
Sentinel vs Hystrix 限流对比,到底怎么选?
宝塔搭建实测-基于ThinkPHP5.1的wms进销存源码
What skills are the most practical for college students in communications?
随机推荐
魔豹联盟:佛萨奇2.0dapp系统开发模式详情
进程与线程
洛谷P4799 世界冰球锦标赛
How a "cloud" can bring about new changes in the industry
WPF使用Prism登录
shell中awk命令的if条件语句引入外置变量
无法超越的100米_百兆以太网传输距离_网线有哪几种?
How to build a quasi-real-time data warehouse?
golang刷leetcode 字符串(4)逆波兰式
「日志」深度学习 CUDA环境配置
洛谷P4316 绿豆蛙的归宿
浅谈一下pyd文件的逆向
如何应对机器身份带来的安全风险
Mobile Banking Experience Test: How to Get the Real User Experience
Data Governance: The Evolution of Data Integration and Application Patterns
力扣 622. 设计循环队列
How can services start smoothly under tens of millions of QPS
Why young people are snapping up domestic iPhone, because it is much cheaper and more populist
golang刷leetcode 经典(2)拓扑排序
C# 术语