前,中,后缀表达式计算 无误c语言.doc

前,中,后缀表达式计算 无误c语言.doc

ID:50772624

大小:66.50 KB

页数:12页

时间:2020-03-14

前,中,后缀表达式计算 无误c语言.doc_第1页
前,中,后缀表达式计算 无误c语言.doc_第2页
前,中,后缀表达式计算 无误c语言.doc_第3页
前,中,后缀表达式计算 无误c语言.doc_第4页
前,中,后缀表达式计算 无误c语言.doc_第5页
资源描述:

《前,中,后缀表达式计算 无误c语言.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、#include/*导入需要用到的各种包*/#include#includetypedefstruct/*定义结构体用来存储操作符*/{charop;/*存储字符*/intlevel;/*存储优先级*/}OpNode;typedefstruct{OpNodeop[100];inttop;intsize;/*表示栈内元素的个数*/}stack;/*定义符号栈*/voidinit(stack*st)/*初始化栈*/{st->size=0;st->top=0;}OpNodepo

2、p(stack*a){if(a->size==0)/*如果栈为空结束操作*/{exit(-1);}a->size--;returna->op[--(a->top)];/*取出栈顶元素*/}voidpush(stack*a,OpNodeop)/*入栈函数*/{a->size++;a->op[(a->top)++]=op;}OpNodetop(stack*a)/*观察栈顶函数*/{if(a->size==0)/*如果栈为空结束操作*/{printf("stackisempty");exit(-1);}returna->op[(a

3、->top)-1];/*只得到栈顶的值而不出栈*/}typedefstruct/*定义数值栈*/{doublenum[100];inttop;/*栈顶指针*/intsize;}numstack;voidinit2(numstack*st)/*初始化数值栈*/{st->size=0;st->top=0;}doublepop2(numstack*a)/*数值栈出栈*/{if(a->size==0)/*出栈前的判空*/{exit(-1);}a->size--;returna->num[--(a->top)];/*得到栈顶的值*/}vo

4、idpush2(numstack*a,doublenum)/*入栈*/{a->size++;a->num[(a->top)++]=num;}intmain(void)/*主函数*/{voidchange(charstr[],charexp[]);/*声明要用到的各个函数*/doubleCalResult(charexp[]);/*声明后缀表达式的计算函数*/doubleDirectcalresult(charstr[]);intcheck(charstr[],charchestr[100]);charstr[100],exp[1

5、00],chestr[100];/*str存储原算术表达式,exp存储对应的printf("算术表达式为:");后缀表达式,chestr存储容错字符'^'*/gets(str);if(check(str,chestr))/*调用容错函数*/{printf("表达式错在:");printf("%s",str);printf(chestr);/*根据输入情况指出错误的地方*/exit(-1);}change(str,exp);/*调用函数将中缀转化为后缀*/printf("后缀表达式为:%s",exp);printf

6、("运算结果为:%f",CalResult(exp));/*调用函数计算后缀表达式*/printf("直接运算的结果为:%f",Directcalresult(str));/*调用直接计算函数*/}voidchange(charstr[],charch[])/*将前缀表达式转化为后缀表达式*/{inti=0;/*str的索引*/intk=0;charc;/*字符串中取出的放在C中*/stackst;/*定义符号栈*/OpNodeop;OpNodeops;init(&st);/*初始化符号栈*/c=str[i++];whi

7、le(c!='')/*对字符串进行扫描*/{if((c>='0'&&c<='9')

8、

9、c=='.')/*如果字符为数字或小数点*/{while((c>='0'&&c<='9')

10、

11、c=='.'){ch[k++]=c;/*将字符直接放入数组中*/c=str[i++];}ch[k++]='

12、';/*在其后面放入一个分隔符*/}if(c=='(')/*如果字符是左括号*/{op.op='(';op.level=-1;/*定义其优先级为-1*/push(&st,op);/*将左括号直接入栈*/}if(c==')')/*如果字符为右括

13、号*/{op=top(&st);/*首先观察栈顶*/while(st.size!=0&&op.op!='(')/*如果不是左括号并且栈不为空*/{op=pop(&st);/*出栈并存入数组中*/ch[k++]=op.op;if(st.size>0)/*再次检查栈

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。