四、实验步骤
#include "stdafx.h"
#include
#include
#include
#include
#include
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OPSETSIZE 7
typedef int Status;
float Operate(float a, char theta, float b);
Status In(char Test,char TestOp[7]);
char precede(char Aop, char Bop);
char OPSET[OPSETSIZE]={'+' , '-' , '*' , '/' ,'(' , ')' , '#'};
typedef struct{
char *base;
char *top;
int stacksize;
}SqStackOPTR;
typedef struct{
float *base;
float *top;
int stacksize;
}SqStackOPND;
Status InitStackOPTR(SqStackOPTR &S){ //初始化栈
S.base=(char *)malloc(sizeof(char) * STACK_INIT_SIZE);
if(!S.base){
cout<<"初始化失败";
return false;
}
else{
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return true;
}
}
Status InitStackOPND(SqStackOPND &S){ //初始化栈
S.base=(float *)malloc(sizeof(float) * STACK_INIT_SIZE);
if(!S.base){
cout<<"初始化失败";
return false;
}
else{
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return true;
}
}
void PushOPTR(SqStackOPTR &S,char e){ //栈顶压入一个运算符
*S.top=e;
S.top++;
}
void PushOPND(SqStackOPND &S,float e){ //栈顶压入一个数
*S.top=e;
S.top++;
}
char PopOPTR(SqStackOPTR &S,char &e){ //取栈顶元素
--S.top;
e=*S.top;
return e;
}
float PopOPND(SqStackOPND &S,float &e){ //取栈顶元素
--S.top;
e=*S.top;
return e;
}
Status GetTopOPTR(SqStackOPTR &S,char &e){
e=*(S.top-1);
return e;
}
float GetTopOPND(SqStackOPND &S,float &e){
e=*(S.top-1);
return e;
}
unsigned char Prior[7][7] = { // 算符间的优先关系
'>','>','<','<','<','>','>',
'>','>','<','<','<','>','>',
'>','>','>','>','<','>','>',
'>','>','>','>','<','>','>',
'<','<','<','<','<','=',' ',
'>','>','>','>',' ','>','>',
'<','<','<','<','<',' ','='
};
float EvaluateExpression(char*ex,int n1) { // 算法3.4
// 设OPTR和OPND分别为运算符栈和运算数栈,OP为运算符集合。
SqStackOPTR OPTR; // 运算符栈,字符元素
SqStackOPND OPND; // 运算数栈,实数元素
float a,b,*h,add=0,num,m;
int i=0,n=0,j,k,m1=0;
char theta,e,x,*H;
h=new float[n1+1];
H=new char[n1+1];
InitStackOPTR(OPTR);
e='#';
PushOPTR(OPTR, e);
InitStackOPND(OPND);
while(ex[i]!= '#' || GetTopOPTR(OPTR,x)!= '#') {
k=1;
if(ex[i]>='0'&&ex[i]<='9'||ex[i]=='.') {
H[k]=ex[i];k++;
for(k,j=i+1;ex[j]!='#';j++){
if(ex[j]>='0'&&ex[j]<='9'||ex[j]=='.'){
H[k]=ex[j];k++;
}
else break;
}//for
for(i=1;i': // 退栈并将运算结果入栈
PopOPTR(OPTR,theta);
PopOPND(OPND,b);
PopOPND(OPND,a);
m=Operate(a, theta, b);
PushOPND(OPND,m);
break;
} // switch
}//els
} // while
return GetTopOPND(OPND,m);
} // EvaluateExpression
float Operate(float a,char theta, float b) {
switch(theta) {
case '+': return a+b;break;
case '-': return a-b;break;
case '*': return a*b;break;
case '/': return a/b;break;
default : return 0;break;
}
}
Status In(char Test,char TestOp[7]) {
bool status=false;
for (int i=0; i< OPSETSIZE; i++) {
if (Test==TestOp[i]) status= true;
}
return status;
}
int ReturnOpOrd(char op,char TestOp[7]) {
int i,n=0;
for(i=0; i< OPSETSIZE; i++) {
if (op==TestOp[i])
n=i;
}
return n;
}
char precede(char Aop, char Bop) {
return Prior[ReturnOpOrd(Aop,OPSET)][ReturnOpOrd(Bop,OPSET)];
}
void main(){
int i,n,C=1;char *p;
while(C==1){
cout<<"请输入
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
达式的长度(包括#):";
cin>>n;
p=new char[n];
cout<<"请输入表达式(以#结束):";
for(i=0;i>p[i];
cout<<"运算结果是:";
for(i=0;i>C;
}
}
五、实验结果及分析
六、实验
总结
初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf
通过本次实验学到了许多东西,首先编写程序要有耐心,期间有好几次都想到要放弃了,算法是正确的,但结果总是错误。但静下心来仔细考虑才发现是一个小错误、小失误导致。所以说耐心很重要。同时,和同学们探讨也是一个不错的
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
,毕竟每个人都有自己的方法,通过彼此学习可以互补。同时,要善于利用网上的资源,许多不清楚而知识可以在网上找到
答案
八年级地理上册填图题岩土工程勘察试题省略号的作用及举例应急救援安全知识车间5s试题及答案
,这也是一个不错的学习方法。最后:实践出真知。