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.rhkb.cn/news/204620.html

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

相关文章

SpectralGPT: Spectral Foundation Model 论文翻译2

遥感领域的通用大模型 2023.11.13在CVPR发表 原文地址&#xff1a;[2311.07113] SpectralGPT: Spectral Foundation Model (arxiv.org) 实验 ​ 在本节中&#xff0c;我们将严格评估我们的SpectralGPT模型的性能&#xff0c;并对其进行基准测试SOTA基础模型&#xff1a;ResN…

【沁恒蓝牙mesh】CH58x 将RTC时钟切换为LSE外部低速时钟

本文主要记录了【沁恒蓝牙mesh】CH58x 如何将RTC时钟切换为外部时钟 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是喜欢记录零碎知识点的小菜鸟。&#x1f60e;&#x1f4dd; 个人主页&#xff1a;欢迎访问我的 Ethernet_Comm 博客主页&#x1f525;&#x1f389;…

【代码】基于卷积神经网络(CNN)-支持向量机(SVM)的分类预测算法

程序名称&#xff1a;基于卷积神经网络&#xff08;CNN&#xff09;-支持向量机&#xff08;SVM&#xff09;的分类预测算法 实现平台&#xff1a;matlab 代码简介&#xff1a;CNN-SVM是一种常用的图像分类方法&#xff0c;结合了卷积神经网络&#xff08;CNN&#xff09;和支…

Roll-A-Ball 游戏

Roll-A-Ball 游戏 1&#xff09;学习资料 b站视频教程&#xff1a;https://www.bilibili.com/video/BV18W411671S/文档&#xff1a; * Roll-A-Ball 教程&#xff08;一)&#xff0c; * Roll-A-Ball 教程&#xff08;二)线上体验roll-a-ball成品 * http://www-personal.umich.e…

Databend 开源周报第 121 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 支持追加流 Da…

技巧-PyTorch中num_works的作用和实验测试

简介 在 PyTorch 中&#xff0c;num_workers 是 DataLoader 中的一个参数&#xff0c;用于控制数据加载的并发线程数。它允许您在数据加载过程中使用多个线程&#xff0c;以提高数据加载的效率。 具体来说&#xff0c;num_workers 参数指定了 DataLoader 在加载数据时将创建的…

网络安全--基于Kali的网络扫描基础技术

文章目录 1. 标准ICMP扫描1.1使用Ping命令1.1.1格式1.1.2实战 1.2使用Nmap工具1.2.1格式1.2.2实战1.2.2.1主机在线1.2.2.2主机不在线 1.3使用Fping命令1.3.1格式1.3.2实战 2. 时间戳查询扫描2.1格式2.2实战 3. 地址掩码查询扫描3.1格式3.2实战 2. TCP扫描2.1TCP工作机制2.2TCP …

基于YOLO模型建筑工地个人防护设备目标检测

使用安全装备可以保护他们免受建筑工地的意外事故。据统计&#xff0c;每年有数以万计的工人在建筑工地受到严重伤害&#xff0c;造成终生困难。然而&#xff0c;通过自我监控来确保工人穿戴个人防护装备非常重要。在这方面&#xff0c;需要一个准确和快速的系统来检测工人是否…

鸿蒙开发-ArkTS 语言-状态管理

[写在前面: 文章多处用到gif动图&#xff0c;如未自动播放&#xff0c;请点击图片] 衔接上一篇:鸿蒙开发-ArkTS 语言-基础语法 3. 状态管理 变量必须被装饰器装饰才能成为状态变量&#xff0c;状态变量的改变才能导致 UI 界面重新渲染 概念描述状态变量被状态装饰器装饰的变…

ArrayList源码全面解析

一、概述 ArrayList 是 java 集合框架中比较常用的数据结构,继承自 AbstractList&#xff0c;实现了 List 接口。底层采用数组来实现。ArrayList 实现了java.io.Serializable接口&#xff0c;这意味着ArrayList支持序列化&#xff0c;能通过序列化去传输。 1.1、底层数据结构…

python基础练习题库实验6

文章目录 题目1代码实验结果题目2代码实验结果题目3代码实验结果题目4代码实验结果题目总结题目1 根据以下规范编写一个函数: 函数名称:triple输入参数:1个输入参数数据类型字符串返回值:函数返回1个字符串值。该字符串由每个字符重复3次的句子构成。例如,如果句子是Uni,…

Vue2问题:如何全局使用less和sass变量?

前端功能问题系列文章&#xff0c;点击上方合集↑ 序言 大家好&#xff0c;我是大澈&#xff01; 本文约2400字&#xff0c;整篇阅读大约需要4分钟。 本文主要内容分三部分&#xff0c;如果您只需要解决问题&#xff0c;请阅读第一、二部分即可。如果您有更多时间&#xff…

ESP32-Web-Server编程-建立第一个网页

ESP32-Web-Server编程-建立第一个网页 HTTP 简述 可能你每天都要刷几个短视频&#xff0c;打开几个网页来娱乐一番。当你打开一个网络上的视频或者图片时&#xff0c;其实际发生了下面的流程&#xff1a; 其中客户端就是你的浏览器啦&#xff0c;服务器就是远程一个存放视频或…

【网络奇幻之旅】那年我与大数据的邂逅

&#x1f33a;个人主页&#xff1a;Dawn黎明开始 &#x1f380;系列专栏&#xff1a;网络奇幻之旅 ⭐每日一句&#xff1a;循梦而行&#xff0c;向阳而生 &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️ 文章目录 &#x1f4…

Mysql的二阶段提交

先看执行器与InnoDB引擎是如何更新一条指定的数据的 可以看到&#xff0c;InnoDB在写redo log时&#xff0c;并不是一次性写完的&#xff0c;而有两个阶段&#xff0c;Prepare与Commit阶段&#xff0c;这就是"两阶段提交"的含义。 为什么要写redo log&#xff0c;不…

win_sever系列:windows sever 2012R和windows sever 2016如何开启远程连接服务以及问题解决

windows sever 2012R和windows sever 2016如何开启远程连接服务以及问题解决 一. windows sever 2012R和windows sever 2016如何开启远程连接服务前言一、确保需要进行远程的两个服务器处于同一网段二、关闭防火墙三、需要把被远程的电脑的允许远程打开3.1打开windows sever 20…

N8975A/安捷伦Agilent N8975A噪声系数分析仪

181/2461/8938产品概述N8975A是一款高性能噪声系数分析仪 用于进行快速、准确且可重复的噪声系统测量。 N8975A易用的特性能将复杂的测量简单化并让您获得值得信任的可重复且可靠的测量结果。 N8975A可同时提供噪声系数和增益测量&#xff0c;并可以多种格式查看、打印和保存…

CCFCSP试题编号:202109-2试题名称:非零段划分

用差分法 #include<iostream> #include<algorithm> #include<cstring> using namespace std;const int N 500000; const int M 10000; int a[N 2 ] { 0 }; int d[M 1] { 0 };int main() {int n;cin >> n;for (int i 1; i < n; i){cin >&g…

Android修行手册-溢出父布局的按钮实现点击

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

【vue】v-model在表单元素上的应用

表单元素&#xff1a; https://blog.csdn.net/m0_67930426/article/details/134655644 使用模板 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head><body>&l…