C语言计算器 (支持复杂表达式、括号、函数)

//可以使用四则运算、括号和math.h中的一些函数。
//不能包含空格 3(4)会算成4,要写成3*(4)
//使用了 math.h 编译时加上 -lm 参数
//运用了后缀表达式的相关知识
//例 1+sqrt(4)*3 =7.000000
//例 2*(2+3) =10.000000

#include<math.h>
#include<stdio.h>


//compute函数使用
#define FNX0 3//常数数组
#define FNX1 8//指向有一个参数的函数的指针的数组
#define FNX2 1//指向有二个参数的函数的指针的数组
//xin为表达式字符串,length为长度,错误时 *error为零。
double compute(char *xin,int length,int *error);
int main(){
    int error=1;
    char qus[200]={0};
    for(;;){
        scanf("%s",qus);
        printf("=%lf \n",compute(qus,-1,&error));
        fflush(stdout);
        if(error==0) printf("error\n");
        error=1;
     }
    return 0;
}
char *fn0[FNX0]={"pi","e","m"};
double fx0[FNX0]={3.14159265358979323846,2.71828182845904523536,0};

char *fn1[FNX1]={"acos","asin","atan","cos","sin","tan","ln","sqrt"};
double (*fx1[FNX1])(double)={acos,asin,atan,cos,sin,tan,log,sqrt};

char *fn2[FNX2]={"pow"};
double (*fx2[FNX2])(double,double)={pow};


//计算算式字符串的值
double compute(char *xin,int length,int *error){//算式字符串,字符串长度,错误信息
	signed char o[3]={0};//运算符栈 +-*/ 为1234 0为空
	signed char s[3]={1,1,1};//数字栈符号
	short Now0=0;//运算符下标
	short Now1=0;//数
  • 11
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值