在VS 2017中 C语言实现简易计算器及其两种优化方案(函数指针)

Chloe ·
更新时间:2024-09-20
· 709 次阅读

//

供C语言初学者使用的简易计算器(四则运算)及其两种优化方案

传统方式(适用于小白)

#include 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 Mul(int x, int y)//乘法函数 { return x * y; } int Div(int x, int y)//除法函数 { return x / y; } int main() { int input = 0; int ret = 0; do { printf("请选择——>:\n"); menu(); int x = 0; int y = 0; scanf("%d", &input); switch (input) { case 1: printf("请输入两位操作数——>:\n"); scanf("%d%d", &x, &y); ret = Add(x, y); printf("ret=%d\n", ret); break; case 2: printf("请输入两位操作数——>:\n"); scanf("%d%d", &x, &y); ret = Sub(x, y); printf("ret=%d\n", ret); break; case 3: printf("请输入两位操作数——>:\n"); scanf("%d%d", &x, &y); ret = Mul(x, y); printf("ret=%d\n", ret); break; case 4: printf("请输入两位操作数——>:\n"); scanf("%d%d", &x, &y); ret = Div(x, y); printf("ret=%d\n", ret); break; case 0: printf("退出游戏\n"); break; default: printf("输入错误!请重新输入:"); break; } } while (input); return 0; } 优化一(加入了函数指针数组)(转移表) #include 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 Mul(int x, int y)//乘法函数 { return x * y; } int Div(int x, int y)//除法函数 { return x / y; } int main() { int input = 0; int ret = 0; int(*p_fun[5])(int,int) = { 0,Add,Sub,Mul,Div }; do { menu(); printf("请选择——>:\n"); int x = 0; int y = 0; scanf("%d", &input); if (input>=1&&input:\n"); scanf("%d%d", &x, &y); ret = p_fun[input](x, y); printf("ret=%d\n", ret); } else { printf("退出游戏\n"); } } while (input); return 0; } 二次优化(利用函数指针简化case语句) #include enum option { EXIT, ADD, SUB, MUL, DIV };//枚举法,增强代码可读性 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 Mul(int x, int y)//乘法函数 { return x * y; } int Div(int x, int y)//除法函数 { return x / y; } void Calc(int (*p_fun)(int,int)) { int x = 0; int y = 0; int ret = 0; printf("请输入两位操作数——>:\n"); scanf("%d%d", &x, &y); ret= p_fun(x, y); printf("ret=%d\n", ret); } int main() { int input = 0; int ret = 0; do { printf("请选择——>:\n"); menu(); int x = 0; int y = 0; scanf("%d", &input); switch (input) { case ADD: Calc(Add); break; case SUB: Calc(Sub); break; case MUL: Calc(Mul); break; case DIV: Calc(Div); break; case 0: printf("退出游戏\n"); break; default: printf("输入错误!请重新输入:"); break; } } while (input); return 0; }

以上代码,给初学者交流之用。


作者:loopygirl



函数 函数指针 优化 指针 C语言

需要 登录 后方可回复, 如果你还没有账号请 注册新账号