简单计算器的实现(含转移表实现)

在这里插入图片描述

文章目录

  • 计算器的一般实现
  • 使⽤函数指针数组的实现(转移表)

计算器的一般实现

通过函数的调用,实现加减乘除

# define _CRT_SECURE_NO_WARNINGS#include<stdio.h>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;
}void menu() {printf("*****************************************\n");printf("*********1.Add***************************\n");printf("*********2.Sub***************************\n");printf("*********3.Mul***************************\n");printf("*********4.Div***************************\n");printf("*********0.exit**************************\n");printf("*****************************************\n");
}int main() {int x = 0;int y = 0;int input = 0;int ret = 0;do {menu();printf("请选择:> ");scanf("%d",&input);switch (input){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 = Mul(x, y);printf("%d\n", ret);break;case 4:printf("请输入操作数:> ");scanf("%d %d", &x, &y);ret = Div(x, y);printf("%d\n", ret);break;case 0:printf("退出程序\n");break;default:printf("输入错误,请重新输入\n");break;}} while (input);return 0;
}

使⽤函数指针数组的实现(转移表)

前面,我们使用调用函数的方式,来实现计算器的基本功能。

但是,在一些牛逼的计算器中,实现的功能会更多,不仅实现加减乘除,还能实现位运算等。

那么,我们还是依然去调用函数吗?switch语句也会越来越长

会不会有点麻烦啦?

于是,我们需要在上面的基础上进行更改。

简化代码:

# define _CRT_SECURE_NO_WARNINGS# define _CRT_SECURE_NO_WARNINGS#include<stdio.h>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;
}void menu() {printf("*****************************************\n");printf("*********1.Add***************************\n");printf("*********2.Sub***************************\n");printf("*********3.Mul***************************\n");printf("*********4.Div***************************\n");printf("*********0.exit**************************\n");printf("*****************************************\n");
}int main() {int x = 0;int y = 0;int input = 0;int ret = 0;//函数指针数组int(*pfArr[])(int x,int y) = { 0,Add,Sub,Mul,Div };   //转移表//  0  1   2   3   4do {menu();printf("请选择:> ");scanf("%d", &input);if (input >= 1 && input <= 4) {printf("请输入操作数:>");scanf("%d %d", &x, &y);ret =(*pfArr[input])(x, y);printf("%d\n", ret);}else if (input == 0) {printf("退出程序\n");}else {printf("输入错误,重新输入\n");}} while (input);return 0;
}

在这里插入图片描述

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

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

相关文章

【OpenCV】OpenCV环境搭建,Mac系统,C++开发环境

OpenCV环境搭建&#xff0c;Mac系统&#xff0c;C开发环境 一、步骤VSCode C环境安装运行CMake安装运行OpenCV 安装CMakeList 一、步骤 VSCode C环境安装CMake 安装OpenCV 安装CmakeList.txt VSCode C环境安装运行 访问官网 CMake安装运行 CMake官网 参考文档 OpenCV 安…

服务注册中心 Eureka

服务注册中心 Eureka Spring Cloud Eureka 是 Netflix 公司开发的注册发现组件&#xff0c;本身是一个基于 REST 的服务。提供注册与发现&#xff0c;同时还提供了负载均衡、故障转移等能力。 Eureka 有 3 个角色 服务中心&#xff08;Eureka Server&#xff09;&#xff1a;…

vue项目配置git提交规范

vue项目配置git提交规范 一、背景介绍二、husky、lint-staged、commitlint/cli1.husky2.lint-staged3.commitlint/cli 三、具体使用1.安装依赖2.运行初始化脚本3.在package.json中配置lint-staged4.根目录新增 commitlint.config.js 4.提交测试1.提示信息格式错误时2.eslint校验…

java:解析XML文件

文章目录 XML组成部分约束 解析解析xml的方式xml常见的解析器Jsoup详解Jsoup 相关对象的使用&#xff1a;快捷查询方式 XML 概念&#xff1a;Extensible Markup Language 可扩展标记语言。 功能&#xff1a;存储数据 配置文件在网络中传输 xml与html的区别&#xff1a; 3. …

elementPlus-tree 自定义展开,收起图标

elementPlus-tree 自定义展开&#xff0c;收起图标 <template><div><el-tree:data"treeData"default-expand-allhighlight-current:expand-on-click-node"false"><template #default"{ node, data }"><span><…

数据结构好题总结

Cut Inequality Down 题解 https://blog.csdn.net/lzh_naive/article/details/103340568 概括&#xff1a;st表倍增类st表 考虑如果没有UL限制的话&#xff0c;相当于是前缀和 我们发现&#xff0c;如果某次到了U/L&#xff08;相当于是一次碰壁&#xff09;那么这个值已知…

线程池的实现v2.0(可伸缩线程池)

目录 前言 可伸缩线程池原理 可伸缩线程池实现 完整程序 前言 本篇可伸缩线程池的实现是在静态线程池上拓展而来&#xff0c;对于静态线程池的实现&#xff0c;请参考&#xff1a; 线程池的实现全过程v1.0版本&#xff08;手把手创建&#xff0c;看完必掌握&#xff01;&…

Java课题笔记~Element UI

Element&#xff1a;是饿了么公司前端开发团队提供的一套基于 Vue 的网站组件库&#xff0c;用于快速构建网页。 Element 提供了很多组件&#xff08;组成网页的部件&#xff09;供我们使用。例如 超链接、按钮、图片、表格等等~ 如下图左边的是我们编写页面看到的按钮&#…

5G与4G的RRC协议之异同

什么是无线资源控制&#xff08;RRC&#xff09;&#xff1f; 我们知道&#xff0c;在移动通信中&#xff0c;无线资源管理是非常重要的一个环节&#xff0c;首先介绍一下什么是无线资源控制&#xff08;RRC&#xff09;。 手机和网络通过无线信道相互通信&#xff0c;彼此交…

【踩坑日记】STM32 USART 串口与 FreeRTOS 冲突

文章目录 问题描述问题出现的环境问题解决过程第一步第二步第三步第四步第五步第六步第七步第八步 后续验证一些思考类似的问题后记 问题描述 笔者使用 FreeRTOS 创建了两个任务&#xff0c;使两颗 LED 以不同频率闪烁&#xff0c;但是在加入串口 USART 部分代码后&#xff0c…

【官方中文文档】Mybatis-Spring #简介

简介 什么是 MyBatis-Spring&#xff1f; MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中&#xff0c;创建映射器 mapper 和 SqlSession 并注入到 bean 中&#xff0c;以及将 Mybatis 的异常转换为 Spring 的…

先进封装技术:满足5G、AI和高性能计算的关键

先进封装技术&#xff1a;满足5G、AI和高性能计算的关键 目录 引言&#xff1a;先进封装技术的重要性先进封装技术的定义和种类为何先进封装技术至关重要先进封装技术在高性能计算中的应用先进封装技术在人工智能中的应用先进封装技术在5G技术中的应用先进封装技术的挑战和未…

Mysql 开窗函数(窗口函数)

文章目录 全部数据示例1&#xff08;说明&#xff09;开窗函数可以比groupby多查出条件列外的字段&#xff0c;开窗函数主要是为了跟聚合函数一起使用&#xff0c;达到分组统计效果&#xff0c;并且开窗函数的结果集基本都是跟总行数一样示例2示例3示例4错误示例1错误示例2错误…

Flink源码之Checkpoint执行流程

Checkpoint完整流程如上图所示&#xff1a; JobMaster的CheckpointCoordinator向所有SourceTask发送RPC触发一次CheckPointSourceTask向下游广播CheckpointBarrierSouceTask完成状态快照后向JobMaster发送快照结果非SouceTask在Barrier对齐后完成状态快照向JobMaster发送快照结…

LION AI 大模型落地,首搭星纪元 ES

自新能源汽车蓬勃发展以来&#xff0c;随着潮流不断进步和变革的“四大件”有着明显变化。其中有&#xff1a;平台、智能驾驶、配置、以及车机。方方面面都有着不同程度的革新。 而车机方面&#xff0c;从以前老旧的媒体机、 CD 机发展至如今具有拓展性、开放性、智能化的车机…

[保研/考研机试] KY207 二叉排序树 清华大学复试上机题 C++实现

题目链接&#xff1a; 二叉排序树_牛客题霸_牛客网二叉排序树&#xff0c;也称为二叉查找树。可以是一颗空树&#xff0c;也可以是一颗具有如下特性的非空二叉树&#xff1a; 1。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/437195121692721757794 描述&#x…

滑动窗口介绍

1.基本概念 利用单调性&#xff0c;使用同向双指针&#xff0c;两个指针之间形成一个窗口 子串与子数组都是连续的一段子序列时不连续的 2.为什么可以用滑动窗口&#xff1f; 暴力解决时发现两个指针不需要回退&#xff08;没必要回退&#xff0c;一定不会符合结果&#xf…

【网络】数据链路层——MAC帧协议 | ARP协议

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《网络》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 来到数据链路层后&#xff0c;完整的数据被叫做数据帧&#xff0c;习惯上称之为MAC帧。 MAC帧协议 | A…

jenkins全量迁移

文章目录 1、目的2、迁移1&#xff09;查看jenkins的主目录2&#xff09;登录要迁出的服务器打包3&#xff09;找到对应的war包4&#xff09;登录对应迁入服务&#xff0c;上传war包和打包的jenkins数据等5&#xff09;在新的服务器解压迁入的数据等&#xff0c;并查看端口是否…

ES5 的构造函数和 ES6 的类有什么区别

文章目录 语法不同方法定义方式不同继承方式不同类内部的this指向不同静态成员定义方式不同访问器属性类的类型检查 在JavaScript中&#xff0c;类和构造函数都被用来创建对象&#xff0c;接下来会从以下几点说说两者的区别&#xff1a; 语法不同 构造函数使用函数来定义类使用…