期末数据结构程序设计~设计一个程序,演示用算符优先法对算术表达式求值的过程。注意·~不要C++的 是数据

以字符序列的形式从终端输入语法正确的、不含变量的整数表达式。实现对算术四则混合运算表达式的求值,
在求值过程中运算符栈、运算数栈、输入字符和主要操作的变化过程。实现提示:
(1)设置运算符栈和运算数栈辅助分析算符优先关系;
(2)在读入表达式的字符序列的同时,完成运算符和运算数的识别处理,以及相应的运算;
(3)在识别出运算数的同时,要将其字符序列形式转换成整数形式;
(4)在程序的适当位置输出运算符栈、运算数栈、输入字符和主要操作的内容。
自己设计的话运行无误肯定加分,
求高手~

第1个回答  2011-01-02
#include<iostream>
using namespace std;
const int InitSize=100;
const int IncreastSize=10;

template<class datatype>
class SqStack {
private:
datatype *base;
datatype *top;
int stacksize;
public:
SqStack();
void DestroyStack();
void ClearStack();
int StackLength();
bool IsEmpty();
bool GetTop(datatype &e);
bool Pop(datatype &e);
bool Push(datatype e);

};

template<class datatype>
SqStack<datatype>::SqStack()
{
base=new datatype[InitSize];
if(!base)exit(1);
top=base;
stacksize=InitSize;
}

template<class datatype>
void SqStack<datatype>::DestroyStack()
{
delete[] base;
base=top=NULL;
stacksize=0;
}

template<class datatype>
void SqStack<datatype>::ClearStack()
{top=base;
}

template<class datatype>
int SqStack<datatype>::StackLength()
{return top-base;
}

template<class datatype>
bool SqStack<datatype>::IsEmpty()
{
if(top==base)
return fasle;
else return true;
}

template<class datatype>
bool SqStack<datatype>::GetTop(datatype &e)
{
if(top==base)
return false;
e=*(top-1);
return true;
}

template<class datatype>
bool SqStack<datatype>::Pop(datatype &e)
{
if(top==base)
return false;
e=*(top-1);
top--;
return true;
}

template<class datatype>
bool SqStack<datatype>::Push(datatype e)
{
if(top-base>=stacksize)
{
base=(datatype *)realloc( base , (stacksize+IncreastSize)*sizeof(int) );
if(!base)exit(1);
top=base+stacksize;
stacksize+=IncreastSize;
}
*(top)=e;
top++;
return true;
}

int com(char m,char t)
{
if(t=='(') return -1;

else if(t==')')
{if(m=='+'||m=='-'||m=='*'||m=='/') return 1;
else if(m=='(') return 0;
else return -2;
}

else if(t=='*'||t=='/')
{if(m=='+'||m=='-'||m=='#'||m=='(') return -1;
else return 1;
}

else if(t=='+'||t=='-')
{if(m=='#'||m=='(') return -1;
else return 1;
}
else
{if(m=='#')return 0;
else if(m=='+'||m=='-'||m=='*'||m=='/') return 1;
else return -2;
}

}

void main()
{
SqStack <char> op;
SqStack <double> re;
char t,m;
double result,flag=1;
op.Push('#');
t=getchar();

while(true){
if(t>='0'&&t<='9')
{double s=0;
s=s*10+t-'0';

t=getchar();
while(t>='0'&&t<='9' )
{s=s*10+t-'0';
t=getchar();
}
re.Push(s);
}

else if(t=='+'||t=='-'||t=='*'||t=='/'||t=='('||t==')'||t=='\n')
{ op.GetTop(m);

while(com(m,t)==1 )
{double x1,x2;
op.Pop(m);

if(re.Pop(x2)&&re.Pop(x1))
{if(m=='+') re.Push(x1+x2);
else if(m=='-') re.Push(x1-x2);
else if(m=='*') re.Push(x1*x2);
else if(m=='/') {if(x2!=0)re.Push(x1/x2); else flag=0;}
}
else flag=0;
op.GetTop(m);
}

if(com(m,t)==-1)
op.Push(t);
else if(com(m,t)==0)
op.Pop(m);
else flag=0;

if(!op.GetTop(m)) break;
t=getchar();
}

else t=getchar();
}
if(re.GetTop(result)&&flag)
cout<<result<<endl;
else cout<<"Input error!\n";

}本回答被网友采纳
第2个回答  2010-12-30
你这分数也太少了呗?至少的要一天才能搞定的!
第3个回答  2010-12-30
这个分低了,确实。。。。

《数据结构 课程设计》表达式求值 实验报告
在这次的课程设计中我选择的题目是算术表达式求值演示。表达式计算是实现程序设计语言的基本问题之一,也是栈的应用的一个典型例子。设计一个程序,演示用算符优先法对算术表达式求值的过程。深入了解栈和队列的特性,以便在解决实际问题中灵活运用它们,同时加深对这种结构的理解和认识。二、 系统分析 1. 以...

算术表达式求值 急求
include <stdlib.h> include <string.h> define error 0 define ok 1 define overflow -1 define STACK_INIT_SIZE 100 define STACKINCREMENT 10 define OPSETSIZE 7 char OPSET[OPSETSIZE]={'+','-','*','\/','(',')','#'};unsigned char Prior[7][7] = { \/\/ ...

表达式求值 栈 运算符优先级表
3 * ( 4 + 8 ) \/ 2 -5 注:给表达式设置#,标志扫描的开始和结束。提示算法:设两个栈,一个是操作数栈,用来存放操作数,如3、4、8等,另一个是运算符栈,用来存放运算符。首先将标志“#”进运算符栈的栈底。然后依次扫描,按照栈的后进先出原则进行:(1)遇到操作数,进操作数栈;(...

按照四则运算优先关系的惯例,画出下列算术表达式求值时操作数栈和运算...
取栈C中的4和35,取栈S中的-,计算35-4=31,取栈C中的3,取栈S中的+,计算3+31=34

编一个程序计算表达式5>3&&2||8<4的值,并用输出语句把值输出
include <stdio.h> int main(){ printf("5>3&&2||8<4运算结果为:%d",5>3&&2||8<4);return 0;} 大于小于的优先级>与&&>或||,因此先计算5>3为真,结果为1;再计算1&&2,结果为真,再计算1||8<4,结果为1。

设计一个算术四则运算表达式求值的简单计算器的问题
基本要求:算术四则运算表达式求值的简单计算器的基本功能是:(1)用链表或数组实现一个栈 (2)输入中缀表达式能够转化成缀表达式 (3)操作数使用单字母变量A.B.C等表示,操作符为+.-.*.\/(和);(4)能够对变量A.B.C等赋值,得出的正确的计算结果测试数据:(1)A+B*C?ABC*+ A=12.5...

设计一个四则运算的程序,从键盘输入计算式如:5*6-7+8\/2= ,按从左到...
*\/int Menu_Sel();\/* 手工输入表达式求值 *\/int Do_Press();\/* 文件导入表达式求值 *\/int Do_File();\/* 文件检查 0 重新输入,1 继续 *\/int FileChk(char *FN);\/* 式子的合法性检查 0 含有非法字符,1 正常 2 关系运算 *\/int StrChk(char *chpSource);\/* 关系运算 *\/int Nexus(char strIn[]...

数据结构c语言版表达式求值标准程序
size_t N; \/\/ 指向栈顶第一个空闲块 const size_t size; \/\/ 堆栈的大小,固定不变 public:stack(size_t n) : size(n){ s = new T[n]; \/\/ 可能抛出异常 N = 0; \/\/ 设置栈顶指针 } ~stack(){ delete [] s;} bool empty() const { return N == 0;} bool full()...

算数表达式求值c++
这种方法使表达式求值很方便。AB+C*DEF+\/- 前、后缀表示法的三个特征: 1. 操作数的顺序与等价的中缀表示法中操作数的顺序一致 2. 不需要括号 3. 操作符的优先级不相关 用二叉树来表示更直观,前、中、后缀表示法分别对应前序、中序、后序遍历得到的结果。 【算符优先法】 输入中缀表达式,直接求值。首先...

程序设计的内容包括
程序设计方法与风格。 2. 结构化程序设计。 3. 面向对象的程序设计方法,对象,方法,属性及继承与旅局多态性。 三、 软件工程基础 1. 软件工程基本概念,软件生命周戎概念,软件工具与软件开发环境。 2. 结构化分析方法,数据流图,数据字典,软件需求规格说明书。 3. 结构化设计方法,总体设计与详细设计。 4. 软件...

相似回答