首页 > 其他分享 >C语言转移表的三种方法

C语言转移表的三种方法

时间:2024-05-29 20:33:13浏览次数:26  
标签:return int ret C语言 break 三种 printf input 转移

在这里插入图片描述

一、一般实现转移表

转移表–>计算机的实现

首先说明,本次的代码,最主要是用函数的调用,实现计算机的功能。

一般实现的计算机的思路和猜数字游戏的思路差不多。思路如下,首先设置入口:int input = 1;,用do-while循环和switch语句,设置菜单,选择进入或者不进入;
然后调用函数,计算结果。
话不多说,看代码:

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>


void menu()//菜单函数
{
	printf("******************************\n");
	printf("*********0. 退出计算机********\n");
	printf("*********1. Add **************\n");
	printf("*********2. Sub **************\n");
	printf("*********3. Mul **************\n");
	printf("*********4. Div **************\n");
	printf("******************************\n");
	
}
//以下都是调用的函数,算加减乘除法,下面两个方法的这个函数不改变呢
int Add(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 ret = 0;//设置一个返回数放置的地方ret
	int x = 0;
	int y = 0;
	

	do
	{
		menu();
		printf("请选择:\n");
		scanf("%d", &input);

		


		switch (input)
		{
		case 0:
			printf("退出计算机\n");
		case 1:
			printf("请输入操作数:\n");
			scanf("%d  %d", &x, &y);
			ret = Add(x,y);
			break;
		case 2:
			ret = Sub(x, y);
			break;
		case 3:
			ret = Mul(x, y);
			break;
		case 4:
			ret = Div(x, y);
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
		printf("%d\n", ret);
	} while (input);


	return 0;

}

注意看,主函数的switch是不是有点长。又臭又长,那我们不妨用一个简洁一点的代码去实现看看,调用的函数menu,Add,Sub,Mul,Div不变哦。

二、函数指针数组实现转移表

注意看主函数部分,看代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

void menu()
{
	printf("******************************\n");
	printf("*********0. 退出计算机********\n");
	printf("*********1. Add **************\n");
	printf("*********2. Sub **************\n");
	printf("*********3. Mul **************\n");
	printf("*********4. Div **************\n");
	printf("******************************\n");

}
int Add(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 x = 0;
	int y = 0;
	int ret = 0;

	int (*pfArr[5])(int, int) = { 0,Add,Sub,Mul,Div };//函数指针数组,注意格式哦

	do
	{
		menu();
		printf("请选择:\n");
		scanf("%d", &input);

		if (input >= 1 && input <= 4)//用if语句代替了长长的代码,简洁了不少
		{
			printf("请输入两个操作数\n");
			scanf("%d %d", &x, &y);
			ret = pfArr[input](x, y);//把返回的值放在ret里头,然后输出
		}
		else if (input == 0)
		{
			printf("退出计算机\n");
		}
		else
		{
			printf("选择错误,请重新选择\n");
		}
		printf("%d\n", ret);
	} while (input);


	return 0;
}

那第三个方法又是怎么样的呢,请继续看

三、回调函数实现转移表

回调函数实现转移表,还挺有意思的,看代码:

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>


void menu()
{
	printf("******************************\n");
	printf("*********0. 退出计算机********\n");
	printf("*********1. Add **************\n");
	printf("*********2. Sub **************\n");
	printf("*********3. Mul **************\n");
	printf("*********4. Div **************\n");
	printf("******************************\n");

}
int Add(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 x = 0; 
	int y = 0;
	int ret = 0;
	printf("请输入两个操作数:\n");
	scanf("%d %d", &x, &y);
	ret = pf(x, y);
	printf("%d\n", ret);
}
int main()
{
	int input = 1;

	do
	{
		menu();
		printf("请选择:\n");
		scanf("%d", &input);

		
		switch (input)
		{
		case 0:
			printf("退出计算机\n");
			break;
		case 1:
			Calc(Add);
			break;
		case 2:
			Calc(Sub);
			break;
		case 3:
			Calc(Mul);
			break;
		case 4:
			Calc(Div);
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
	}while (input);

	return 0;
}

好像跟第一个差不多?注意看switch语句里面的函数,巧妙使用函数,好好品味,如果有什么问题,请大家在评论区留言哦

在这里插入图片描述

标签:return,int,ret,C语言,break,三种,printf,input,转移
From: https://blog.csdn.net/2401_84538476/article/details/139304347

相关文章

  • C语言题目要求实现方法总结(1-10)
    目录一、互换A,B的值1.1使用中间变量1.2使用异或^(不允许创建中间变量)1.3使用函数(指针传参)二、按降序输出A,B的值2.1直接实现2.2使用指针三、找出最大值3.1遍历数组先输入再找(常规)边输入边找(改进)其实把数组优化掉也不是不可以(偷懒法,不够通用,第一个常规法......
  • 【C语言】for循环
    简介在C语言中,for循环是一种常用的控制结构,用于重复执行一段代码多次。for循环包括三个部分:初始化表达式、循环条件和更新表达式。for循环的语法如下:for(初始化表达式;循环条件;更新表达式){//循环体}初始化表达式在循环开始前被执行,通常用于设置计数器的初......
  • C语言到底能干啥?我列举了8种经典案例
    虽然C语言执行速度极快,占用资源极少,但是它使用起来非常麻烦,完全没有Java、Python、Go、JavaScript、C#等方便和灵活,会严重拖慢项目的开发进度,所以,通常只有在“不得不”的情况下才会使用C语言。再说得直白点,就是我没得选了,我才会使用C语言。C语言的8种实际用途:1.开发操......
  • Golang中的三种指针
    三种类型的指针:类型用途备注普通类型指针传递对象的地址,不能做指针运算uintptr作为一段内容的首地址,可以做指针运算,GC不把uintptr当指针,uintptr无法持有对象。uintptr类型的目标会被回收。unsafe.Pointer不能做指针运算,可以用做在不同数据类型指针间转......
  • 深入探索C语言动态内存分配
    在编程的广阔天地里,C语言以其直接操控底层的能力和高效性能,至今仍占据着不可替代的地位。而在C语言的众多特性中,动态内存分配无疑是一项核心而又充满挑战的技术。本文将引领您深入探索这一技术的奥秘,从理论到实践,揭示动态内存分配的魅力所在。一、动态内存分配的必要性在程序......
  • C语言----递归--n的k次方
    intpower(intn,intk){if(k==0){return1;//任何数的0次方都是1}elseif(k>0){returnn*power(n,k-1);//当k为正数时,n的k次方//等于n乘以n的(k-1)次方}......
  • C语言-----前置++和后置++的不同
    #include<stdio.h>intmain(){inta,b,c;a=5;c=++a;b=++c,c++,++a,a++;b+=a+++c;printf("a=%db=%dc=%d\n:",a,b,c);return0;}/*1、逗号运算符的优先级比赋值运算符=号的优先级低2、++、+的优先级比+=......
  • C语言---扫雷游戏的实现
    1.扫雷游戏的分析和设计需要创建3个文件夹test.c----扫雷游戏的测试game.c----扫雷游戏的实现game.h----扫雷游戏的实现雷的信息使用二维数组存放•使⽤控制台实现经典的扫雷游戏•游戏可以通过菜单实现继续玩或者退出游戏•扫雷的棋盘是9*9的格⼦•默认随机布置1......
  • C语言中,指针的使用
    当使用C语言中的指针时,一些基本的用法和示例可以帮助更好地理解其用法。声明指针:   2.取地址运算符(&)和解引用运算符(*):   3.指针与数组:   4.指针与函数:   5.动态内存分配:6.指针与结构体:        在上面,我展示了指针在C语言中的基......
  • C语言中的函数
            在C语言中,函数是模块化程序设计的基本单元,允许将代码分解为可重用的部分。以下是我写的一些常见的函数用法以及相关的示例代码:函数声明和定义://函数声明intadd(inta,intb);//函数定义intadd(inta,intb){returna+b;}函数调用:intr......