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的昵称 能不能读懂这个绕口令问题呢? 连续的椎体的相邻椎体质心的相邻质心的质心作为当前质心所在的椎体的质心, 该质心的方向代表该椎体的上下方向 如何代码实现呢? 还是没看懂…好吧最终的算法是:

前端css常用的几种布局方式(推)

目录 静态布局: 布局特点&#xff1a; 设计方法: PC : 移动端&#xff1a; 优点&#xff1a; 缺点&#xff1a; 流式布局&#xff1a; 布局特点&#xff1a; 设计方法&#xff1a; 缺点&#xff1a; 自适应布局&#xff1a; 布局特点&#xff1a; 设计方法&#…

使用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;并且应用了一组不同的、违反直觉的定律。量子…

Python与ArcGIS系列(十二)InsertCursor方法

目录 0 简述1 准备工作2 InsertCursor插入行0 简述 插入游标(InsertCursor)对象可以向表或要素类中插入行,如果想在新行中插入属性值,需要按照属性表中字段顺序依次赋值。本篇将介绍如何利用arcpy实现通过InsertCursor方法插入行。 1 准备工作 InsertCursor()函数可用于创…

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

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

Vue3指令:搜索框输入防抖实现(附源码)

在Vue3中&#xff0c;我们可以使用v-debounce指令来实现搜索框输入防抖。首先&#xff0c;我们需要安装一个名为lodash.debounce的库&#xff0c;然后创建一个自定义指令v-debounce。 安装lodash.debounce库&#xff1a; npm install lodash.debounce --save创建一个自定义指…

【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;自带数据仅供本地环境…

springboot(ssm大学生家教管理系统 在线家教平台Java(codeLW)

springboot(ssm大学生家教管理系统 在线家教平台Java(code&LW) 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&…

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

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

环境变量、0.0.0.0和localhost和127.0.0.1的区别、get请求能不能携带请求体

【1】环境变量 环境变量&#xff1a;为了满足不同的应用场景而预先在系统内设置的一堆全局变量 作用&#xff1a; 当系统运行一个程序但没有告诉程序所在的完整路径是&#xff0c;他会在当前目录查找&#xff0c;当前目录没有找到&#xff0c;它会去环境变量(path)中查找 环境变…

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

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

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

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