-
大小: 4KB文件类型: .cpp金币: 2下载: 1 次发布日期: 2021-05-17
- 语言: C/C++
- 标签:
资源简介
算法输入:一个算术表达式,由常量、变量、运算符和括号组成(以字符串形式输入)。为简化,规定操作数只能为正整数,操作符为+、-*、/,用#表示结束。
算法输出:表达式运算结果。
代码片段和文件信息
/*改了一下你看看行不这不是在TC的环境下编的,我尽量用TC中的库函数,有什么问题再提*/
/*getch()相当于getchar()只不过输入的时候不回显到屏幕上*/
/*如果还有错误,把错误贴出来,或者发消息给我我好改*/
#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 num1char opdouble 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=0j=1k=1;
int Flag=0;
numTop=opTop=0;
while(str[i]!=‘\0‘||opTop>0)
{
if(str[i]>=‘0‘&&str[i]<=‘9‘)
if(Flag==0)
num=num*10+str[i]-‘0‘;
else
{
num+=(str[i]-‘0‘)/(j*10.0);
j*=10;
}
else
if(str[i]==‘.‘)
Flag=1;
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;
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])<=op(opStack[opTop-1]))
{
numStack[numTop-2]=result(numStack[numTop-2]opStack[--opTop]numStack[numTop-1]);
numTop--;
}
if(str[i]!=‘\0‘)
opStack[opTop++]=str[i];
}
}
if(str[i]!=‘\0‘)
i++;
}
if(numTop!=1||opTop!=0)
return 0;
return 1;
}
void face()
{
system(“cls“);
printf(“__________________________________________________________________\n“);
printf(“ Save number(S) | Read number(R) | Clear(C) | Equal(E) | Quit(Q) \n“);
printf(“------------------------------------------------------------------\n“);
}
main()
{
int i=0j=0k;
char str[N]=“\0“;
char n
评论
共有 条评论