91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 2KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發布日期: 2021-05-06
  • 語言: 其他
  • 標簽:

資源簡介

問題描述 設計一個模擬計算器功能的程序,它讀入一個表達式,如果是一個正確的表達式(即它由操作數、圓括號和+、-、*、/四種運算符組成),則求出該表達式的值;否則給出某種錯誤信息。 基本要求:讀入一個以字符序列形式給出的以等號(=)結尾的表達式;程序中應考慮運算符的優先級、運算的合法性。

資源截圖

代碼片段和文件信息

#include
#include
using?namespace?std;
#define?STACK_SIZE?50
#define?STACKINCREMENT?20
struct?optr
{
char*?base;
char*?top;
int?stacksize;
};
struct?opnd
{
double*?base;
double*?top;
int?stacksize;
};
int?InitStack(optr?&S)
{
S.base=(char*)malloc(STACK_SIZE*sizeof(char));
if(!S.base)exit(-2);
S.top=S.base;
S.stacksize=STACK_SIZE;
return?1;
}
int?InitStack(opnd?&S)
{
S.base=(double*)malloc(STACK_SIZE*sizeof(double));
if(!S.base)exit(-2);
S.top=S.base;
S.stacksize=STACK_SIZE;
return?1;
}
int?Push(optr?&Schar?e)
{
if(S.top-S.base>=S.stacksize)
{
????S.base=(char*)realloc(S.base(S.stacksize+STACKINCREMENT)*sizeof(char));
if(!S.base)exit(-2);
???? S.top=S.base+S.stacksize;
???? S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return?1;
}
int?Push(opnd?&Sdouble?e)
{
if(S.top-S.base>=S.stacksize)
{
????S.base=(double*)realloc(S.base(S.stacksize+STACKINCREMENT)*sizeof(double));
if(!S.base)exit(-2);
????S.top=S.base+S.stacksize;
????S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return?1;
}
char?GetTop(optr?S)
{
char?e;
if(S.top==S.base)?return?0;
e=*(S.top-1);
return?e;
}
double?GetTop(opnd?S)
{
double?e;
if(S.top==S.base)?return?0;
e=*(S.top-1);
return?e;
}
char?Pop(optr?&S)
{
if(S.top==S.base)return?0;
return?*--S.top;
}
double?Pop(opnd?&S)
{
if(S.top==S.base)return?0;
return?*--S.top;
}
int?In(char?cchar?op[8])
{
for(int?i=0;i<8;i++)
if(c==op[i])return?1;
return?0;
}
char?precede(char?bchar?c)
{
char?YXJ[9][9]=
{
{‘?‘‘+‘‘-‘‘*‘‘/‘‘(‘‘)‘‘^‘‘=‘}
{‘+‘‘>‘‘>‘‘<‘‘<‘‘<‘‘>‘‘<‘‘>‘}
{‘-‘‘>‘‘>‘‘<‘‘<‘‘<‘‘>‘‘<‘‘>‘}
{‘*‘‘>‘‘>‘‘>‘‘>‘‘<‘‘>‘‘<‘‘>‘}
{‘/‘‘>‘‘>‘‘>‘‘>‘‘<‘‘>‘‘<‘‘>‘}
{‘(‘‘<‘‘<‘‘<‘‘<‘‘<‘‘=‘‘<‘‘?‘}
{‘)‘‘>‘‘>‘‘>‘‘>‘‘?‘‘>‘‘>‘‘>‘}
{‘^‘‘>‘‘>‘‘>‘‘>‘‘<‘‘>‘‘>‘‘>‘}
{‘=‘‘<‘‘<‘‘<‘‘<‘‘<‘‘?‘‘<‘‘=‘}
};
int?i=0j=0;
while(i<9)
{
if(b==YXJ[i][0])break;
i++;
}
while(j<9)
{
if(c==YXJ[0][j])break;
j++;
}
return?YXJ[i][j];
}
void?main()
{
optr?OPTR;opnd?OPND;
InitStack(OPTR);InitStack(OPND);
Push(OPTR‘=‘);
????char?c[50]OP[8]={‘+‘‘-‘‘*‘‘/‘‘(‘‘)‘‘=‘‘^‘};
cout<<“請輸入待求值的表達式(!!!一定要以“=”號結束!!!):“< gets(c);int?i=0ii=0aa=0tf=0;
while(c[ii]!=‘\0‘){aa++;ii++;}
while(c[i]!=‘\0‘&&(c[i]!=‘=‘||GetTop(OPTR)!=‘=‘))
{
if(!In(c[i]OP))
{
int?x=0;
while(!In(c[i]OP)&&c[i]!=‘.‘)
{
x=10*x+(c[i]-48);
i++;
}
if(c[i]==‘.‘)i++;
double?y=0;int?j=0;
while(!In(c[i]OP))
{
j--;
y=y+(c[i]-48)*pow(10j);
? i++;
}
Push(OPNDx+y);
}
else
switch(precede(GetTop(OPTR)c[i]))
{
????????????case‘<‘:Push(OPTRc[i]);i++;break;
????????????case‘=‘:Pop(OPTR);i++;break;
????????????case‘>‘:double?abd;char?m;
???????? m=Pop(OPTR);b=Pop(OPND);a=Pop(OPND);
if(m==‘+‘)d=a+b;
if(m==‘-‘)d=a-b;
if(m==‘*‘)d=a

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????3432??2008-04-16?20:57??表達式求值\表達式求值.cpp

?????文件????????283??2008-11-16?12:44??表達式求值\readme.txt

?????目錄??????????0??2009-06-15?20:13??表達式求值

-----------?---------??----------?-----??----

?????????????????3715????????????????????3


評論

共有 條評論