目录
一,第一种方法(暴力方法)
二,第二种方法(函数指针数组)
三,第三种方法(回调函数)
一,第一种方法(暴力方法)
switch结构
#define _CRT_SECURE_NO_WARNINGS 1 #includevoid menu(void) { //提供菜单 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 Mul(int x, int y) { return x * y; } int Div(int x, int y) { return x / y; } int main() { //因为计算器可以反复使用,所以用循环来写 //至于用while还是do-while都是看自己喜好 do { //在循环中定义变量,每次循环开始时初始化数据,就不会影响后面的运算 int x, y, ret; x = y = ret = 0; int input=0; //输出菜单 menu(); //选择函数来运行程序,达到自己的目的 printf("请选择:>"); scanf("%d",&input); //因为选项很多,太过复杂。选择用switch结构 switch (input) { case 1: printf("请输入2个操作数:>"); scanf("%d%d", &x, &y); //调用函数 ret = Add(x, y); printf("ret=%dn", ret); break; case 2: printf("请输入2个操作数:>"); scanf("%d%d", &x, &y); ret = Sub(x, y); printf("ret=%dn", ret); break; case 3: printf("请输入2个操作数:>"); scanf("%d%d", &x, &y); ret = Mul(x, y); printf("ret=%dn", ret); break; case 4: printf("请输入2个操作数:>"); scanf("%d%d", &x, &y); ret = Div(x, y); printf("ret=%dn", ret); break; //如果输入为0,程序结束,直接跳出 case 0:printf("程序结束"); break; //如果输入的是其他数,给用户继续选择的机会。 default:printf("选择错误,请重新选择"); break; } } while (input); return 0; }
上面都有解释,可以多看看。
二,第二种方法(函数指针数组)
#define _CRT_SECURE_NO_WARNINGS 1 #includevoid menu(void) { 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 Mul(int x, int y) { return x * y; } int Div(int x, int y) { return x / y; } int main() { //这里并没有用switch结构,这里跟第一个程序不同,上一个程序中input定义在了switch外面,所以没啥问题 //但是在这里,函数的主体就只有一个循环,由于我们用的是do-while循环,最后while后面的input是在循环体外面的, //如果在里面定义input的话,作用域就到不了外面,故,我们把input定义在外面。 int input = 0; do { //这里我们采用函数指针数组的方法。 int (*parr[5])(int, int) = { NULL,Add,Sub,Mul,Div }; int x, y, ret; x = y = ret = 0; //输出菜单 menu(); //选择方法 printf("请选择:>"); scanf("%d", &input); if (input >= 1 && input <= 4) { //初始化数据 printf("请输入2个操作数:"); scanf("%d%d", &x, &y); //用函数指针的方法,用指针调用函数 ret = (parr[input])(x, y); printf("ret =%dn", ret); } else if (input == 0) printf("程序结束。"); else printf("选择错误,请重新选择n"); } while (input); return 0; }
三,第三种方法(回调函数)
#define _CRT_SECURE_NO_WARNINGS 1
#include
void menu(void) {
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 Mul(int x, int y) {
return x * y;
}
int Div(int x, int y) {
return x / y;
}
int Calc(int(*pf)(int, int)) {
int x, y;
x = y = 0;
printf("请输入两个操作数:");
scanf("%d%d",&x,&y);
return pf(x, y);
}
int main() {
int input=0;
menu();
printf("请选择:>");
scanf("%d",&input);
do {
switch (input) {
case 1:
printf("ret=%dn",Calc(Add));
case 2:
printf("ret =%dn",Calc(Sub));
case 3:
printf("ret=%dn", Calc(Mul));
case 4:
printf("ret=%dn", Calc(Div));
case 0:
printf("退出程序");
default:
printf("请重新选择:");
}
} while (input);
return 0;
}
三,第三种方法(回调函数)
上述就是模拟计算器的三种方法,静待各位大佬斧正和指教!!!



