重生之我是一名程序员 33

哈喽大家晚上好啊!今天呢给大家分享的知识是------教大家实现简易的代码计算机(拥有简单的加减乘除运算)。首先呢,想要实现一个计算机,就必须有一份简单的选择菜单,想必大家应该还记得我之前给大家讲过函数吧,那么这个菜单我们就用一个函数mune()函数实现,如下:

cpp 复制代码
void mune()
{
 printf("*************************\n");
 printf("*     1:add 2:sub       *\n");
 printf("*      3:mul 4:div      *\n");
 printf("*     0:exit            *\n");
 printf("*************************\n");
}

而加减乘除运算也用4个简单的函数实现,如下:

cpp 复制代码
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结构来实现这个计算机,如下:

cpp 复制代码
#include <stdio.h>
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结构所构成的代码就会非常的长,那我们是否可以改进一下代码呢?当然是可以的,见面给大家讲过指针数组,以及函数指针,那我们今天就用二者的结合------函数指针数组来优化这段代码,在此之前,先给大家介绍一下函数指针数组,函数指针数组顾名思义是指一个数组,其中的每一个元素都是一个指向函数的指针。函数指针数组的元素可以是不同的函数指针,也可以是相同的函数指针。通常,函数指针数组用于实现函数的动态调用或者实现函数的多态性。例如,可以根据函数指针数组中的元素来动态调用不同的函数,或者根据函数指针数组中的元素实现不同的算法,从而达到代码复用和灵活性的目的。最后,优化后的代码如下:

cpp 复制代码
#include <stdio.h>
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;
}

好啦,现在大家就应该知道怎么去构成一个简易的计算机了,那么今天的知识分享就到此结束啦,大家明天见!

相关推荐
李宥小哥13 小时前
Redis10-原理-网络模型
开发语言·网络·php
利刃大大13 小时前
【c++中间件】语音识别SDK && 二次封装
开发语言·c++·中间件·语音识别
晨非辰14 小时前
C++ 波澜壮阔 40 年:从基础I/O到函数重载与引用的完整构建
运维·c++·人工智能·后端·python·深度学习·c++40周年
艾莉丝努力练剑17 小时前
【C++:C++11】C++11新特性深度解析:从可变参数模板到Lambda表达式
c++·stl·c++11·lambda·可变模版参数
同学小张19 小时前
【端侧AI 与 C++】1. llama.cpp源码编译与本地运行
开发语言·c++·aigc·llama·agi·ai-native
踢球的打工仔20 小时前
PHP面向对象(7)
android·开发语言·php
轻抚酸~20 小时前
KNN(K近邻算法)-python实现
python·算法·近邻算法
汤姆yu1 天前
基于python的外卖配送及数据分析系统
开发语言·python·外卖分析
Yue丶越1 天前
【C语言】字符函数和字符串函数
c语言·开发语言·算法
翔云 OCR API1 天前
人脸识别API开发者对接代码示例
开发语言·人工智能·python·计算机视觉·ocr