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

news2024/12/27 13:28:42

使用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.coloradmin.cn/o/1265648.html

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

相关文章

蓝桥杯第229题 迷宫与陷阱 BFS C++ 模拟 带你理解迷宫的深奥

题目 迷宫与陷阱 - 蓝桥云课 (lanqiao.cn)https://www.lanqiao.cn/problems/229/learning/?page1&first_category_id1&name%E8%BF%B7%E5%AE%AB%E4%B8%8E%E9%99%B7%E9%98%B1 思路和解题方法 首先&#xff0c;定义了一个结构体node来表示迷宫中的每个节点&#xff0c;包…

计算机丢失vcomp140.dll是什么意思,如何解决与修复(附教程)

vcomp140.dll缺失的5种解决方法以及vcomp140.dll缺失原因 引言&#xff1a; 在日常使用电脑的过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“vcomp140.dll缺失”。这个错误提示通常出现在运行某些程序或游戏时&#xff0c;给使用者带来了困扰。本文…

Java数据结构之优先级队列(PriorityQueue)

1、概念 队列&#xff1a;是一种FIFO&#xff08;First-In-First-Out&#xff09;先进先出的数据结构&#xff0c;对应于生活中的排队的场景&#xff0c; 排在前面的人总是先通过&#xff0c;依次进行。 优先队列&#xff1a;是特殊的队列&#xff0c;从“优先”一词&#xff…

免调试计量表,4G无线电表,可以远程抄表,安科瑞ADW300一款全能实现?

1.概述 ADW300 无线计量仪表主要用于计量低压网络的三相有功电能&#xff0c;具有体积小、精度高、功能丰富等优点&#xff0c;并 且可选通讯方式多&#xff0c;可支持 RS485 通讯和 Lora、NB、4G、wifi 等无线通讯方式&#xff0c;增加了外置互感器的电流采样 模式&#xff0…

计算机毕业设计 基于PHP的考研互助交流系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

设备管理的方法与思路

阅读本文你将了解设备管理的思路与方法&#xff1a;一、制定全面的管理计划&#xff1b;二、标准化管理流程&#xff1b;三、设备维护与保养&#xff1b;四、风险管理与预防&#xff1b;五、引入数字化工具。 设备管理在生产制造领域是保障生产安全和效率的核心环节。通过引入…

【c++|SDL】开始使用之---demo

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 SDL 记录 1. hello word #include<SDL2/SDL.h>SDL_Window* g_pWindow 0; SDL_Renderer* g_pRenderer 0;int main(int argc, char* args[]) {//…

DS八大排序之直接插入排序和希尔排序

前言 我们前面几期介绍了线性和非线性的基本数据结构。例如顺序表、链表、栈和队列、二叉树等~&#xff01;本期和接下来的几期我们来详解介绍各个排序的概念、实现以及性能分析&#xff01; 本期内容 排序的概念以及其运用 常见的排序算法 直接插入排序 希尔排序 一、排序的…

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…

甘草书店记: 2023年10月11日 星期三 晴 「做有光的人,照亮他人,也引人同行」

发了两篇《甘草书店记》&#xff0c;书店计划公之于众&#xff0c;收获了不少人的赞扬和鼓励&#xff0c;来自生活中的友人&#xff0c;来自麦田的客户和朋友&#xff0c;来自图书界的同行前辈&#xff0c;也来自商界的同仁。其中&#xff0c;最特别留言来自甘草书店投资方的张…

基于Tomcat+Eclipse+Mysql开发的图书信息管理系统

基于TomcatEclipseMysql开发的图书信息管理系统 项目介绍&#x1f481;&#x1f3fb; 环境要求&#xff1a; eclipse j2ee mysql5 jdk8 tomcat9 必须按上述环境要求运行项目&#xff0c;否则将无法运行&#xff01; 步骤&#xff1a; 1.打开eclipse导入项目 2.修改book-context…

MES系统的功能清单

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

大一学编程怎么学?刚接触编程怎么学习,有没有中文编程开发语言工具?

大一学编程怎么学&#xff1f;刚接触编程怎么学习&#xff0c;有没有中文编程开发语言工具&#xff1f; 1、大一刚开始学编程&#xff0c;面对复杂的代码学习非常吃力&#xff0c;很难入门。建议刚接触编程可以先学习中文编程&#xff0c;了解其中的编程逻辑&#xff0c;学编程…

Shell - cron_protect.sh 监控 Python、Streaming 程序

目录 一.引言 二.Flink 程序监控 1.shell 脚本 2.crontab 配置 三.Python 程序监控 1.shell 脚本 2.crontab 配置 四.总结 一.引言 业务有流式处理数据的需求&#xff0c;需要 7x24 通过 Flink Python 程序进行处理。为了监控 Flink 与 Python 的程序运行状态并在程…

java List集合(ArrayList,LinkedList,Vector)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍java List集合的三种实现类ArrayList&#xff0c;LinkedList&#xff0c;Vector以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主收将持续更新学习…

ZKP11.2 Fiat-Shamir and SNARGs

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 11: From Practice to Theory (Guest Lecturer: Alex Lombardi) 11.2 Fiat-Shamir and SNARGs Succinct Non-Interactive Arguments (SNARGs) This class so far: constructions of SNARGs using IOPs and a random oracle. …

【精选】SpringDI依赖注入及注解实现SpringIoC

SpringDI 什么是依赖注入 依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;&#xff0c;它是Spring控制反转思想的具体实现。 控制反转将对象的创建交给了Spring&#xff0c;但是对象中可能会依赖其他对象。比如service类中要有dao类的属性&#xff0…

什么是量子优势?

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

JS之Object.defineProperty方法

给对象添加属性的方法有许多&#xff0c;这次让我为大家介绍一种给对象添加属性的静态方法吧&#xff01; 语法&#xff1a;Objcet.defineProperty(对象的名称&#xff0c;“添加的键名”&#xff0c;{value&#xff1a;键值}) const obj {name:"张三",age:18}// 我…

一则 MongoDB 副本集迁移实操案例

文中详细阐述了通过全量 增量 Oplog 的迁移方式&#xff0c;完成一套副本集 MongoDB 迁移的全过程。 作者&#xff1a;张然&#xff0c;DBA 数据库技术爱好者~ 爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。 本文约 900…