算术表达式求值设计一个程序,利用栈实现算术表达式的求值要求:(1)以字符串形式输入语法正确算术表达式,参与运算的操作数为

学习 时间:2026-04-03 13:45:45 阅读:4087
算术表达式求值设计一个程序,利用栈实现算术表达式的求值要求:(1)以字符串形式输入语法正确算术表达式,参与运算的操作数为整数,运算符只包括+,-,*,/,可包含小括号();(2)计算算术表达式的值.(使用C语言编写)有三个错误啊!getch()是怎么回事?

最佳回答

追寻的电脑

可靠的飞机

2026-04-03 13:45:45

#include #include #include #include #include #define N 100 double numStack[N]={0}; int numTop; char opStack[N]; int opTop; 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; int Flag=0; numTop=opTop=0; while(str[i]!='\0'||opTop>0) { if(str[i]>='0'&&str[i]0&&!op(str[i-1])&&str[i]!='('&&str[i-1]!=')') { numStack[numTop++]=num*k; num=0; j=1; Flag=0; k=1; } if(opTop==0||str[i]=='(') opStack[opTop++]=str[i]; else if(str[i]==')') { while(opTop>0&&opStack[--opTop]!='(') { numStack[numTop-2]=result(numStack[numTop-2],opStack[opTop],numStack[numTop-1]); numTop--; } if(opStack[opTop]!='(') return 0; } else { if(str[i]=='\0'&&numTop==0) return 0;while(opTop>0&&op(str[i])='0'&&ch='0'&&ch0;k--) { if(temp==0) break; temp*=10; num[j++]=(int)temp+'0'; num[j]='\0'; temp=temp-(int)temp; } } else { face(); printf("input an expression,press key 'E' to compute\n"); printf("%s",str); printf("\nwrong expression!"); } i=0; j=0; str[0]='\0'; } if(ch=='Q'||ch=='q') { printf("\nare you sure to quit?(Y/N)\n"); ch=getch(); if(ch=='Y'||ch=='y') break; else { face(); printf("input an expression,press key 'E' to compute\n"); printf("%s",str); } } ch=getch(); } }

最新回答共有2条回答

  • 鲤鱼花瓣
    回复
    2026-04-03 13:45:45

    #include #include #include #include #include #define N 100 double numStack[N]={0}; int numTop; char opStack[N]; int opTop; 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; int Flag=0; numTop=opTop=0; while(str[i]!='\0'||opTop>0) { if(str[i]>='0'&&str[i]0&&!op(str[i-1])&&str[i]!='('&&str[i-1]!=')') { numStack[numTop++]=num*k; num=0; j=1; Flag=0; k=1; } if(opTop==0||str[i]=='(') opStack[opTop++]=str[i]; else if(str[i]==')') { while(opTop>0&&opStack[--opTop]!='(') { numStack[numTop-2]=result(numStack[numTop-2],opStack[opTop],numStack[numTop-1]); numTop--; } if(opStack[opTop]!='(') return 0; } else { if(str[i]=='\0'&&numTop==0) return 0;while(opTop>0&&op(str[i])='0'&&ch='0'&&ch0;k--) { if(temp==0) break; temp*=10; num[j++]=(int)temp+'0'; num[j]='\0'; temp=temp-(int)temp; } } else { face(); printf("input an expression,press key 'E' to compute\n"); printf("%s",str); printf("\nwrong expression!"); } i=0; j=0; str[0]='\0'; } if(ch=='Q'||ch=='q') { printf("\nare you sure to quit?(Y/N)\n"); ch=getch(); if(ch=='Y'||ch=='y') break; else { face(); printf("input an expression,press key 'E' to compute\n"); printf("%s",str); } } ch=getch(); } }

上一篇 人教版寒假作业P12页给句子排序

下一篇 请问John这个英文名翻译成约翰的由来,为什么不直接音译成乔恩或者其他?