当前位置: 首页 > news >正文

模拟实现计算器(switch函数实现与转移表实现)

switch函数实现:

#include <stdio.h>
int add(int a, int b)
{return a + b;
}
int sub(int a, int b)
{return a - b;
}
int mul(int a, int b)
{return a * b;
}
int div(int a, int b)
{return a / b;
}
int main()
{int x, y;int input = 1;int ret = 0;do{printf("*************************\n");printf(" 1:add 2:sub \n");printf(" 3:mul 4:div \n");printf(" 0:exit \n");printf("*************************\n");printf("请选择:");scanf("%d", &input);switch (input){case 1:printf("输⼊操作数:");scanf("%d %d", &x, &y);ret = add(x, y);printf("ret = %d\n", ret);break;case 2:printf("输⼊操作数:");scanf("%d %d", &x, &y);ret = sub(x, y);printf("ret = %d\n", ret);break;case 3:printf("输⼊操作数:");scanf("%d %d", &x, &y);ret = mul(x, y);printf("ret = %d\n", ret);break;case 4:printf("输⼊操作数:");scanf("%d %d", &x, &y);ret = div(x, y);printf("ret = %d\n", ret);break;case 0:printf("退出程序\n");break;default:printf("选择错误\n");break;}} while (input);return 0;
}

我们能明显感觉到代码不够高效,代码太冗长了。
那有没有一个写一段就能够让四个运算避免这些重复的东西呢?
好!这个时候就要祭出转移表了!

转移表实现:

什么是转移表?

其实很简单,它所指的就是运用函数指针数组以数组方式去调用里面的函数,从而在某些情况下替代冗长的switch函数,就叫转移表

代码实现:

#include<stdio.h>
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 (*arr[5])(int x, int y) = { 0,add,sub,mul,div };do{printf("*****************************\n");printf("******1. add 2. sub**********\n");printf("******3. mul 4. div**********\n");printf("******   0. exit   **********\n");printf("*****************************\n");printf("请选择\n");int input = 0;scanf("%d", &input);if (input >= 1 && input <= 4){int x = 0, y = 0;printf("请输入操作数\n");scanf("%d%d", &x, &y);int ret = (*arr[input])(x, y);printf("%d\n", ret);break;}else if (input == 0){printf("退出计算器\n");break;}else{printf("输入错误,请重新输入\n");}} while (1);return 0;
}

http://www.mrgr.cn/news/25419.html

相关文章:

  • 【Linux 19】线程概念
  • Unity基本操作
  • 【linux】一种基于虚拟串口的方式使两个应用通讯
  • 通信工程学习:什么是SDH同步数字体系
  • 大模型国产化算力方案
  • c++11——share_ptr的助手weak_ptr
  • 前端 + 接口请求实现 vue 动态路由
  • buck boost Ldo 经典模型的默写
  • 排序题目:一手顺子
  • 【办公】会议纪要模板
  • OJ 两两交换链表中的节点
  • MySQL之库和表操作
  • Python容器一之字符串
  • 好看好听的小猪包扩音器,轻巧便携更好用,得胜E10上手
  • 批量插入insert到SQLServer数据库,BigDecimal精度丢失解决办法,不动代码,从驱动层面解决
  • 干部画像系统是什么?
  • 卫生间漏水原因很多,切莫病急乱投医
  • 直播电商平台如何合理分账给供应商/主播
  • 基于SpringBoot的准妈妈孕期交流平台
  • 开源模型应用落地-qwen2-7b-instruct-LoRA微调-unsloth(让微调起飞)-单机单卡-V100(十六)