我们想使用C语言开发一个简易的计算器,需要什么呢?是不是首先需要一个菜单呢?
看,这就是一个简单的菜单啦!
void menu()
{
printf(*******************计算器***************************);
printf("*******1.加(Add)*****2.减(Sub)**************\n");
printf("*******3.乘(Div)*****4.除(Div)**************\n");
printf("*******0.返回(Exit)***************************\n");
printf(*******************计算器***************************);
}
那么我们肯定需要一个主函数,把菜单放到主函数里边。主函数里面肯定要有去进行运算的一些代码。那么我们来看一下下面这段代码。为了避免丢失精度,以及更好的进行运算,笔者在这里选择使用float类型。
int main()
{
int input=0;
float x=0;
float y=0;
float ret=0;
do{
menu();
printf("请选择:>");
scanf("%d,&input");
if(input==0)
{
printf("退出计算器\n");
break;
}
else if(input=>1&&input<=4)
{
printf("请输入两个数:>");
scanf("%f %f",&x,&y);
ret=pf[input](x,y);
printf("%f",ret);
}
else
{
printf("指令错误");
}
}while(input);
return 0;
}
这里使用do while循环
大家一定会有疑问,这个ret=pf[input](x,y); 在哪里,别着急,我们只需要在主函数上加入一个函数指针数组。
注:pf
是一个函数指针数组,方括号 []
用于指定数组的索引。input
的值作为索引,从 pf
数组中选择一个特定的元素。(具体内容可重返数组部分温习)(*)(float, float)
,这是一种函数指针类型,该指针指向的函数接收两个 float 类型参数并返回一个 float 类型值。float (*pf[5])(float , float)={NULL,Add,Sub,Mul,Div};
由于数组下标的第一个元素是从 0 开始,所以数组第一位是0(NULL)。
很明显,我们的这个程序中还缺点什么东西,没错!就是用于计算的函数!下面我们来看看这些函数们!
float Add(float x, float y)
{
return x+y;
}
float Sub(float x, float y)
{
return x-y;
}
float Mul(float x, float y)
{
return x*y;
}
float Div(float x, float y)
{
return x/y;
}
1.else
后面不能直接跟条件表达式,编译器会将(input>=1&&input<=4)
视为一个普通的表达式,但这个表达式在这里没有任何意义,并且会导致语法错误。
if(input==0)
{
printf("退出计算器\n");
break;
}
else if(input=>1&&input<=4)
{
printf("请输入两个数:>");
scanf("%f %f",&x,&y);
ret=pf[input](x,y);
printf("%f",ret);
}
2.float (*pf[5])(float, float)={NULL, Add, Sub, Mul, Div};
和ret = pf[input](x, y);
float (*pf[5])(float, float)={NULL, Add, Sub, Mul, Div};
定义了一个函数指针数组,为后续通过索引调用不同函数提供了基础。ret = pf[input](x, y);
利用 pf
数组,根据 input
的值选择特定的函数来执行,并传递参数 x
和 y
,得到函数执行结果并赋值给 ret
。例如,如果 input
的值为 1
,那么 pf[1]
指向 Add
函数,ret = pf[1](x, y);
就相当于调用 Add(x, y)
函数,并将返回值赋给 ret
。#include
void menu()
{
printf("*******************计算器**************************\n");
printf("*******1.加(Add)*****2.减(Sub)**************\n");
printf("*******3.乘(Div)*****4.除(Div)**************\n");
printf("*******0.返回(Exit)***************************\n");
printf("*******************计算器***************************\n");
}
float Add(float x, float y)
{
return x+y;
}
float Sub(float x, float y)
{
return x-y;
}
float Mul(float x, float y)
{
return x*y;
}
float Div(float x, float y)
{
return x/y;
}
float (*pf[5])(float , float)={NULL,Add,Sub,Mul,Div};
int main()
{
int input=0;
float x=0;
float y=0;
float ret=0;
do{
menu();
printf("请选择:>");
scanf("%d",&input);
if(input==0)
{
printf("退出计算器\n");
break;
}
else if(input>=1&&input<=4)
{
printf("请输入两个数:>");
scanf("%f %f",&x,&y);
ret=pf[input](x,y);
printf("%f",ret);
}
else
{
printf("指令错误");
}
}while(input);
return 0;
}