数据结构中算术表达式求值演示源程序
- 格式:docx
- 大小:13.19 KB
- 文档页数:6
数据结构中算术表达式地求值演示地源程序有标准答案吗,谢谢50 分标签:求值算术表达式
源程序标准答案概要设计回答:2 浏览:2538 提问时间:2005-12-10 18:29
这是课程设计,除了源程序, 还要有需求分析,概要设计,详细设计,调试分析,用户手册,测试结果, 心得体会,关键是需求分析, 概要设计,详细设计,调试分析,用户手册不知道应该怎么写b5E2RGbCAP
共0 条评论...相关资料: 算术表达式和赋值表达式(1>.swf 更多资料>> 最佳答案此答案由提问者自己选择,并不代表爱问知识人地观点揪错:评论:举报plEanqFDPw
killbig
[学者] 算术表达式地源程序
#include
#define POW 1
#define MUL 2
#define DIV 3
#define ADD 4
#define SUB 5
#define Lp 6
#define Rp 7
#define END 8
#define Epsilon 1e-7 typedef double NODE 。
struct{
char op。
int code 。}opchTbl[]={{'*',2},{'/',3},{'+',4},{'-',5},{'(',6},DXDiTa9E3d {'>',7},{t1},{'\n',8},{' ',-1}} 。
typedef struct node{
NODE data 。
struct node *link 。
}LNODE 。
LNODE *optop , *numtop 。
NONO(char *t,double sum>
{
int i 。
char str[15] 。
FILE *wf 。wf=fopen("62346_4.dat","w"> 。for(i=0 。i<62 。i++>
{
if(*(t+i>!=0 && *(t+i>!=10 && *(t+i>!=13> fprintf(wf,"%c",*(t+i>> 。
}
sprintf(str, "=%f\n",sum> 。
for(i=0。i<14。i++>
if((int>str[i]!=48 && (int>str[i]!=15> fprintf(wf,"%c",str[i]> 。
fclose(wf> 。
}
void l_push(NODE x,LNODE * *toppt>
{LNODE *p=(LNODE *>malloc(sizeof(LNODE>> p->data=x。
p->link= *toppt 。*toppt=p 。
}
int l_pop(NODE *cp,LNODE * *toppt> {LNODE *p= *toppt 。
if(*toppt==NULL>return 1 。
*cp=p->data。
*toppt=p->link 。
free(p> 。
return 0。
}
int osp[]={5,3,3,2,2,5,1,1}, isp[]={4,3,3,2,2,0} 。
void synError(>
{ double temp 。printf("syntax err!"> 。
while(optop!=NULL> l_pop(&temp,&optop> 。while(numtop!=NULL> l_pop(&temp,&numtop> exit(0> 。
}
double eval(char tag,double left, double right>
{
int n。double result 。
switch(tag>{
case POW : for(n=1,result=left 。n
return result 。
case ADD : return left+right 。case SUB : return left-right 。
case MUL : return left*right 。case DIV : if(fabs(right><=Epsilon>{
printf("/0 err\n"> 。exit(1> 。
}
return left/right 。
}
printf("expression err!/n"> 。return 1.0。
}
int c=' ',k=0 。
int t[61] 。
#define RADIX 10
int getToken(double *nump> { double dradix,num 。
int i 。
while(c==' '|| c=='\t'>c=getchar(> 。
if(c<'0' || c>'9'>{
for(i=0 。opchTbl[i].code!=-1 && opchTbl[i].op!=c 。
RTCrpUDGiT
i++> 。if(opchTbl[i].code==-1>synError(> 。
if(c!='\n'>c=getchar(> 。
t[k]=c 。
k++ 。
return opchTbl[i].code 。
} num=0 。
while(c>='0'&&c<='9'>{ num=RADIX *num+c-'0' 。
c=getchar(> 。
t[k]=c 。
k++ 。
}
if(c=='.'>{ dradix=1.0/RADIX 。
c=getchar(> 。t[k]=c 。
k++ 。while(c>='0'&&c<='9'>{ num=num+(c-'0'>*dradix 。dradix/=RADIX 。c=getchar(> 。t[k]=c 。
k++ 。
}}
*nump=num 。return 0 。
void main(>
{
double num , dop, operand1,operand2,res。
int type,i 。
char ans,op。
do{
printf("input syntax!\n"> 。optop=numtop=NULL 。l_push(Lp,&optop> 。do {c=getchar(> 。
t[k]=c 。
k++ 。