📄 biaodashi2.cpp
字号:
#include <stdio.h>
#include <iostream.h>
///////////////////////////////////////
typedef struct Double_SqStack{
double date;
Double_SqStack *next;
}Double_SqStack,*Link_Double_SqStack;
////////////////////////////////////////////////
typedef struct Char_SqStack{
char date;
Char_SqStack *next;
}Char_SqStack,*Link_Char_SqStack;
//////////////// //////////////////////////////
void InitStack(Link_Double_SqStack &S);
int Push(Link_Double_SqStack &S,double e);
void Pop(Link_Double_SqStack &S,double &e);
int StackEmpty(Link_Double_SqStack S);
double Gettop(Link_Double_SqStack S);
void InitStack(Link_Char_SqStack &S);
int Push(Link_Char_SqStack &S,char e);
void Pop(Link_Char_SqStack &S,char &e);
int StackEmpty(Link_Char_SqStack S);
char Gettop(Link_Char_SqStack &S);
char precede(char c,char ch);
int In(char ch);
double js(char a[]);
//////////////////////////////////////////////
void InitStack(Link_Double_SqStack &S){
S=NULL;
}
int Push(Link_Double_SqStack &S,double e){
Link_Double_SqStack s = new Double_SqStack;
s->date=e;
s->next=S;
S=s;
return 1;
}
void Pop(Link_Double_SqStack &S,double &e){
Link_Double_SqStack p;
p=S;
e=p->date;
S=p->next;
delete(p);
}
int StackEmpty(Link_Double_SqStack S){
if(S==NULL)
return 1;
else return 0;
}
double Gettop(Link_Double_SqStack S){
return S->date;
}
/////////////////////////////////////////////
void InitStack(Link_Char_SqStack &S){
S=NULL;
}
int Push(Link_Char_SqStack &S,char e){
Link_Char_SqStack s = new Char_SqStack;
s->date=e;
s->next=S;
S=s;
return 1;
}
void Pop(Link_Char_SqStack &S,char &e){
Link_Char_SqStack p ;
p=S;
e=p->date;
S=p->next;
delete(p);
}
int StackEmpty(Link_Char_SqStack S){
if(S==NULL)
return 1;
else return 0;
}
char Gettop(Link_Char_SqStack &S){
return S->date;
}
//////////////////////////////////////////////////
///////////////////////////////////////////////////
int In(char ch){
if(ch=='-'||ch=='+'||ch=='*'||ch=='/'||
ch=='('||ch==')'||ch=='#')
return 1;
else return 0;
}
char Precede(char c,char ch){
switch(c){
case '+':if(ch=='+'||ch=='-'||ch==')'||ch=='#')
{return '>';break;}
else {return '<';break;}
case'-':if(ch=='+'||ch=='-'||ch==')'||ch=='#')
{return '>';break;}
else {return '<';break;}
case'*':if(ch=='(')
{return '<';break;}
else {return '>';break;}
case'/':if(ch=='(')
{return '<';break;}
else {return '>';break;}
case'(':if(ch==')')
{return '=';break;}
if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='(')
{return '<';break;}
case')':if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch==')'||ch=='#')
{return '>';break;}
case'#':if(ch=='#')
{return '=';break;}
if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='(')
{return '<';break;}
}
}
double Operate(double a,char theta,double b){
switch(theta){
case'+': return a+b;break;
case'-': return a-b;break;
case'*': return a*b;break;
case'/': return a/b;break;
}
}
////////////////////////////////////////////////////
double js(char z[]){
char *p=z;int i=0;double d=0,d1=0,d2=0,m;int t=0; int q=0;int e=0;int u=0;int v=0;
Link_Char_SqStack OPTR;
Link_Double_SqStack OPND;
InitStack(OPTR);
InitStack(OPND);
Push(OPTR,'#');
char theta,x, c=p[i];
double a,b;
while(c!='#'||Gettop(OPTR)!='#'){
while(!In(c))
{ q=1;
if(p[i]=='.')
{e=i;u=1;}
i++;c=p[i];
}
if(u==0){
d=p[i-1]-48;
for(int j=i-2;j>=t;j--){
m=p[j]-48;
for(int k=0;k<i-j-1;k++)
{
m=m*10;}
d=d+m;
}
}
if(u==1){
v=i;
i=e;
d1=p[i-1]-48;
for(int j=i-2;j>=t;j--){
m=p[j]-48;
for(int k=0;k<i-j-1;k++)
{
m=m*10;}
d1=d1+m;
}
t=e+1;
i=v;
for(int x=i-1;x>=t;x--){
m=p[x]-48;
for(int k=0;k<x+1-t;k++)
{
m=m*0.1;}
d2=d2+m;
}
d=d1+d2;d2=0;d1=0;
}
if(q==1)
{ q=0;Push(OPND,d); d=0;u=0; }
t=i+1;
switch(Precede(Gettop(OPTR),c)){
case'<':
Push(OPTR,c);i++;c=p[i];
break;
case'=':Pop(OPTR,x);i++;c=p[i];
break;
case'>':
Pop(OPTR,theta);
Pop(OPND,b);Pop(OPND,a);
Push(OPND,Operate(a,theta,b));
break;
}
}
return Gettop(OPND);
}
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
void main(){
int w=1;
do{
cout<<"请输入您要计算的表达式:(如:3+4*(6-9/2)-2*2#"<<endl;
char a[100];
char c;
int j=0;
cin>>c;
if(c=='-')
{
a[j]='0';j++;
}
a[j]=c;
j++;
do{
cin>>c;
if(a[j-1]=='('&&c=='-')
{
a[j]='0';j++;
}
a[j]=c;
j++;
}while(a[j-1]!='#');
cout<<"计算结果是:"<<js(a)<<endl;
cout<<"还要继续运算吗?1/0"<<endl;
cin>>w;
}while(w);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -