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

简介: 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;
}
相关文章
|
1月前
|
Java 编译器 C语言
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
22 3
|
5月前
|
C语言
c语言左旋字符串问题(不同方法超详细解答)
c语言左旋字符串问题(不同方法超详细解答)
29 1
|
5月前
|
机器学习/深度学习 算法 C语言
详细介绍递归算法在 C 语言中的应用,包括递归的基本概念、特点、实现方法以及实际应用案例
【6月更文挑战第15天】递归算法在C语言中是强大力量的体现,通过函数调用自身解决复杂问题。递归涉及基本概念如自调用、终止条件及栈空间管理。在C中实现递归需定义递归函数,分解问题并设定停止条件。阶乘和斐波那契数列是经典应用示例,展示了递归的优雅与效率。然而,递归可能导致栈溢出,需注意优化。学习递归深化了对“分而治之”策略的理解。**
118 7
|
5月前
|
测试技术 C语言
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
46 1
|
6月前
|
传感器 人工智能 物联网
【C 言专栏】C 语言与硬件交互的方法
【5月更文挑战第4天】C 语言在硬件交互中扮演关键角色,主要通过直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射I/O和设备驱动程序开发。挑战包括硬件多样性、实时性要求和错误处理。随着物联网和人工智能发展,C语言与硬件交互的需求增加,未来将面临更多新硬件和技术的挑战。本文旨在帮助读者理解和掌握这一领域的知识,以实现更高效的硬件互动。
208 1
【C 言专栏】C 语言与硬件交互的方法
|
5月前
|
IDE 编译器 开发工具
详细解读C语言程序设计:现代方法(第2版)第二章全部习题答案
详细解读C语言程序设计:现代方法(第2版)第二章全部习题答案
42 0
|
5月前
|
C语言
|
5月前
|
存储 C语言
C语言---求一个整数存储在内存中的二进制中1的个数--3种方法
C语言---求一个整数存储在内存中的二进制中1的个数--3种方法
|
6月前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
69 5
|
6月前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
55 3