数据结构课程设计算术表达式求值-计算器(Word)
高级语言程序设计
《算术表达式求值》
课程设计报告
算术表达式求值
系统可以实现实现对算术四则混合运算表达式求值,并打印求值过程中运算符栈、操作数栈的变化过程。
第二章系统分析
开始运行时界面如下:
你可以输入一个表达式,按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) { print_num(numStack,numTop-1); print_op(opStack,opTop); } numTop--; } if(str[i]!='\0') opStack[opTop++]=str[i]; if(opTop!=0&&numTop!=0) print_op(opStack,opTop); } } if(str[i]!='\0') i++; } if(numTop!=1||opTop!=0) return 0; return 1; } void menu() { system("cls"); printf("_______________________________\n"); printf(" Clear(C) | Equal(E) | Quit(Q) \n"); printf("-------------------------------\n"); } int main(void) { int i=0,j=0,k; char str[N]="\0"; char num[N]="\0"; char save[N]="\0"; char ch; double temp; unsigned long temp2; menu(); printf("input an expression,press key 'E' to compute\n"); ch=getch(); while( 1 ) { if(ch==')'||op(ch)||ch>='0'&&ch<='9') { str[i++]=ch; str[i]='\0'; menu(); printf("input an expression,press key 'E' to compute\n"); printf("%s",str); if( ch=='-'&&(i==1||op(str[i-2]))||ch>='0'&&ch<='9' ) { num[j++]=ch; num[j]='\0'; } else j=0; } if(ch=='C'||ch=='c') { if(strlen(str)) str[--i]='\0'; menu(); printf("input an expression,press key 'E' to compute\n");