福建建设建设厅官方网站,自我介绍网页设计代码,学python网站开发,广东广州要求#xff1a;
优化表达式求值算法#xff0c;使得该算法可实现多位整数甚至浮点数的四则运算#xff0c;并写程序进行验证
一下代码由AI生成#xff0c;这个作业我是实在不想做了#xff0c;老师上课讲的时候也是一笔带过#xff0c;然后就要求我们自己动手写......… 要求
优化表达式求值算法使得该算法可实现多位整数甚至浮点数的四则运算并写程序进行验证
一下代码由AI生成这个作业我是实在不想做了老师上课讲的时候也是一笔带过然后就要求我们自己动手写......
代码
#include stdio.h
#include stdlib.htypedef struct {double *base;double *top;int stacksize;
} SqStackOPND;typedef struct {char *base;char *top;int stacksize;
} SqStackOPTR;void initStackOPND(SqStackOPND *S) {S-base (double *) malloc(100 * sizeof(double));S-top S-base;S-stacksize 100;
}void initStackOPTR(SqStackOPTR *S) {S-base (char *) malloc(100 * sizeof(char));S-top S-base;S-stacksize 100;
}void pushOPND(SqStackOPND *S, double e) {if (S-top - S-base S-stacksize) {S-base (double *) realloc(S-base, (S-stacksize 10) * sizeof(double));S-top S-base S-stacksize;S-stacksize 10;}*(S-top) e;(S-top);
}void pushOPTR(SqStackOPTR *S, char e) {if (S-top - S-base S-stacksize) {S-base (char *) realloc(S-base, (S-stacksize 10) * sizeof(char));S-top S-base S-stacksize;S-stacksize 10;}*(S-top) e;(S-top);
}double popOPND(SqStackOPND *S) {(S-top)--;return *(S-top);
}char popOPTR(SqStackOPTR *S) {(S-top)--;return *(S-top);
}double getTopOPND(SqStackOPND S) {double e *(S.top - 1);return e;
}char getTopOPTR(SqStackOPTR S) {char e *(S.top - 1);return e;
}double calculate(double a, char theta, double b) {switch (theta) {case :return a b;case -:return a - b;case *:return a * b;case /:return a / b;default:exit(-1);}
}char precedence(char Aop, char Bop) {if ((Aop || Aop -) (Bop || Bop - || Bop ) || Bop #)) {return ;} else if ((Aop || Aop -) (Bop * || Bop / || Bop ()) {return ;} else if ((Aop * || Aop /) (Bop || Bop - || Bop * || Bop / || Bop ) || Bop #)) {return ;} else if ((Aop * || Aop /) (Bop ()) {return ;} else if (Aop ( (Bop || Bop - || Bop * || Bop / || Bop ()) {return ;} else if (Aop ( Bop )) {return ;} else if ((Aop || Aop - || Aop * || Aop / || Aop )) Bop () {return ;} else if (Aop # Bop #) {return ;} else {return ;}
}
//测试(2.82.2)*(1.41.6)/5.03
int main() {SqStackOPND OPND;SqStackOPTR OPTR;double a, b, d;char c, theta;initStackOPND(OPND);initStackOPTR(OPTR);pushOPTR(OPTR, #);printf(Enter expression ended with #:);scanf(%c, c);// 读取多位数while (c ! # || getTopOPTR(OPTR) ! #) {if ((c 0 c 9) || c .) {ungetc(c, stdin);scanf(%lf, d);pushOPND(OPND, d);c getchar();} else {switch (precedence(getTopOPTR(OPTR), c)) {case :pushOPTR(OPTR, c);c getchar();break;case :popOPTR(OPTR);c getchar();break;case :theta popOPTR(OPTR);b popOPND(OPND);a popOPND(OPND);pushOPND(OPND, calculate(a, theta, b));break;}}}printf(%.2lf\n, getTopOPND(OPND));return 0;
}
SampleInput
(2.82.2)*(1.41.6)/5.025*2#
SampleOutput
Enter expression ended with #:(2.82.2)*(1.41.6)/5.025*2#
15.00
最后AI真tm香啊。