资源描述:
《实验三算法表达式C语言实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、数据结构实验实验项目三栈和队列的应用计算机科学与技术系0902班组长:雷耀阳组员:柴瑞东、李志鹏、张玲春日期:实验报告实验类型__综合设计__实验室软件实验室11. 实验题目求一个数学表达式的值:用户输入一个包含正整数、括号和四则运算符(“+”、“—”、“*”、“/”)的算术表达式,计算其结果。2. 需求分析首先置操作数栈为空栈,表达式起始符“#”为运算符栈底元素;依次读入表达式中每个字符,若是操数则进操作数栈,若是操作符则和操作符栈顶的运算符进行比较优先权后作相应的操作
2、,直到整个表达式求值完毕(即操作符栈顶元素和当前读入的字符均为“#”)3. 概要设计结点结构类型描述如下typedefstruct{ char*base,*top; intstacksize;}sqstack;函数关系:main()result()compute()face()op()4. 详细设计实现概要设计中定义的所有的数据类型,对每个操作给出伪码算法。对主程序和其他模块也都需要写出伪码算法。 #include#include#in
3、clude#include#include#defineN100doublenumStack[N]={0};intnumTop;charopStack[N];intopTop;intop(charch){if(ch=='+'
4、
5、ch=='-')return2;if(ch=='*'
6、
7、ch=='/')return3;if(ch=='(')return-1;return0;}doubleresult(doublenum1,charop,doublenum2){i
8、f(op=='+')returnnum1+num2;if(op=='-')returnnum1-num2;if(op=='*')returnnum1*num2;if(op=='/')returnnum1/num2;return0;}intcompute(charstr[]){doublenum=0;inti=0,j=1,k=1;intFlag=0;numTop=opTop=0;while(str[i]!=' '
9、
10、opTop>0){if(str[i]>='0'&&str[i]<='9')if(Flag==0)num=
11、num*10+str[i]-'0';else{num+=(str[i]-'0')/(j*10.0);j*=10;}elseif(str[i]=='.')Flag=1;elseif(k==1&&str[i]=='-'&&(i==0
12、
13、op(str[i-1])))k=-1;else{if(i>0&&!op(str[i-1])&&str[i]!='('&&str[i-1]!=')'){numStack[numTop++]=num*k;num=0;j=1;Flag=0;k=1;}if(opTop==0
14、
15、str[i]=='('
16、)opStack[opTop++]=str[i];elseif(str[i]==')'){while(opTop>0&&opStack[--opTop]!='('){numStack[numTop-2]=result(numStack[numTop-2],opStack[opTop],numStack[numTop-1]);numTop--;}if(opStack[opTop]!='(')return0;}else{if(str[i]==' '&&numTop==0)return0;while(opTop>0&&op
17、(str[i])<=op(opStack[opTop-1])){numStack[numTop-2]=result(numStack[numTop-2],opStack[--opTop],numStack[numTop-1]);numTop--;}if(str[i]!=' ')opStack[opTop++]=str[i];}}if(str[i]!=' ')i++;}if(numTop!=1
18、
19、opTop!=0)return0;return1;}voidface(){system("cls");printf("__
20、________________________________________________________________");printf("Savenumber(S)
21、Readnumber(R)
22、Clear(C)
23、Equal(E)
24、Quit(Q)");printf("-----------------------