C语言用函数指针数组、回调函数实现加减乘除运算
目录
一、调用函数实现
使用传统方法编写函数再调用函数,用switch语句实现:
#include<stdio.h>
int Add(int x, int y)
{
return x + y;
}
int Sud(int x, int y)
{
return x - y;
}
int Xud(int x, int y)
{
return x * y;
}
int Cud(int x, int y)
{
return x / y;
}
int main()
{
printf("********************\n");
printf("*******1.加法*******\n");
printf("*******2.减法*******\n");
printf("*******3.乘法*******\n");
printf("*******4.除法*******\n");
printf("*******0.exit*******\n");
printf("********************\n");
int x=0, y=0, n,ret;
do
{
printf("请选择:\n");
scanf("%d", &n);
switch (n)
{
case 1:
printf("请输入两个数:\n");
scanf("%d %d", &x, &y);
ret = Add(x,y);
printf("结果为:%d\n",ret);
break;
case 2:
printf("请输入两个数:\n");
scanf("%d %d", &x, &y);
ret = Sud(x, y);
printf("结果为:%d\n", ret);
break;
case 3:
printf("请输入两个数:\n");
scanf("%d %d", &x, &y);
ret = Xud(x, y);
printf("结果为:%d\n", ret);
break;
case 4:
printf("请输入两个数:\n");
scanf("%d %d", &x, &y);
ret = Cud(x, y);
printf("结果为:%d\n", ret);
break;
case 0:break;
default:printf("输入错人,重新输入\n");
}
} while(n);
return 0;
}
由此代码可见这代码非常冗余,再每一个case语句都会重复一遍相同的语句。
接下来我们用函数指针数组来实现:
二、函数指针数组实现
#include<stdio.h>
int Add(int x, int y)
{
return x + y;
}
int Sud(int x, int y)
{
return x - y;
}
int Xud(int x, int y)
{
return x * y;
}
int Cud(int x, int y)
{
return x / y;
}
int main()
{
printf("********************\n");
printf("*******1.加法*******\n");
printf("*******2.减法*******\n");
printf("*******3.乘法*******\n");
printf("*******4.除法*******\n");
printf("*******0.exit*******\n");
printf("********************\n");
int x=0, y=0, n,ret;
int (*parr[5])(int,int) = { 0,Add,Sud,Xud,Cud };//定义一个函数指针数组,0是为了让选择功能时与输入的对应
do
{
printf("请选择:\n");
scanf("%d", &n);
if (n == 0)
printf("退出计算机\n");
else if (n >= 1 && n <= 4)
{
printf("请输入两个数\n");
scanf("%d %d", &x, &y);
ret = parr[n](x, y);
printf("结果为:%d\n", ret);
}
else
printf("请重新输入\n");
} while(n);
return 0;
}
由此见得该次代码较上一个简短。
我们再看看使用回调函数又能多简单。
三、回调函数实现
#include<stdio.h>
int Add(int x, int y)
{
return x + y;
}
int Sud(int x, int y)
{
return x - y;
}
int Xud(int x, int y)
{
return x * y;
}
int Cud(int x, int y)
{
return x / y;
}
void calc(int (*parr)(int, int))//创建回调函数
{
int x = 0, y = 0, ret = 0;
printf("请输入两个数:\n");
scanf("%d %d", &x, &y);
ret = parr(x, y);
printf("ret=%d\n", ret);
}
int main()
{
printf("********************\n");
printf("*******1.加法*******\n");
printf("*******2.减法*******\n");
printf("*******3.乘法*******\n");
printf("*******4.除法*******\n");
printf("*******0.exit*******\n");
printf("********************\n");
int n;
do
{
printf("请选择:\n");
scanf("%d", &n);
switch (n)
{
case 1:
calc(Add);//调用该函数
break;
case 2:
calc(Sud);
break;
case 3:
calc(Xud);
break;
case 4:
calc(Cud);
break;
case 0:break;
default:printf("输入错人,重新输入\n");
}
} while(n);
return 0;
}
各位uu们有其他好的方法也可以分享给我哦,共同学习呀!!!