//自制计算器,实现加减乘除 //#include<stdio.h> //#include<math.h> //void menu() //{ // printf("***************************************\n"); // printf("***********1.加法 2.减法********\n"); // printf("***********3.乘法 4.除法********\n"); // printf("*********** 0.退出 ********\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() //{ // int input = 0; // do // { // int x = 0; // int y = 0; // int ret = 0; // menu(); // printf("请输入选择\n"); // scanf("%d", &input); // switch (input) // { // 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 = Sub(x, y); // printf("%d\n", ret); // break; // case 3: // printf("请输入两个操作数\n"); // scanf("%d %d", &x, &y); // ret = Mul(x, y); // printf("%d\n", ret); // break; // case 4: // printf("请输入两个操作数\n"); // scanf("%d %d", &x, &y); // ret = Div(x, y); // printf("%d\n", ret); // break; // case 0: // printf("退出程序\n"); // break; // default: // printf("选择错误,请重新选择\n"); // } // printf("ret=%d\n", ret); // } while (input); // return 0; //} //进阶版---函数指针数组 #include<stdio.h> #include<math.h> void menu() { printf("***************************************\n"); printf("***********1.加法 2.减法********\n"); printf("***********3.乘法 4.除法********\n"); printf("*********** 0.退出 ********\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() { int input = 0; do { menu(); int(*pfArr[5])(int, int) = { NULL,Add,Sub,Mul,Div };//将每个函数地址(函数名)与下标 //对应起来,,调用函数int(*pfArr[4])(int, int)函数指针数组,函数指针是(*pfArr)(int,int) int x = 0; int y = 0; int ret = 0; printf("请输入选择\n"); scanf("%d", &input); if (input >= 1 && input <= 4) { printf("请输入两个操作数\n"); scanf("%d %d", &x, &y); ret = (pfArr[input])(x, y);//函数指针数组----目的是合并简化各个数组的相同部分 //根据下标找对应的函数值 printf("ret=%d\n", ret); } else if(input==0) { printf("退出程序\n"); break; } else { printf("选择错误,请重新选择\n"); } } while (input); return 0; }