一级标题:简易计算器的实现。
二级标题:代码中运用的知识
在这里我会使用函数数组指针与回调函数分别写一份简易计算器的代码;那么函数数组指针与回调函数是什么呢?
1、函数数组指针,形如intint (p[5])(int ,int )的代码就是函数数组指针,p就是函数名,函数类型为int([])(int ,int),其返值为int,参数类型也为int;
2、回调函数是什么?回调函数是一个被作为参数传递的函数,它不是由调用者直接调用,而是在特定的事件或条件发生时由其他代码调用。
三级标题:代码实现
一、函数数组指针:首先计算器我们知道计算器实现的就是加减乘除的四册简单运算;那我们可以先写四个简单计算的函数``
int sub(int x,int y)
{
return x+y;
}
int jian(int x,int y)
{
return x-y;
}
int cheng(int x,int y)
{
return x*y;
}
int chu(int x,int y)
{
return x/y;
}
然后我们得明白怎么使用,我们可以先制作一个菜单函数,在里面用数字来定义执行什么;例如1、加,2、减,3、乘,4、除,0、退出。
void menu()
{
printf("*******************\n");
printf("***1.加 2.减*******\n");
printf("***3.乘 4.除*******\n");
printf("*** 0.退出********\n");
}
然后我们就要思考如何让我们输入定义的数字就进入对应的函数;这个就需要函数数组指针的帮助了,我们可以定义一个int (*p[5])(int ,int )来分别指向这四个函数,就像int (*p[5])(int ,int)={0,sub,jian,cheng,chu};为什么要定义一个0;这是因为数组下标是原数顺序-1,为了使更好对应,所以多写一个0;那么我们如何使用呢?我们可以定义一个input作为选择函数的数,x,y作为我们需要计算的数,那就只需要n=pinput;就可以将计算的结果返回到n里。
总的代码:
#include<stdio.h>
void menu()
{
printf("*******************\n");
printf("***1.加 2.减*******\n");
printf("***3.乘 4.除*******\n");
printf("*** 0.退出********\n");
}
int sub(int x,int y)
{
return x+y;
}
int jian(int x,int y)
{
return x-y;
}
int cheng(int x,int y)
{
return x*y;
}
int chu(int x,int y)
{
return x/y;
}
int main()
{
int input;
int ret=0;
int x=0,y=0;
int n=0;
do{
menu();
printf("请选择:\n");
scanf("%d",&input);
int (*p[5])(int ,int)={0,sub,jian,cheng,chu};
printf("请输入x,y->");
scanf("%d %d",&x,&y);
n=p[input](x,y);
printf("%d\n",n);
}while(input);
return 0;
}
二、回调函数:
在使用回调函数时,也需要定义四个函数来计算加减乘除,这里我就不重复写了,这个代码我们需要使用switch语句,我们一般想的是例如1、加函数case 1:printf(“请输入两个数”);再定义x,y然后再调用加函数,这样的话四个函数就需要重复四次,为了简便代码我们使用了回调函数,也就是定义一个单独的函数,在这个函数里实现相同的代码,而在case语句中我们给它传入对应的运算函数的首地址;然后在这个回调函数里再使用对应运算函数来计算。
代码:
#include<stdio.h>
void menu()
{
printf("*********************\n");
printf("*****1.jia 2.jian****\n");
printf("*****3.cheng 4.chu***\n");
printf("*****0.exit**********\n");
printf("*********************\n");
}
int jia(int x,int y)
{
return x+y;
}
int jian(int x,int y)
{
return x-y;
}
int cheng(int x,int y)
{
return x*y;
}
int chu(int x,int y)
{
return x/y;
}
void jisuan(int(*p)(int,int))
{
printf("请输入两个数字:");
int x=0;
int y=0;
int n=0;
scanf("%d %d",&x,&y);
n=(*p)(x,y);
printf("--%d-- \n",n);
}
int main()
{
int input=0;
do
{
menu();
printf("请输入你的选择->");
scanf("%d",&input);
switch(input)
{
case 1:
jisuan(jia);
break;
case 2:
jisuan(jian);
break;
case 3:
jisuan(cheng);
break;
case 4:
jisuan(chu);
break;
case 0:
printf("退出");
break;
default:
printf("输入错误,重新输入:");
break;
}
}while(input);
return 0;
}
标签:return,函数,int,计算器,简易,cheng,printf,input,指针
From: https://blog.csdn.net/2301_81205182/article/details/136886059