C语言第三十六弹--实现转移表的多种方法

使用C语言通过多种方法实现转移表

方法一、普通法

在这里插入图片描述

思路:如图实现多种操作,首先创建菜单,需要运行一次再判断条件,所以通过do{}while(); 循环来实现多次。有多种选择,使用switch case选择语句,再在对应case内容中实现相应算法即可。

1.创建菜单

 void menu()
{printf("************************\n");printf("************************\n");printf("****1.Sum    2.Sub******\n");printf("****3.Mul    4.Div******\n");printf("*****   0.退出    ******\n");printf("************************\n");printf("************************\n");
}

2.通过do{}while()x循环和switch{}case:选择语句进行操作实现

int main()
{int input = 1;int a = 0, b = 0;int ret = 0;do{menu();//调用菜单显示printf("请输入需要进行的计算模式:");scanf("%d",&input);switch (input)//选择对应操作 不同操作通过不同函数实现{case 1:printf("请输入两个操作数:");scanf("%d %d",&a,&b);Sum(a, b);break;case 2:printf("请输入两个操作数:");scanf("%d %d", &a, &b);Sub(a, b);break;case 3:printf("请输入两个操作数:");scanf("%d %d", &a, &b);Mul(a, b);break;case 4:printf("请输入两个操作数:");scanf("%d %d", &a, &b);Div(a, b);break;case 0:printf("已退出\r\n");break;default:printf("输入有误 请重新输入\n");break;}} while (input);return 0;
}

3.函数方法实现

 int  Sum(int x,int y)
{printf("%d\n",x+y);
}int  Sub(int x, int y)
{printf("%d\n", x - y);
}int Mul(int x, int y)
{printf("%d\n", x * y);
}int  Div(int x, int y)
{printf("%d\n", x / y);
}

总代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>void menu()
{printf("************************\n");printf("************************\n");printf("****1.Sum    2.Sub******\n");printf("****3.Mul    4.Div******\n");printf("*****   0.退出    ******\n");printf("************************\n");printf("************************\n");
}int  Sum(int x,int y)
{printf("%d\n",x+y);
}int  Sub(int x, int y)
{printf("%d\n", x - y);
}int Mul(int x, int y)
{printf("%d\n", x * y);
}int  Div(int x, int y)
{printf("%d\n", x / y);
}//普通法
int main()
{int input = 1;int a = 0, b = 0;int ret = 0;do{menu();printf("请输入需要进行的计算模式:");scanf("%d",&input);switch (input){case 1:printf("请输入两个操作数:");scanf("%d %d",&a,&b);Sum(a, b);break;case 2:printf("请输入两个操作数:");scanf("%d %d", &a, &b);Sub(a, b);break;case 3:printf("请输入两个操作数:");scanf("%d %d", &a, &b);Mul(a, b);break;case 4:printf("请输入两个操作数:");scanf("%d %d", &a, &b);Div(a, b);break;case 0:printf("已退出\n");break;default:printf("输入有误 请重新输入\n");break;}} while (input);return 0;
}

函数指针数组法

思路:通过把函数方法放在指针数组中,并巧妙利用下标和操作数数字相同来调用函数方法。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>void menu()
{printf("************************\n");printf("************************\n");printf("****1.Sum    2.Sub******\n");printf("****3.Mul    4.Div******\n");printf("*****   0.退出    ******\n");printf("************************\n");printf("************************\n");
}int  Sum(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;
}
int main()
{int input = 1;int a = 0, b = 0;int ret = 0;//函数指针数组法int(*ptr[])(int a, int b) = {0,Sum,Sub,Mul,Div};//放入函数指针do{	menu();printf("请输入计算模式:");scanf("%d",&input);if (input <= 4 && input >= 1)//通过if语句来判断输入值是否符合条件{printf("请输入操作数:");scanf("%d %d",&a,&b);int ret=(*ptr[input])(a, b);//调用函数指针中的input方法printf("%d\n",ret);}else if(input==0){printf("退出计算器\n");}else{printf("输入有误 请重新输入\n");}} while (input);return 0;
}

回调函数法

思路:在一个函数方法中,定义一个函数指针来调用函数方法。

总代码如下

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>void menu()
{printf("************************\n");printf("************************\n");printf("****1.Sum    2.Sub******\n");printf("****3.Mul    4.Div******\n");printf("*****   0.退出    ******\n");printf("************************\n");printf("************************\n");
}int  Sum(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 calc(int(*pf)(int, int))
{int ret = 0;int x, y;printf("请输入操作数:");scanf("%d %d",&x,&y);ret = (*pf)(x, y);//函数指针 *pf(可以接收任何方法)printf("%d\r\n",ret);
}
int main()
{int input = 1;int a = 0, b = 0;int ret = 0;do{menu();printf("请输入计算模式:");scanf("%d",&input);switch (input){case 1:calc(Sum);break;case 2:calc(Sub);break;case 3:calc(Mul);break;case 4:calc(Div);break;case 0:printf("已退出\r\n");break;default:printf("输入有误 请重新输入!\r\n");break;}} while (input);return 0;
}

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

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

相关文章

内网渗透(哈希传递)

概念 早期SMB协议明文在网络上传输数据&#xff0c;后来诞生了LM验证机制&#xff0c;LM机制由于过于简单&#xff0c;微软提出了WindowsNT挑战/响应机制&#xff0c;这就是NTLM。 哈希传递前提 同密码(攻击主机与实现主机两台要密码一致)。 NTLM协议 加密ntlm哈希 转换成…

uniapp中uni.navigateBack返回后刷新页面数据

文章目录 一、前言1.1、[uni.navigateBack](https://uniapp.dcloud.net.cn/api/router.html#navigateback) 二、方法2.1、父页面设置钩子函数onBackPress2.2、uni.$emit和uni.$on监听通知数据变更2.2.1、子页面2.2.2、父页面 2.3、onShow钩子函数处理数据2.3.1、子页面2.3.2、父…

使用Python实现SVM来解决二分类问题

下面是一个使用Python实现SVM来解决二分类问题的例子&#xff1a; # 导入所需的库 from sklearn.datasets import make_blobs from sklearn.model_selection import train_test_split from sklearn.svm import SVC import matplotlib.pyplot as plt# 生成一个二分类数据集 X, …

MES系统的功能清单

MES系统的功能清单 一、生产计划管理 1. 订单和生产计划制定&#xff1a;根据客户需求和市场状况&#xff0c;制定生产计划和订单&#xff0c;确保生产资源的合理分配和生产进度的有效管理。 2. 生产排程&#xff1a;根据生产计划和订单&#xff0c;结合设备、人员、物料等资…

iOS 通用链接的配置(Universal Links)

一、打开Associated Domains 1.首先登录 苹果开发者网站 2.Certificates, Identifiers & Profiles 下的Identifiers 找到要配追的Identifiers 点进去 3.打开Associated Domains然后保存 二、更新Profile文件 如果我们使用自动的&#xff0c;可以忽略这一步&#xff0c;…

与珎同行录-开篇-231129

与珎同行录-开篇 珎就是对陪伴并帮助我写代码的AI的昵称 能不能读懂这个绕口令问题呢? 连续的椎体的相邻椎体质心的相邻质心的质心作为当前质心所在的椎体的质心, 该质心的方向代表该椎体的上下方向 如何代码实现呢? 还是没看懂…好吧最终的算法是:

使用Pytorch从零开始构建扩散模型-DDPM

知识回顾: [1] 生成式建模概述 [2] Transformer I&#xff0c;Transformer II [3] 变分自编码器 [4] 生成对抗网络&#xff0c;高级生成对抗网络 I&#xff0c;高级生成对抗网络 II [5] 自回归模型 [6] 归一化流模型 [7] 基于能量的模型 [8] 扩散模型 I, 扩散模型 II 引言 去噪…

什么是量子优势?

量子优势是量子计算领域正在积极努力的里程碑&#xff0c;量子计算机可以解决最强大的非量子或经典计算机无法解决的问题。 量子是指原子和分子的尺度&#xff0c;在这个尺度上&#xff0c;我们所经历的物理定律被打破&#xff0c;并且应用了一组不同的、违反直觉的定律。量子…

西南科技大学数字电子技术实验二(SSI逻辑器件设计组合逻辑电路及FPGA实现 )预习报告

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元件参数过程,越详细越好。用公式输入法完成相关公式内容,不得贴手写图片。(注意:从抽象公式直接得出结果,不得分,页数可根据内容调整) 1、1位半加器 真值表: 逻…

【TC3xx芯片】TC3xx芯片的Clock System功能详解

目录 前言 正文 1.时钟源 1.1 有源晶振和无源晶振 1.1.1 无源晶振 1.1.2 有源晶振 1.1.3 有源晶振和无源晶振的区别 1.1 振荡器电路&#xff08;OSC&#xff09; 1.1.1外部输入时钟模式 1.1.2 外部晶体 / 陶瓷谐振器模式 1.1.3 OSC控制寄存器 1.1.4 配置OSC 1.1.5…

LeetCode(35)螺旋矩阵【矩阵】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 54. 螺旋矩阵 1.题目 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a…

仿制剧情吧网站源码 帝国CMS剧情介绍模板

帝国CMS7.5剧情介绍模板&#xff0c;仿制剧情吧网站的风格。该模板并非用于直接播放电影&#xff0c;而是用文字描述剧情&#xff0c;同时包含手机版。本站免费分享供站长学习研究使用。采用伪静态技术&#xff0c;无需生成HTML。出于美观考虑&#xff0c;自带数据仅供本地环境…

【古月居《ros入门21讲》学习笔记】13_服务数据的定义与使用

目录 说明&#xff1a; 1. 服务模型 2. 实现过程&#xff08;C&#xff09; 自定义服务数据 Person.srv文件内容 Person.srv文件内容说明 编译配置 在package.xml文件中添加功能包依赖 在CMakeLists.txt中添加编译选项 编译生成语言相关文件 创建服务器代码&#xf…

Kafka 保证消息消费全局顺序性

当有消息被生产出来的时候&#xff0c;如果没有指定分区或者指定 key &#xff0c;那么消费会按照【轮询】的方式均匀地分配到所有可用分区中&#xff0c;但不一定按照分区顺序来分配 我们知道&#xff0c;在 Kafka 中消费者可以订阅一个或多个主题&#xff0c;并被分配一个或多…

SpringBoot项目整合Redis,Rabbitmq发送、消费、存储邮件

&#x1f4d1;前言 本文主要是【Rabbitmq】——SpringBoot项目整合Redis&#xff0c;Rabbitmq发送、消费、存储邮件的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页…

安防视频监控/视频融合/云存储EasyCVR页面数据显示不全该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

python环境的搭建+pytharm安装教程

一、Anaconda安装 1、去官网下载anaconda >百度搜索anaconda按回车键 >找到官网地址进去&#xff08;注意看网址&#xff09; >下载位置 2、安装anaconda 具体就安装步骤就不演示了&#xff08;写文章时已经安装好了&#xff09; 二、pycharm安装 1、去官网下载py…

Jmeter--如何监控服务器资源

在我们做项目的性能测试时&#xff0c;需要查看相关服务器的资源使用情况&#xff1b;本文以apache-Jmeter-5.5版本为例&#xff0c;使用PerfMon进行服务器资源监控的方案由两部分来实现&#xff1a;ServerAgent部署在被测服务器&#xff0c;负责资源耗用数据的采集&#xff0c…

代码随想录算法训练营第四十九天【动态规划part10】 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

121. 买卖股票的最佳时机 题目链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 求解思路&#xff1a; 动规五部曲 确定dp数组及其下标含义&#xff1a;使用一个二维数组dp[i][2]&#xff0c;dp[i][0]代表持有股票的最大收益&…

【C++】类型转换 ⑤ ( 常量和非常量之间的类型转换 - 常量类型转换 const_cast | const 左数右指原则 | 代码示例 )

文章目录 一、const 关键字简介1、const 修饰普通数据2、const 修饰指针 ( 左数右指原则 | 指针常量 | 常量指针 ) 二、常量和非常量 之间的类型转换 - 常量类型转换 const_cast1、常量类型转换 const_cast2、常量不能直接修改3、修改常量值的方法4、特别注意 - 确保指针指向的…