好文档 - 专业文书写作范文服务资料分享网站

北理工数据结构实验报告

天下 分享 时间: 加入收藏 我要投稿 点赞

专业资料整理分享

if(n=='=') return '='; else if(n==')') return ERROR; else return '<';break; default:

return ERROR;break;//其他情况,表达式有误 }

}// Precede

int Operation(int a,char theta,int b){ //运算函数 switch(theta){

case'+':return a+b;break; case'-':return a-b;break; case'*':return a*b;break; case'/':return a/b;break; case'%':return a%b;break; case'^':return pow(a,b);break; default:return ERROR;break; }

}//Operation

int EvaluateExpression(char p[]){

完美WORD格式编辑

专业资料整理分享

//主要操作函数

int a,b,t;char x,theta,temp[10]; char* num=temp;char* ex=p;//声明指针 InitStack1(OPTR);Push1(OPTR,'='); InitStack2(OPND);char c=*p; while(c!='='||GetTop1(OPTR)!='='){ if(!In(c,OP)){//不是运算符进数组 *(num++)=c;c=*(++ex);

if(In(c,OP)){//是运算符将数组压入栈 *num='\\0';

t=atoi(temp); //将temp数组转化为整型数 num=temp;//指针指回数组头元素 Push2(OPND,t); } } else

switch(Precede(GetTop1(OPTR),c)){ case '<'://栈顶元素优先级低 Push1(OPTR,c);c=*(++ex); break;

case '='://脱括号并接受下一字符 Pop1(OPTR,x);c=*(++ex);

完美WORD格式编辑

专业资料整理分享

break;

case '>'://运算并将结果入栈 Pop1(OPTR,theta);

Pop2(OPND,b);Pop2(OPND,a); Push2(OPND,Operation(a,theta,b)); break; } }

return GetTop2(OPND);返回操作数栈顶元素 }// EvaluateExpression (3)、主函数设计 int main(){ //主函数

int result;char expression[100]; //声明表达式数组 printf(\ gets(expression); //输入数组

result=EvaluateExpression(expression);

printf(\输出结果 return 0; }

四、程序调试分析

1、开始时,使用getchar函数输入,但其有较大的弊端,

完美WORD格式编辑

专业资料整理分享

只能输入0-9之间的整数,不能实现多位数及小数的计算。于是换为gets函数,将表达式作为整体存入数组中待处理。

2、第一个问题解决后,出现了第二个问题:数据结构混乱。由于gets函数得到的是char型,直接存入操作数栈后,以ASCII码形式存入,使得编译通过但运行结果错误。后来分析原因后,引入暂存数组,利用atoi函数,将数组中的数转化为整型,解决了这一问题。

3、在设计主要处理函数时,出现了多次编译错误。后发现是由于指针指向混乱造成。这主要是自己的思路不清,导致程序混乱。后仔细绘制了流程图,详尽的分析了过程后,解决了该问题。

五、用户使用说明

1、本程序的运行环境为DOS操作系统,执行文件为:Josegh.exe。

2、进入程序后,在Please input the expression:后输入待求表达式,以“=”结尾,并敲回车。

3、程序运行后即在屏幕上输出计算结果。 六、程序运行结果 1、

2、

完美WORD格式编辑

专业资料整理分享

七、程序清单

#define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define OVERFLOW -2 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #include\#include\#include\typedef int Status;

char OP[]={'+','-','*','/','(',')','^','%','='}; //定义运算符数组

typedef struct{ char *base; char *top; int stacksize;

}SqStack1; //定义运算符栈数据类型 typedef struct{

完美WORD格式编辑

北理工数据结构实验报告

专业资料整理分享if(n=='=')return'=';elseif(n==')')returnERROR;elsereturn'<';break;default:returnERROR;b
推荐度:
点击下载文档文档为doc格式
8jz5s5xeyh6trx01723y3gzju6vsnw00di1
领取福利

微信扫码领取福利

微信扫码分享