数据结构中算术表达式求值演示源程序

  • 格式:docx
  • 大小:13.19 KB
  • 文档页数:6

下载文档原格式

  / 6
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构中算术表达式地求值演示地源程序有标准答案吗,谢谢50 分标签:求值算术表达式

源程序标准答案概要设计回答:2 浏览:2538 提问时间:2005-12-10 18:29

这是课程设计,除了源程序, 还要有需求分析,概要设计,详细设计,调试分析,用户手册,测试结果, 心得体会,关键是需求分析, 概要设计,详细设计,调试分析,用户手册不知道应该怎么写b5E2RGbCAP

共0 条评论...相关资料: 算术表达式和赋值表达式(1>.swf 更多资料>> 最佳答案此答案由提问者自己选择,并不代表爱问知识人地观点揪错:评论:举报plEanqFDPw

killbig

[学者] 算术表达式地源程序

#include #include #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 result *=left 。

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++ 。