| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1467 人关注过本帖
标题:已知:表达式327.45*(265.78 - 32.54/2.3)+26.32 求:用栈实现该表达式的值 ...
取消只看楼主 加入收藏
zhaobing
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2004-10-3
收藏
 问题点数:0 回复次数:1 
已知:表达式327.45*(265.78 - 32.54/2.3)+26.32 求:用栈实现该表达式的值。用VC

让大家帮个忙。

搜索更多相关主题的帖子: 表达 
2004-10-11 12:58
zhaobing
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2004-10-3
收藏
得分:0 

我编的这个题程序 运行不出来。谁能帮我改改!

#include<iostream.h> #include<stdio.h> #include<stdlib.h> #include<malloc.h> #define OVERFLOW -2; #define ERROR -1; #define STACK_INIT_SIZE 100; #define STACKINCREMENT 10; typedef int Status; #define OK 1; typedef struct{ char * base; char * top; int stacksize; }SqStack1; typedef struct{ double * base; double * top; int stacksize; }SqStack2; Status InitStack1(SqStack1 &S){ S.base=(char *) malloc (STACK_INIT_SIZE*sizeof(char)); if(!S.base)exit(OVERFLOW); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK; }//InitStack Status InitStack2(SqStack2 &S){ S.base=(double *)malloc(STACK_INIT_SIZE*sizeof(double)); if(!S.base)exit(OVERFLOW); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK; }//InitStack Status Push1 (SqStack1 &S,char e){ if(S.top-S.base>=S.stacksize){ S.base=(char *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char)); if(!S.base)exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; return OK; }//Push Status Push2 (SqStack2 &S,double e){ if(S.top-S.base>=S.stacksize){ S.base=(double *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(double)); if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; return OK; }//Push Status Pop1(SqStack1 &S,char &e){ if(S.top==S.base) return ERROR; e=*(--S.top); return OK; }//Pop Status Pop2(SqStack2 &S,double &e){ if(S.top==S.base) return ERROR; e=*(--S.top); return OK; }//Pop int bi_jiao(char a,char b) { if((a=='#')&&(b=='*')) return 1; if((a=='*')&&(b=='(')) return 1; if((a=='(')&&(b=='-')) return 1; if((a=='-')&&(b=='/')) return 1; if((a=='/')&&(b==')')) return 3; if((a=='-')&&(b==')')) return 3; if((a=='(')&&(b==')')) return 2; if((a=='*')&&(b=='+')) return 3; if((a=='#')&&(b=='+')) return 1; if((a=='+')&&(b=='#')) return 3; if((a=='#')&&(b=='#')) return 2; } double yun_suan(double z,char that,double w) { if(that=='+') return z+w; if(that=='-') return z-w; if(that=='*') return z*w; if(that=='/') return z/w; }

void main() { SqStack1 OPTR; SqStack2 OPTD; int i(0),j(0); char x,y; double w,z,number; char a[8]; a[0]='#'; a[1]='*'; a[2]='('; a[3]='-'; a[4]='/'; a[5]=')'; a[6]='+'; a[7]='#'; double b[7]={327.45,0,256.78,32.54,2.3,0,26.32}; InitStack1(OPTR); InitStack2(OPTD); Push1(OPTR,a[i]);i++; Push2(OPTD,b[j]);j++; Push1(OPTR,a[i]);i++; for(int m(0);m<0;m++) { number=bi_jiao(*(OPTR.top-2),*(OPTR.top-1)); if(number==1) { if(b[j]!=0) Push2(OPTD,b[j]); j++; Push1(OPTR,a[i]);i++; } if(number==2) { Pop1(OPTR,x); Pop1(OPTR,x); if(OPTR.top==OPTR.base) break;//END if(b[j]!=0) Push2(OPTD,b[j]); j++; Push1(OPTR,a[i]);i++; } if(number==3) { Pop1(OPTR,x); Pop1(OPTR,y); Push1(OPTR,x); Pop2(OPTD,w); Pop2(OPTD,z); w=yun_suan(z,x,w); Push2(OPTD,w); } } cout<<*(OPTD.base)<<endl; }

2004-10-15 15:54
快速回复:已知:表达式327.45*(265.78 - 32.54/2.3)+26.32 求:用栈实现该表达 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036763 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved