计算器(简易版)

简介: 另一种是利用转移表的方式来写,将各个函数的地址存放在一个函数指针数组里面,当要使用函数时,就直接调用指针即可,可以改观上面的美观(上面的代码有很多重复的,太挫了)

1.首先利用do while()弄一个菜单函数,定义一个input变量,利用switch语句来选择菜单中的加减乘除,再分装函数就可以了


不过这个计算器只是特别简单的一种,用来初学者练习。


#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void menu()
{
  printf("************************\n");
  printf("**** 1.Add   2.Sub  ****\n");
  printf("**** 3.Mul   4.Div  ****\n");
  printf("************************\n");
}
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;
  int ret = 0;
  do
  {
    menu();
    printf("请选择:\n");
    scanf("%d", &input);
    switch (input)
    {
    case 1:  printf("请输入操作数:\n");
      scanf("%d %d", &x, &y);
      ret = Add(x, y);
      printf("ret=%d\n", ret);
      break;
    case 2: printf("请输入操作数:\n");
      scanf("%d %d", &x, &y);
      ret = Sub(x, y);
      printf("ret=%d\n", ret);
      break;
    case 3: printf("请输入操作数:\n");
      scanf("%d %d", &x, &y);
      ret = Mul(x, y);
      printf("ret=%d\n", ret);
      break;
    case 4: printf("请输入操作数:\n");
      scanf("%d %d", &x, &y);
      ret = Div(x, y);
      printf("ret=%d\n", ret);
      break;
    default: printf("输入错误\n");
      break;
    }
  } while (input);
  return 0;
}


2.另一种是利用转移表的方式来写,将各个函数的地址存放在一个函数指针数组里面,当要使用函数时,就直接调用指针即可,可以改观上面的美观(上面的代码有很多重复的,太挫了)

根据函数指针数组的下标来找函数所以第一个下标0,就存放0,下标1呢存Add的函数地址,下标2存放Sub的地址,下标3存放Mul的地址,下标4存放Div的地址。


第二种:


#include <stdio.h>
void menu()
{
  printf("************************\n");
  printf("**** 1.Add   2.Sub  ****\n");
  printf("**** 3.Mul   4.Div  ****\n");
  printf("************************\n");
}
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 input=1;
  int x, y;
  int ret = 0;
  int(*pf[5])(int a, int b) = { 0,Add,Sub,Mul,Div };
  //函数指针数组存放着函数地址,可以通过数组下标来找到函数地址然后进行调用。
  while (input)
  {
    menu();
    printf("请选择:\n");
    scanf("%d", &input);
    if (input >= 1 && input <= 4)
    {
      printf("请输入操作数:\n");
      scanf("%d %d", &x, &y);
      ret=pf[input](x, y);
      printf("ret=%d\n", ret);
    }
  }
  return 0;
}
相关文章
|
JavaScript
JS 读取 excel 数据后的时间格式转换
JS 读取 excel 数据后的时间格式转换
627 0
|
SQL 数据可视化 Java
JPA解决时间类型不一致导致索引不生效
JPA解决时间类型不一致导致索引不生效
|
9月前
|
存储 分布式计算 Hadoop
Hadoop的核心组件是什么?请简要描述它们的作用。
Hadoop的核心组件是什么?请简要描述它们的作用。
301 0
|
8月前
|
JSON 数据挖掘 API
京东商品详情API:解锁电商数据的金钥匙
**《京东商品详情API:解锁电商数据》** 本文介绍如何通过京东API获取商品详情,包括注册成为开发者、获取App Key和App Secret、申请API权限、理解`jd.item.get`接口、构建HTTP请求、解析JSON响应。应用场景广泛,如电商平台、比价、数据分析和移动应用。注意调用限制、数据安全和合规性。示例代码展示了Python调用流程。利用此API可增强电商竞争力。请按最新文档和政策执行。
|
JavaScript 前端开发 大数据
虚拟滚动是怎么做性能优化的?
虚拟滚动是怎么做性能优化的?
311 0
|
负载均衡 算法 前端开发
SpringCloud之Gateway组件简介
网关类似于海关或者大门,出入都需要经过这个网关。别人不经过这个网关,永远也看不到里面的东西。可以在网关进行条件过滤,比如大门只有对应的钥匙才能入内。网关和大门一样,永远暴露在最外面
198 0
|
机器学习/深度学习 算法 数据挖掘
睡眠健康数据分析(下)
睡眠健康数据分析
221 0
|
Kubernetes 关系型数据库 应用服务中间件
在Kubernetes集群上部署高可用Harbor镜像仓库
这里主要介绍使用kubectl部署Harbor镜像仓库到Kubernetes集群中。 使用Helm部署,参考: https://my.oschina.net/u/2306127/blog/1819691 https://blog.csdn.net/Yan_Chou/article/details/79715995 关于基于Harbor的高可用私有镜像仓库,在我的博客里曾不止一次提到,在源创会2017沈阳站上,我还专门以此题目和大家做了分享。
2787 0
|
存储 前端开发 算法
wqrfnium震撼发布
你是否曾遇到以下情况: 好不容易写个selenium自动化脚本,然后没几天,一运行,报错了。用例失败了。然后去查发现是因为元素的属性前端更改了导致定位失败。后期维护起来的成本太大了。 很多领导考虑到公司实际情况,就直接扼杀了你的selenium自动化方案。 曾几何时,面试题中问:ui自动化的使用场景是什么?答:前端不频繁变动
wqrfnium震撼发布

热门文章

最新文章