速求一个c++四则混合表达式运算的程序有+,-,*,/,(,),比如7*(5+6*9)+3/5,都是整数运算,除为整除.
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/17 14:26:22
速求一个c++四则混合表达式运算的程序有+,-,*,/,(,),比如7*(5+6*9)+3/5,都是整数运算,除为整除.
速求一个c++四则混合表达式运算的程序
有+,-,*,/,(,),比如7*(5+6*9)+3/5,都是整数运算,除为整除.
速求一个c++四则混合表达式运算的程序有+,-,*,/,(,),比如7*(5+6*9)+3/5,都是整数运算,除为整除.
//看来这个问题还没有搞定啊,我来帮你搞定吧,稍等~
//好了,现在搞定,发给你吧~
//为了你方便看,就写在一个cpp文件里了,比较长,三百多行.我已经编译通过,也做了简单测试,没详细测,如果有bug,你就自己改一下吧.
//表达式输入完了之后直接回车,就出结果了,跟平时输入字符串一样.
//
int main()
{
SqStack OPTR,OPND ;
int element=0 ;
char OPTR_element ;
int leftNum,rightNum ;
char input ;
//获取输入
char OP[7]={'+','-','*','/','(',')','\n'};
InitStack(&OPTR);
Push(&OPTR,'\n');
InitStack(&OPND);
printf("请输入表达式\n");
input=getchar();
while('\n'!=input||'\n'!=GetTop(&OPTR,&OPTR_element))
{
int temp=0 ;
if(isdigit(input))
{
//如果是数字
ungetc(input,stdin);
//返回给输入流
scanf("%d",&temp);
Push(&OPND,temp);
//数字就进OPND栈
input=getchar();
continue ;
}
if(OK==InOP(input,OP))
{
GetTop(&OPTR,&OPTR_element);
switch(Compare(OPTR_element,input))
{
case '<' :
//栈顶元素优先级低
Push(&OPTR,input);
//运算符进OPTR栈
input=getchar();
break ;
case '=' :
//脱括号
PopOPTR(&OPTR,&OPTR_element);
input=getchar();
break ;
case '>' :
//退栈,并将运算结果入栈
PopOPTR(&OPTR,&OPTR_element);
Pop(&OPND,&rightNum);
Pop(&OPND,&leftNum);
Push(&OPND,Calculate(leftNum,OPTR_element,rightNum));
break ;
default :
printf("表达式括号不匹配\n");
return ERROR ;
}//switch
}//if
else
{
printf("表达式内有未知字符,即将退出\n");
return ERROR ;
}
}//while
int value ;
Pop(&OPND,&value);
printf("结果 = %d\n",value);
return OK ;
}//end