普通计算器
#include <stdio.h>
int main()
{
double a;
double b;
char e;
char i;
do
{
printf("输入+,-,*,/,进行接下来的运算: \n");
scanf("%c", &e);
printf("输入a, b的值:\n");
scanf("%lf %lf", &a, &b);
switch(e)
{
case '+':
printf("%lf + %lf = %lf\n", a, b, a + b);
break;
case '-':
printf("%lf - %lf = %lf\n", a, b, a - b);
break;
case '*':
printf("%lf * %lf = %lf\n", a, b, a * b);
break;
case '/':
while(b == 0)
{
printf("分母不能为0,请重新输入: ");
scanf("%lf %lf", &a, &b);
}
printf("%lf / %lf = %lf\n", a, b, a / b);
break;
default:
printf("重新输入\n");
break;
}
getchar(); // 消除回车
printf("输入N退出,输入Y继续\n");
scanf("%c", &i);
getchar();
}while(i != 'N');
return 0;
}
#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 calc(int (*f)(int,int),int a,int b)//定义一个函数指针
{
return (*f)(a,b);
}
int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("+:%d\n-:%d\n*:%d\n/:%d\n",calc(add,a,b),calc(sub,a,b),calc(mul,a,b),calc(div,a,b));
return 0;
}
(*f)(int,int)是一个函数指针作为calc函数的参数;
函数名add等实际上是一个地址(同数组名一样);
- 输入:3 4
- 输出:
- +:7
- -:-1
- *:12
- /:0
改进
#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 calc(int (*f)(int,int),int a,int b)//定义一个函数指针
{
return (*f)(a,b);
}
int (*select(char a))(int,int)
{
switch(a)
{
case '+':return add; //不需要break,因为return后已经终止函数了
case '-':return sub;
case '*':return mul;
case '/':return div;
}
}
int main()
{
int a,b;
char c;
scanf("%d%c%d",&a,&c,&b);
int (*f)(int,int);
f=select(c);
printf("%d%c%d=%d",a,c,b,calc(f,a,b));
return 0;
}
指针函数和函数指针相结合(原理和数组差不多)
实现计算器
- 输入:3+4
- 输出:3+4=7
- 输入:3*4
- 输出:3*4=12