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.hqwc.cn/news/228322.html

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

相关文章

第七节HarmonyOS UIAbility生命周期以及启动模式

一、UIAbility生命周期 为了实现多设备形态上的裁剪和多窗口的可扩展性&#xff0c;系统对组件管理和窗口管理进行了解耦。UIAbility的生命周期包括Create、Foreground、Background、Destroy四个状态&#xff0c;WindowStageCreate和WindowStageDestroy为窗口管理器&#xff08…

Rust UI开发(四):iced中如何添加菜单栏(串口调试助手)

注&#xff1a;此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库&#xff0c;用于为rust语言程序构建UI界面。 这是一个系列博文&#xff0c;本文是第四篇&#xff0c;前三篇链接&#xff1a; 1、Rust UI开发&#xff08;一&#xff09;&#xff1a;使用iced构建UI时…

linux CentOS MobaXterm 通过X11 Forwarding 在本地开启图形可视化窗口

第一步 操作系统安装图形界面 X11 Forwarding dnf install xorg-x11-xauth xorg-x11-fonts-* xorg-x11-font-utils xorg-x11-fonts-Type1 xclock第二步 修改参数&#xff0c;启用X11 Forwarding vim /etc/ssh/sshd_config修改参数X11Forwarding yes和X11UseLocalhost no #Al…

什么是量子优势?

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

盖茨表示GPT-5不会比GPT-4有太大改进;Intro to Large Language Models

&#x1f989; AI新闻 &#x1f680; 盖茨表示GPT-5不会比GPT-4有太大改进 摘要&#xff1a;比尔盖茨在与德国《商报》的采访中透露&#xff0c;虽然OpenAI内部有人相信GPT-5会优于GPT-4&#xff0c;但他认为目前的生成式人工智能已经达到极限。盖茨对GPT-5未来的发展并不乐观…

万宾科技可燃气体监测仪科技作用全览

燃气管网在运行过程中经常会遇到燃气管道泄漏的问题&#xff0c;燃气泄漏甚至会引起爆炸&#xff0c;从而威胁人民的生命和财产安全&#xff0c;因此对燃气管网进行定期巡检是十分必要的工作。但是传统的人工巡检已不能满足城市的需要&#xff0c;除了选择增加巡检人员之外&…

C# datagridview控件 绑定数据库中表中数据的方式-3

1.如下图所示&#xff0c;为数据库中的一张表结构&#xff0c;注意该表中共有11个字段 2.首先在窗体后台代码中拖入一个datagridview控件&#xff0c;并在窗体加载时&#xff0c;给datagridview控件添加列&#xff0c;添加的方式如下所示&#xff1a;请注意&#xff0c;每个列…

.net7.0中把exe和dll分开打包

之前写过 C#把dll分别放在指定的文件夹_wpf core dll 放文件夹-CSDN博客 C#把dll打包到exe_c# 打包exe_故里2130的博客-CSDN博客 这都是老技术了&#xff0c;可以进行参考。 现在的.netcore系列有单独支持把exe和dll分开打包的功能了&#xff0c;当然也支持.net7.0和.net8.…

WordPress自动采集伪原创发布工具

在当今数字化时代&#xff0c;随着信息爆炸式增长&#xff0c;网站内容的更新速度飞快。对于拥有WordPress网站的用户而言&#xff0c;如何轻松而又快速地批量采集伪原创内容成为一项具有挑战性的任务。本文将专心分享一些方法和技巧&#xff0c;帮助WordPress用户实现批量采集…

纯cpp如何模拟qt的信号与槽

纯cpp如何模拟qt的信号与槽 我之前是如何使用bind的?一.demo示例二.简单来讲,c自带的bind与function函数,如何实现类似信号与槽的机制1. 简单语法2. function与bind联动尝试1尝试2真正实现流程图 自我反思 我之前是如何使用bind的? 一.demo示例 using MsgHander std::funct…

使用 SwiftUI 创建一个灵活的选择器

文章目录 前言可选择协议自定义化FlexiblePicker 逻辑FlexiblePicker 视图总结 前言 最近&#xff0c;在我正在开发一个在 Dribbble 上找到的设计的 SwiftUI 实现时&#xff0c;我想到了一个点子&#xff0c;可以通过一些酷炫的筛选器扩展该项目以缩小结果列表。 我决定筛选视…

C++二分查找、离线算法:最近的房间

作者推荐 利用广度优先或模拟解决米诺骨牌 本文涉及的基础知识点 二分查找算法合集 题目 一个酒店里有 n 个房间&#xff0c;这些房间用二维整数数组 rooms 表示&#xff0c;其中 rooms[i] [roomIdi, sizei] 表示有一个房间号为 roomIdi 的房间且它的面积为 sizei 。每一…