C语言表达式求值(带详细注释)

上传人:ni****g 文档编号:463854331 上传时间:2024-01-08 格式:DOC 页数:7 大小:28KB
返回 下载 相关 举报
C语言表达式求值(带详细注释)_第1页
第1页 / 共7页
C语言表达式求值(带详细注释)_第2页
第2页 / 共7页
C语言表达式求值(带详细注释)_第3页
第3页 / 共7页
C语言表达式求值(带详细注释)_第4页
第4页 / 共7页
C语言表达式求值(带详细注释)_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《C语言表达式求值(带详细注释)》由会员分享,可在线阅读,更多相关《C语言表达式求值(带详细注释)(7页珍藏版)》请在金锄头文库上搜索。

1、/*表达式求值,输入一个表达式,如1+2*3#,程序可计算出结果为7支持以下符号:+ - * / ( ) .可以计算整数、小数其中表示次方,25表示2的5次方*/*头文件*/#include #include #include #include #include /*宏定义*/#define INIT_STACK_SIZE 100#define SET_NUM 8#define N 100/*字符优先级表*/unsigned char priorSET_NUMSET_NUM = /* + - * / ( ) # */ /*+*/, , , , , , , , , , , , , , , , ,

2、 , , , , , , , , /*(*/, , , , , =, , , , , , , , , , /*#*/, , , , , , =, , , , , , , ; unsigned char priorSetSET_NUM = +, -, *, /, (, ), #, ;/*结构体定义,这是用来存放字符的栈*/typedef structchar *base;char *top;int stacksize; SqStackC;/*结构体定义,这是用来存放数字的栈*/推荐精选typedef structdouble *base;double *top;int stacksize; Sq

3、StackN;void initStackN(SqStackN &);void initStackC(SqStackC &);void pushN(SqStackN &, double);void pushC(SqStackN &, double);void popN(SqStackN &, double &);void popC(SqStackN &, double &);double calculate(double, char, double);int findInSet(char);char compare(char, char);void getSolution();/*主函数*/v

4、oid main()getSolution();/*初始化数字栈*/void initStackN(SqStackN &S)S.base = (double*) malloc(INIT_STACK_SIZE * sizeof(double);S.top = S.base;S.stacksize = INIT_STACK_SIZE;/*初始化字符栈*/void initStackC(SqStackC &S)S.base = (char*) malloc(INIT_STACK_SIZE * sizeof(char);S.top = S.base;S.stacksize = INIT_STACK_S

5、IZE;/*向数字栈中存放数字*/void pushN(SqStackN &S, double x)if (S.top-S.base = S.stacksize) 推荐精选return;*(S.top+) = x;/*向字符栈中存放字符*/void pushC(SqStackC &S, char x)if (S.top - S.base = S.stacksize) return;*(S.top+) = x;/*从数字栈中取出数字*/void popN(SqStackN &S, double &x)if (S.top=S.base) return;x = *(-S.top);/*从字符栈中取出

6、字符*/void popC(SqStackC &S, char &x)if (S.top = S.base) return;x = *(-S.top);/*这个函数返回a operation b的值。假如operation为+,则返回a+b的值*/double calculate(double a, char operation, double b)/*判断operation,返回对应的计算结果*/switch (operation) case +:return a + b;case -:return b - a;case *:return a * b;case /:return b / a;case :return pow(b, a);default:推荐精选return 0;/*查找字符c在priorSet中的什么位置*/*priorSet是所支持的所有字符的集合*/int findInSet(char c)int i;for (i = 0; i = 0 & tempi = 0 & tempi :/*取出字符栈顶运算符,和数字栈顶的两个数字*/popC(OPTR, operation);popN(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号