搜档网
当前位置:搜档网 › 数据结构课程设计算术表达式求值计算器.doc

数据结构课程设计算术表达式求值计算器.doc

数据结构课程设计算术表达式求值计算器.doc
数据结构课程设计算术表达式求值计算器.doc

高级语言程序设计

《算术表达式求值》

课程设计报告

算术表达式求值

系统可以实现实现对算术四则混合运算表达式求值,并打印求值过程中运算符栈、操作数栈的变化过程。

第二章系统分析

开始运行时界面如下:

你可以输入一个表达式,按E对其进行求值。

第四章系统实现

#include

#include

#include

#include

#define N 100

double numStack[N]={0};//操作数栈

int numTop;

char opStack[N];//运算符栈

int opTop;

void print_num(double str1[],int n)

{

int i;

printf("\n操作数栈:\n");

for(i=0;i

printf("%g ",str1[i]);

}

void print_op(char str2[],int m)

{

int j;

printf("\n运算符栈:\n");

for(j=0;j

printf("%c ",str2[j]);

}

int op(char ch)//判断运算符优先级

{

if(ch=='+'||ch=='-') return 2;

if(ch=='*'||ch=='/') return 3;

if(ch=='(') return -1;

return 0;

}

double result(double num1,char op,double num2)//计算

{

if(op=='+') return num1+num2;

if(op=='-') return num1-num2;

if(op=='*') return num1*num2;

if(op=='/') return num1/num2;

return 0;

}

int compute(char str[])

{

double num=0;

int i=0,j=1,k=1;

numTop=opTop=0;

while(str[i]!='\0'||opTop>0)

{

if(str[i]>='0'&&str[i]<='9')

num=num*10+str[i]-'0';

else if( k==1&&str[i]=='-'&&(i==0||op(str[i-1])) )

k=-1;

else

{

if(i>0&&!op(str[i-1])&&str[i]!='('&&str[i-1]!=')')

{

numStack[numTop++]=num*k;

if(opTop!=0&&numTop!=0)

print_num(numStack,numTop);

num=0; j=1; k=1;

}

if(opTop==0||str[i]=='(')

{opStack[opTop++]=str[i];print_op(opStack,opTop);}

else if(str[i]==')')

{

while(opTop>0&&opStack[--opTop]!='(')

{

numStack[numTop-2]=result(numStack[numTop-2],opStack[opTop],numStack[numTop-1]);

if(opTop!=0&&numTop!=0)

{

print_num(numStack,numTop);

print_op(opStack,opTop);

}

numTop--;

}

if(opStack[opTop]!='(') return 0;

}

else

{

if(str[i]=='\0'&&numTop==0) return 0;

while(opTop>0&&op(str[i])<=op(opStack[opTop-1]))

{

numStack[numTop-2]=result(numStack[numTop-2],opStack[--opTop],numStack[numTop-1]);

if(opTop!=0&&numTop!=0)

相关主题