哈喽大家晚上好啊!今天呢给大家分享的知识是——教大家实现简易的代码计算机(拥有简单的加减乘除运算)。首先呢,想要实现一个计算机,就必须有一份简单的选择菜单,想必大家应该还记得我之前给大家讲过函数吧,那么这个菜单我们就用一个函数mune()函数实现,如下:
- void mune()
- {
- printf("*************************\n");
- printf("* 1:add 2:sub *\n");
- printf("* 3:mul 4:div *\n");
- printf("* 0:exit *\n");
- printf("*************************\n");
- }
而加减乘除运算也用4个简单的函数实现,如下:
- int add(int a, int b)
- {
- return a + b;
- }
- int sub(int a, int b)
- {
- return a - b;
- }
- int mul(int a, int b)
- {
- return a*b;
- }
- int div(int a, int b)
- {
- return a / b;
- }
最后,我们用do-while循环以及switch结构来实现这个计算机,如下:
- #include
- int add(int a, int b)
- {
- return a + b;
- }
- int sub(int a, int b)
- {
- return a - b;
- }
- int mul(int a, int b)
- {
- return a * b;
- }
- int div(int a, int b)
- {
- return a / b;
- }
- int main()
- {
- int x, y;
- int input = 1;
- int ret = 0;
- do
- {
- mune();
- printf("请选择:");
- scanf("%d", &input);
- switch (input)
- {
- case 1:
- printf("输⼊操作数:");
- scanf("%d %d", &x, &y);
- ret = add(x, y);
- printf("ret = %d\n", ret);
- break;
- case 2:
- printf("输⼊操作数:");
- scanf("%d %d", &x, &y);
- ret = sub(x, y);
- printf("ret = %d\n", ret);
- break;
- case 3:
- printf("输⼊操作数:");
- scanf("%d %d", &x, &y);
- ret = mul(x, y);
- printf("ret = %d\n", ret);
- break;
- case 4:
- printf("输⼊操作数:");
- scanf("%d %d", &x, &y);
- ret = div(x, y);
- printf("ret = %d\n", ret);
- break;
- case 0:
- printf("退出程序\n");
- break;
- default:
- printf("选择错误\n");
- break;
- }
- } while (input);
- return 0;
- }
但是,此代码虽然可以实现我们的计算机程序,可一旦我们需要的运算多了(加减乘除之外的运算),switch结构所构成的代码就会非常的长,那我们是否可以改进一下代码呢?当然是可以的,见面给大家讲过指针数组,以及函数指针,那我们今天就用二者的结合——函数指针数组来优化这段代码,在此之前,先给大家介绍一下函数指针数组,函数指针数组顾名思义是指一个数组,其中的每一个元素都是一个指向函数的指针。函数指针数组的元素可以是不同的函数指针,也可以是相同的函数指针。通常,函数指针数组用于实现函数的动态调用或者实现函数的多态性。例如,可以根据函数指针数组中的元素来动态调用不同的函数,或者根据函数指针数组中的元素实现不同的算法,从而达到代码复用和灵活性的目的。最后,优化后的代码如下:
- #include
- int add(int a, int b)
- {
- return a + b;
- }
- int sub(int a, int b)
- {
- return a - b;
- }
- int mul(int a, int b)
- {
- return a*b;
- }
- int div(int a, int b)
- {
- return a / b;
- }
- int main()
- {
- int x, y;
- int input = 1;
- int ret = 0;
- int(*p[5])(int x, int y) = { 0, add, sub, mul, div }; //函数指针数组
- do
- {
- mune()
- printf( "请选择:" );
- scanf("%d", &input);
- if ((input <= 4 && input >= 1))//通过数组中的下标来构成判断
- {
- printf( "输⼊操作数:" );
- scanf( "%d %d", &x, &y);
- ret = (*p[input])(x, y);
- printf( "ret = %d\n", ret);
- }
- else if(input == 0)
- {
- printf("退出计算器\n");
- }
- else
- {
- printf( "输⼊有误\n" );
- }
- }while (input);
- return 0;
- }
好啦,现在大家就应该知道怎么去构成一个简易的计算机了,那么今天的知识分享就到此结束啦,大家明天见!