基於棧運算的算術表示式(糾錯判錯)

2021-06-08 12:46:06 字數 2434 閱讀 6658

#define isnum -30

#define notnum -50

double atof(const char *);

double gd[100]=;

char gc[100]=;

int id = 0,ic = 0 ;

void pushd(double data)

int popd(double * data)

int gettopd(double * data)

/**************/

void pushc(char data)

int popc(char * data)

int gettopc(char * data)

/**************/

int isnum(char c)

char precede(char a,char b)

; if( a == '+' ) p1 = 0;

if( a == '-' ) p1 = 1;

if( a == '*' ) p1 = 2;

if( a == '/' ) p1 = 3;

if( a == '(' ) p1 = 4;

if( a == ')' ) p1 = 5;

if( a == '#' ) p1 = 6;

if( b == '+' ) p2 = 0;

if( b == '-' ) p2 = 1;

if( b == '*' ) p2 = 2;

if( b == '/' ) p2 = 3;

if( b == '(' ) p2 = 4;

if( b == ')' ) p2 = 5;

if( b == '#' ) p2 = 6;

return table[p1][p2];

}double oprate(double a ,double b,char ch)

/*向字串str在pos的位置插入乙個字元c*/

int insertstr(char * str,char c,int pos)

str[pos] = c;

return 1;

}int deletestr(char * str , char c,int pos)

return 1;

}int legalexp(char * str)

else if( str[n] == '+' || str[n] == '-' || str[n] == '*' || str[n] == '/' || str[n] == '(' || str[n] == ')' )

else

return n;

n++;

} return -1;

}int getnext(char * str,char * host,int * pos)

n++;

} memcpy(host,& str[*pos] , n - (*pos));

ret = *pos ;

*pos = n;

n = ret;

if( str[n] == '+' || str[n] == '-' || str[n] == '*' || str[n] == '/'

|| str[n] == '(' || str[n] == ')' || str[n] == '#' )

return notnum;

return isnum;

}int evaluateexp(char* str,double * answer)

; if(!(str&& answer)) return 0;

ic = 0;

id = 0;

pushc('#');

ch = '#';

ret = getnext(str,&host,&pos);

while(ch != '#' || host[0] != '#')

else

}gettopc(&ch);

} if(!gettopd(answer)) return 0;

return 1;

}main()

; double answer = 0.0;

int error = 0 , i = 0;

gets(str);

while(str[0] != 'q')

str[strlen(str)]= '#';

printf("%s \n",str);

if(!evaluateexp(&str,&answer))

printf("error occured when caculate!\n");

else

printf("the answer is %g \n",answer);

memset(str,0,100);

gets(str);

}}

棧 算術表示式

將乙個算術表示式 即中綴形式 轉化成其字尾形式,並算出答案。include include include include include include using namespace std using namespace std bool isoperator char ch return f...

基於棧的字尾算術表示式求值

這是乙個菜雞的19秋季學期資料結構實驗課 基於棧的字尾算術表示式求值 實驗目的 1.掌握中綴表示式轉換為字尾表示式的演算法。2.掌握字尾表示式求值的演算法。實驗內容 問題描述 輸入乙個中綴算術表示式,將其轉換為字尾表示式,然後對字尾表示式進行求值。運算子包括 參與運算的為小於10的自然數 只考慮二元...

基於棧的中綴算術表示式求值

實驗目的 1.掌握棧的基本操作演算法的實現,包括棧初始化 進棧 出棧 取棧頂元素等。2.掌握利用棧實現中綴表示式求值的演算法。實驗內容 問題描述 輸入乙個中綴算術表示式,求解表示式的值。運算子包括 參加運算的數為 double型別且為正數。要求 直接使用中綴算術表示式進行計算,不能轉換為字尾或字首表...