C语言实现计算器
1.传统计算器写法
传统计算器的写法需要在主函数里对逐个函数实现和调用,可以看到代码过于冗长,有没有一种更加简短的代码来实现呢,答案是肯定的
#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 x, y = 0;
int ret = 0;
int input = 1;
do
{
printf("************************\n");
printf(" 请输入你将要进行的运算:\n");
printf("** 1:add ****** 2:sub **\n");
printf("** 3:mul ****** 4:div **\n");
printf("************************\n");
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("退出计算器");
break;
default:
printf("输入错误,请重新输入!");
break;
}
} while (input);
return 0;
}
2.函数指针数组实现计算器
2.1函数指针数组
首先需要了解一下什么是函数指针数组?
数组是一个存放相同类型数据的储存空间,而指针数组则是,全部存放的指针类型的数组。
例如:
int* arr[10];
//数组的每个元素是int*
把函数的地址存放到一个数组中,这个数组就叫做函数指针数组,
函数指针数组的定义:
int (* parr1 [3] )();
parr1 先和 [ ] 结合,说明 parr1是数组,数组的内容是什么呢?
是 int (*)() 类型的函数指针。
这里的函数指针数组便称作转移表。
2.2计算器
#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;
}
void menu()
{
printf("************************\n");
printf(" 请输入你将要进行的运算:\n");
printf("*** 1:add 2:sub **\n");
printf("*** 3:mul 4:div **\n");
printf("*** 0:exit ********\n");
printf("************************\n");
}
int main()
{
int x, y;
int input = 1;
int ret = 0;
//函数指针数组
//转移表
int(*p[])(int x, int y) = { 0,add,sub,mul,div };
do
{
menu();
scanf("%d", &input);
if ((input >=1 && input <= 4))
{
printf("请输入2个操作数:>");
scanf("%d %d", &x, &y);
ret = (*p[input])(x, y);//通过数组下标锁定函数
printf("ret=%d\n", ret);
}
else if (input == 0)
printf("退出计算器");
else
printf("输入错误,请重新输入");
} while (input);
return 0;
}