目录
1.实现逻辑
2.运行过程
3.优化前代码分析
主函数
计算函数
4.优化后代码分析
主函数
计算方法函数
输入操作数的函数
5.完整代码展示
1.实现逻辑
实现一个简易的计算器,可以计算两个整数的加减乘除
2.运行过程
3.优化前代码分析
主函数
int main()
{int x = 0;int y = 0;int ret = 0;int input = 0;do{menu();printf("请选择:");scanf("%d", &input);switch (input){case 0:printf("退出计算器\n");break;case 1:printf("请输入两个操作数:");scanf("%d %d", &x, &y);ret = Add(x, y);printf("%d\n", ret);break;case 2:printf("请输入两个操作数:");scanf("%d %d", &x, &y);ret = Sub(x, y);printf("%d\n", ret);break;case 3:printf("请输入两个操作数:");scanf("%d %d", &x, &y);ret = Wul(x, y);printf("%d\n", ret);break;case 4:printf("请输入两个操作数:");scanf("%d %d", &x, &y);ret = Div(x, y);printf("%d\n", ret);break;default:printf("输入错误\n");break;}} while (input);return 0;
}
利用switch语句选择要进行的计算方式,利用do while 来实现是继续计算还是退出计算器。case语句分别调用了不同的计算函数。
计算函数
int Add(int x, int y)//加法函数
{return x + y;
}int Sub(int x, int y)//减法函数
{return x - y;
}
int Wul(int x, int y)//乘法函数
{return x * y;
}
int Div(int x, int y)//除法函数
{return x / y;
}
4.优化后代码分析
主函数
int main()
{int input = 0;do{menu();printf("请选择:");scanf("%d", &input);switch (input){case 0:printf("退出计算器\n");break;case 1:salc(Add);break;case 2:salc(Sub);break;case 3:salc(Wul);break;case 4:salc(Div);break;default:printf("输入错误\n");break;}} while (input);return 0;
}
利用switch语句选择要进行的计算方式,利用do while 来实现是继续计算还是退出计算器。case语句的参数是计算方法函数的函数名,也是函数的地址。
计算方法函数
int Add(int x, int y)//加法函数
{return x + y;
}int Sub(int x, int y)//减法函数
{return x - y;
}
int Wul(int x, int y)//乘法函数
{return x * y;
}
int Div(int x, int y)//除法函数
{return x / y;
}
计算函数,用来完成两个整数的计算。返回的值就是计算的结果。
输入操作数的函数
void salc(int (*pf)(int, int))
{int x = 0;int y = 0;int ret = 0;printf("请输入两个操作数:");scanf("%d %d", &x, &y);ret = pf(x, y);printf("%d\n", ret);
}
因为传过来的是函数的地址,所以要使用一个指针来接受,这就是一个函数指针。
5.完整代码展示
#include<stdio.h>void menu()
{printf("***************************\n");printf("****** 1.Add 2.Sub ******\n");printf("****** 3.Mul 4.Div ******\n");printf("****** 0.exit *************\n");printf("***************************\n");
}int Add(int x, int y)//加法函数
{return x + y;
}int Sub(int x, int y)//减法函数
{return x - y;
}
int Wul(int x, int y)//乘法函数
{return x * y;
}
int Div(int x, int y)//除法函数
{return x / y;
}//回调函数
void salc(int (*pf)(int, int))
{int x = 0;int y = 0;int ret = 0;printf("请输入两个操作数:");scanf("%d %d", &x, &y);ret = pf(x, y);printf("%d\n", ret);
}
int main()
{int input = 0;do{menu();printf("请选择:");scanf("%d", &input);switch (input){case 0:printf("退出计算器\n");break;case 1:salc(Add);break;case 2:salc(Sub);break;case 3:salc(Wul);break;case 4:salc(Div);break;default:printf("输入错误\n");break;}} while (input);return 0;
}