1,最简单直观的实现方法 ,通过switch语句进行判断,调用不同的函数,进行打印,但会有很多重复代码
知识点:函数,switch语句
#include <stdio.h>
void menu()
{
printf("****1,Add 2,Sub*********\n");
printf("****3,Mul 4,Div*********\n");
printf("****0.exit ***************\n");
}
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 input = 0;
int x = 0;
int y = 0;
do
{
menu();
printf("请选择");
scanf("%d", &input);
switch (input)
{
case 1:
{
printf("请输入数字>>>");
scanf("%d %d", &x, &y);
int ret = Add(x, y);
printf("%d\n", ret);
break;
}
case 2:
{
printf("请输入数字>>>");
scanf("%d %d", &x, &y);
int ret = Sub(x, y);
printf("%d\n", ret);
break;
}
case 3:
{
printf("请输入数字>>>");
scanf("%d %d", &x, &y);
int ret = Mul(x, y);
printf("%d\n", ret);
break;
}
case 4:
{
printf("请输入数字>>>");
scanf("%d %d", &x, &y);
int ret = Div(x, y);
printf("%d\n", ret);
break;
}
case 0:
{
printf("退出\n");
break;
}
default:
{
printf("输入错误\n");
break;
}
}
}while (input);
return 0;
}
2,利用函数指针传参,可以将不同的函数传入cal函数,实现不同函数的调用,并计算,实现代码的复用。但如果要继续添加其他功能,需要添加很多case项,很导致代码变得很长。
知识点:函数指针,回调函数
#include <stdio.h>
void menu()
{
printf("****1,Add 2,Sub*********\n");
printf("****3,Mul 4,Div*********\n");
printf("****0.exit ***************\n");
}
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 cal(int (*p)(int, int))//回调函数
{
int x = 0;
int y = 0;
printf("请输入数字>>>");
scanf("%d %d", &x, &y);
int ret = (*p)(x, y);
printf("%d\n", ret);
}
int main()
{
int input = 0;
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1:
{
cal(Add);
break;
}
case 2:
{
cal(Sub);
break;
}
case 3:
{
cal(Mul);
break;
}
case 4:
{
cal(Div);
break;
}
case 0:
{
printf("退出\n");
break;
}
default:
{
printf("输入错误\n");
break;
}
}
}while (input);
return 0;
}
3,建立函数指针数组,通过数组下标访问对应的函数,代码变得简洁,还可以方便的添加其他功能。
知识点:函数指针数组
#include <stdio.h>
void menu()
{
printf("****1,Add 2,Sub*********\n");
printf("****3,Mul 4,Div*********\n");
printf("****0.exit ***************\n");
}
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 cal(int (*parr)(int,int))
{
int x = 0;
int y = 0;
printf("请输入数字>>");
scanf("%d %d", &x, &y);
int ret = parr(x, y);
printf("%d \n", ret);
}
int main()
{
0;
int input = 0;
int (*parr[5])(int, int) = { 0,Add,Sub,Mul,Div };
do
{
menu();
printf("请选择");
scanf("%d", &input);
if (input == 0)
{
printf("退出\n");
}
else if(input > 0 && input < 5)
{
cal(parr[input]);
}
else
{
printf("输入错误\n");
}
} while (input);
return 0;