当前位置: 代码迷 >> C语言 >> 表达式求值问题,高手帮忙啊
  详细解决方案

表达式求值问题,高手帮忙啊

热度:178   发布时间:2005-10-27 22:35:00.0
表达式求值问题,高手帮忙啊

/*需要解决的问题: 任务一: 1,请编写压栈和出栈函数,函数头分别为 int push(bds_stack &s,int e)

int pop(bds_stack &s,int &e) 2,用编写好的函数替代程序中的对应代码 任务二:请在任务一的基础上修改程序,使之可以解决解决二位数以上的表达式计算, 任务三:请修改程序,以便其能够检验出不正确的后缀表达式 另:本程序后缀表达式直接写入数组,同学们可以考虑其他后缀表达式的输入方法 */ 程序如下: #include <iostream.h>

typedef int elemtype;

struct sqstack{ elemtype data[20]; int top; }; //定义栈类型

void main() { char bds_hz[]="42 22 3*+4 2/-#"; //后缀表达式 int i=0; int x1,x2,temp; sqstack bds; //定义一个栈 bds.top=-1; //初始化栈顶指针 while (bds_hz[i]!='#') //依次取得后缀表达式中的字符判断并操作 { if (('0'<=bds_hz[i])&&(bds_hz[i]<='9') ) bds.data[++bds.top]=bds_hz[i]-'0'; //如果是操作数,压栈 else {//如果是操作符 x2=bds.data[bds.top--]; //操作数2,出栈 x1=bds.data[bds.top--]; //操作数1,出栈 //计算 switch (bds_hz[i]) { case '+': temp=x1+x2;break; case '-': temp=x1-x2;break; case '*': temp=x1*x2;break; case '/': temp=x1/x2;break; }

bds.data[++bds.top]=temp; //计算结果压栈 } i++; //指针后移

} cout<<bds.data[0]<<endl; //输出表达式结果

}

搜索更多相关的解决方案: 表达  求值  

----------------解决方案--------------------------------------------------------
  相关解决方案