用代码实现一个简单计算器

news2025/2/8 10:29:20

作者主页:paper jie的博客_CSDN博客-C语言,算法详解领域博主

本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。

本文录入于《C语言》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将C语言基础知识一网打尽,希望可以帮到读者们哦。

其他专栏:《系统解析C语言》《算法详解》《C语言-语法篇》

内容分享:本期将用C语言实现一个简单的计算器,各位看官姥爷快搬好小板凳坐好叭。

    -------- 不要998,不要98,只要一键三连,三连买不了吃亏,买不了上当

目录

😋前言

🫡实现思想

😏具体代码

😮‍💨代码一

🥳代码二


😋前言

计算器大家在生活学习中都接触过,是对于我们运算速度提升的一种很方便的工具。今天,我们就用C语言代码来实现一个简单计算器的功能。在这个过程中,我们会用到循环,函数,指针等一些知识,代码很简单,易理解,大家不用担心,可以很好的理解的。

🫡实现思想

需要设置一个菜单,提示如何操作

我们要可以多次计算,且可以退出计算程序。

我们要用函数将我们需要实现的功能封装起来。

我们要接收函数计算的结果,显示出来。

😏具体代码

😮‍💨代码一

int add(int x, int y)
{
	return x + y;
}
//减法
int sub(int x, int y)
{
	return x - y;
}
//乘法
int mull(int x, int y)
{
	return x * y;
}
//除法
int div(int x, int y)
{
	return x / y;
}
//菜单
void menu()
{
	printf("*****************************\n");
	printf("*****************************\n");
	printf("*****1:add         2:sub*******\n");
	printf("*****3:mull        4:div********\n");
	printf("*****************************\n");
	printf("*****************************\n");
}

int main()
{
	int input = 0;
	int x = 0;
	int y = 0;
	menu();
	//多次使用 当input==0时,停止
	do
	{
		printf("请选择:>");
		scanf("%d", &input);
		//根据input的值来选择要计算的方法
		switch (input)
		{
		case 0:
			printf("退出程序\n");
			break;
		case 1:
			printf("请输入:\n");
			scanf("%d %d", &x, &y);
			printf("%d\n", add(x, y));
			break;
		case 2:
			printf("请输入:\n");
			scanf("%d %d", &x, &y);
			printf("%d\n", sub(x, y));
			break;
		case 3:
			printf("请输入:\n");
			scanf("%d %d", &x, &y);
			printf("%d\n", mull(x, y));
			break;
		case 4:
			printf("请输入:\n");
			scanf("%d %d", &x, &y);
			printf("%d\n", div(x, y));
			break;
			//其他数都错误
		default:
			printf("输入错误,请重新选择\n");
			break;
		}
	} while (input);
	return 0;
}

到这就实现了计算器的功能,但是我们发现这里面的代码有些地方非常的冗余,出现的多组重复的代码,我们一旦要加功能进去,重复的代码就会更加多。

🥳代码二

int add(int x, int y)
{
	return x + y;
}
//减法
int sub(int x, int y)
{
	return x - y;
}
//乘法
int mull(int x, int y)
{
	return x * y;
}
//除法
int div(int x, int y)
{
	return x / y;
}
//菜单
void menu()
{
	printf("*****************************\n");
	printf("*****************************\n");
	printf("*****1:add         2:sub*******\n");
	printf("*****3:mull        4:div********\n");
	printf("*****************************\n");
	printf("*****************************\n");
}

int main()
{
	int input = 1;
	int x = 0;
	int y = 0;
	int ret = 0;
	menu();
	//函数指针数组
	//将函数的地址都作为一个指针放到arr数组中了
	//这就是一个转移表
	int (*arr[5])(int, int) = { NULL, add, sub, mull, div };
	//input为0退出 其他继续
	while (input)
	{
		printf("请选择:>");
		scanf("%d", &input);
		
		if (input <= 4 && input >= 1)
		{
			printf("请输入:");
			scanf("%d %d", &x, &y);
			//通过函数指针解引用找到函数求值赋给ret
			ret = (*arr[input])(x, y);
			printf("%d\n", ret);
		}
		else if (input == 0)
			printf("退出程序\n");
		else
			printf("输入错误,请重新输入\n");
	}
	return 0;
}

现在的代码就已经很简洁了,再想加功能,直接将加进来的函数指针放到arr数组中,代码也不会变得冗余,且容易增加。这里我们就是运用了函数指针数组的作用,做了一个转移表,将函数指针放到arr数组中,通过数组来找到函数。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646239.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

管理类联考——逻辑——知识篇——第四章 联言、选言(且、或)(5题,必考)

第四章 联言、选言&#xff08;且、或&#xff09;&#xff08;5题&#xff0c;必考&#xff09; 一、联言命题 联言命题是反映事物的若干种情况或者性质同时存在的复合命题 1.常见表达形式&#xff1a;A且B⟺即A又B⟺AB⟺虽然A但是B&#xff08;语气强调B&#xff0c;逻辑是…

配置GitLab账号登录SonarQube

gitlab账号集成到sonarqube 创建个人访问令牌 确认之后可获得 来到sonarqube界面&#xff0c;创建gitlab配置 gitlab地址后面加上/api/v4 将访问令牌粘贴过来 保存即可 回到gitlab添加应用&#xff0c;名称随意最好有意义一眼知道是干嘛的 URI是sonarqube地址/oauth2/callback…

JavaSE进阶——网络编程

文章目录 前言一、网络编程二、通信1、两个重要的要素2、通信协议 三 、Socket四、基于TCP的网络编程1、单向通信1.1 服务端1.2 客户端 2、双向通信2.1 服务端2.2 客户端 3、传输对象3.1 服务端3.2 客户端 4、保持通信4.1 服务端4.2 客户端 五、基于UDP的网络编程1、单向通信1.…

软件开发流程管理中的6个重点

1、需求的确定 充分了解用户真实需求&#xff0c;与用户保持沟通交流&#xff1b;需求文档需详尽、准确&#xff0c;明确功能和客户期望&#xff1b;确保需求的合理性、完整性和可行性&#xff0c;并对需求进行优先级排序。 软件开发流程管理中的6个重点 2、设计原则 设计包括概…

【机器学习】一个简单的神经网络例子教你理解前向传播

在开始这个例子前&#xff0c;希望你已经了解了神经网络的相关内容&#xff0c;可以参见如下文章 https://blog.csdn.net/weixin_45434953/article/details/131048661 在计算机中&#xff0c;有一种很基础的运算称之为与运算&#xff0c;这是一个二元运算符&#xff0c; x 1 &…

web前端-TypeScript学习

web前端-TypeScript学习 TypeScript 介绍TypeScript 初体验安装编译TS的工具包编译并运行TS代码 TypeScript 常用类型类型注解常用基础类型原始类型数组类型类型别名函数类型对象类型接口元祖类型推论类型断言字面量类型枚举any类型typedof TypeScript 高级类型class类class的基…

6.Opencv-图像腐蚀、膨胀(开运算,闭运算)

1.图像腐蚀 这个操作会把前景物体的边界腐蚀掉。这是怎么做到的呢&#xff1f;卷积核沿着图像滑动&#xff0c;如果与卷积核对应的图像的所有像素值都是1&#xff0c;那么该区域的所有像素值就是1&#xff0c;否则为0。用于去除白噪声和断开两个连在一起的物体等。 语法&…

剑走偏锋,无头浏览器是什么神奇的家伙

大家好&#xff0c;我是风筝&#xff0c;公众号「古时的风筝」&#xff0c;专注于 Java技术 及周边生态。 我的个人网站&#xff1a;古时的风筝 浏览器是再熟悉不过的东西了&#xff0c;几乎每个人用过&#xff0c;比如 Chrome、FireFox、Safari&#xff0c;尤其是我们程序员&a…

ASEMI代理台湾光宝LTV-3120光耦合器中文资料

编辑-Z LTV-3120是一种高性能光耦&#xff0c;由于其可靠性、效率和多功能性&#xff0c;在各种应用中都很受欢迎。本文将全面了解LTV-3120其功能、应用以及它如何改进您的电子设计。 什么是光电耦合器&#xff1f; 光耦&#xff0c;也称为光隔离器&#xff0c;是一种利用光在…

时序数据库的流计算支持

一、时序数据及其特点 时序数据&#xff08;Time Series Data&#xff09;是基于相对稳定频率持续产生的一系列指标监测数据&#xff0c;比如一年内的道琼斯指数、一天内不同时间点的测量气温等。时序数据有以下几个特点&#xff1a; 历史数据的不变性数据的有效性数据的时效…

Linux:cp、mv、rm命令

1、cp命令&#xff1a;用于复制文件/文件夹&#xff0c;语法&#xff1a; cp [-r] 参数1 参数2 r参数可选&#xff0c;用于对文件夹进行复制&#xff0c;表示递归 参数1&#xff1a;Linux路径&#xff0c;表示被复制的文件或文件夹 参数2&#xff1a;Linux&#xff0c;表示要复…

数据库期末复习第一章(看完包过)

目录 第一章 第一章 主要是一些概念&#xff0c;了解几个基本概念&#xff0c;并且记住英文缩写 DB是数据库&#xff08;database&#xff09; 0.数据 Data 1.数据库 DB &#xff08;database 数据库&#xff09; 2.数据库管理系统 DBMS &#xff08;M&#xff1a;mange 管…

论文解读 | 基于蒙特卡罗树搜索的触觉目标识别主动末端执行器姿态选择

原创 | 文 BFT机器人 本论文提出了一种新颖的方法&#xff0c;使用仅触觉来进行主动物体识别。该算法通过蒙特卡罗树搜索来选择最佳的手腕姿态序列进行物体识别。 具体来说&#xff0c;该算法将问题建模为马尔可夫决策过程&#xff08;MDP&#xff09;&#xff0c;并通过观察和…

记一次简单的SQL调优

记一次简单的SQL调优 前言排查分析问题分析SQL的执行流程存在的问题优化思路 验证解决验证执行流程一些执行计划的基本知识 优化先执行where条件过滤不需要的行&#xff0c;再进行左连接提示排序走索引为常用查询条件创建索引调整查询条件的顺序 前言 相信大家对后端数据库的S…

【Uniapp】小程序携带Token请求接口+无感知登录方案2.0

本次改进原文《【Uniapp】小程序携带Token请求接口无感知登录方案》&#xff0c;在实际使用过程中我发现以下bug&#xff1a; 若token恰好在用户访问接口时到期&#xff0c;就会直接查询为空&#xff0c;不反映token过期问题&#xff08;例如&#xff1a;弹窗显示订单查询记录…

使用python脚本将视频素材转化为图片数据集并打标

1.前言 在深度学习的训练过程中&#xff0c;第一步要做的制作数据集。本文所介绍的内容就是在面临视频素材时&#xff0c;如何将这个视频素材转换成图片&#xff0c;并将生成的图片给打上标签。 2.视频转图片的代码展示 # codingutf-8 import cv2 import osroot "F:\H…

MySQL数据库及基础操作

MySQL数据库 一、数据库的基本概念二、数据库发展史1、第一代数据库2、第二代数据库3、第三代数据库 三、当今主流数据库介绍四、关系型数据库1、结构2、理解关系数据库 五、非关系数据库六、数据库基本操作1、常用的数据类型2、查看数据库结构3、SQL语句3.1 DDL3.2 DML3.3 DQL…

pycharm 命令行创建版本库

pycharm中已建好的项目如何上传自已的git服务器中 通过命令行创建一个新的版本库 touch README.mdgit initgit add README.mdgit commit -m "first commit"git remote add origin ssh://XXXXip:29418/newbb.gitgit push -u origin master 通过命令行推送一个已存在的…

数据挖掘课件01-07

1、数挖的定义、产生原因&#xff0c;解决问题 数据挖掘就是寻找数据中隐含的知识并用于产生商业价值。 数据挖掘产生动因&#xff1a;海量数据、维度众多、问题复杂 解决问题&#xff1a;分类问题&#xff0c;聚类问题、回归问题、关联问题、 分类算法&#xff1a;C4.5&…

微信如何设置快速回复?

目前微信线上沟通已经成为绝大多数人士的首选&#xff0c;尤其不管是企业还是个人&#xff0c;都会利用微信打造私域。而做微信沟通的话&#xff0c;大家最为关心的就是怎么做到最快捷的回复对方。 可以看看这个功能&#xff0c;提前设置好常见问题的回复话术&#xff0c;可个…