高级语言程序设计
《算术表达式求值》
课程设计报告
算术表达式求值
系统可以实现实现对算术四则混合运算表达式求值,并打印求值过程中运算符栈、操作数栈的变化过程。
第二章系统分析
开始运行时界面如下:
你可以输入一个表达式,按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)