当前位置:网站首页>看【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;
}
边栏推荐
猜你喜欢
Five keys to a successful Industrial IoT deployment
Win11dll文件缺失怎么修复?Win11系统dll文件丢失的解决方法
selenium安装和环境配置Firefox
载20(S)-人参皂苷/细胞穿膜肽-单克隆抗体-载丝裂霉素白蛋白纳米微球的制备
开源一夏 | Web开发(七):登录实现及功能测试
Monitor is easy to Mars debut: distributed operations help TOP3000 across management gap
LeetCode 2343. 裁剪数字后查询第 K 小的数字
Go 语言快速入门指南:第二篇 变量与常量
从技术全景到场景实战,透析「窄带高清」的演进突破
什么是会话劫持以及如何阻止它
随机推荐
shell中awk命令的if条件语句引入外置变量
麦聪DaaS平台 3.7.0 Release 正式发布:全面支持国际化
Win11主题下载一直转圈怎么办?Win11主题下载一直转圈的解决方法
药品研发--工艺技术人员积分和职务考核评估管理办法
selenium安装和环境配置Firefox
进程与线程
请教下,1.0.0和1.0.2的底层数据库表结构有变化吗?
浅谈混迹力扣和codeforces上的几个月
监控易火星版即将亮相:分布式运维帮助TOP3000大企业跨越管理鸿沟
How a "cloud" can bring about new changes in the industry
天翼云4.0来了!千城万池,无所不至!
cache2go-源码阅读
Five keys to a successful Industrial IoT deployment
“12306”的架构到底有多牛逼?
E-Surfing Cloud 4.0 Distributed Cloud Enables Digital Transformation of Thousands of Industries
2022最新彩虹表
[深入研究4G/5G/6G专题-49]: 5G Link Adaption链路自适应-5-上行链路自适应ULLA-PUSCH信道
My recursive never burst stack
leetcode:622. 设计循环队列【循环队列板子】
查看数据库数据量大小,占用磁盘大小