(C語言)棧應用簡易計算器實現

2021-08-21 04:47:04 字數 2234 閱讀 8435

//利用棧實現簡易計算器,進行包含+,-,*,/,(,)間的計算 

#include#include#define maxsize 100

typedef struct charstack //字元棧

cstack;

typedef struct doublestack //資料棧

dstack;

int isop(char ); //當前掃瞄元素優先順序

int inop(char ); //棧頂元素優先順序

void initc(cstack *); //初始化字元棧

int pushc(cstack *,char); //字元棧壓棧

char gettopc(cstack *); //返回棧頂元素

char popc(cstack *); //出棧

void initd(dstack *); //初始化資料棧

int pushd(dstack *,double); //資料壓棧

double popd(dstack *); //出棧

void trans(char*s1,char*s2);         //轉化為字尾表示式

double calculate(char *s2); //字尾表示式求值

int main()

//初始化

void initc(cstack *s1)

//字元棧壓棧

int pushc(cstack *c1,char op)

else return 0;

}//get棧頂元素

char gettopc(cstack *c1)

//字元棧出棧

char popc(cstack *c1)

//初始化資料棧

void initd(dstack *d1)

//資料棧壓棧

int pushd(dstack *d1,double data)

else return 0;

}//資料棧出棧

double popd(dstack *d1)

int isop(char op) //當前掃瞄運算子優先順序

}int inop(char op) //當前掃瞄運算子優先順序

}void trans(char *s1,char *s2)

s1[j++]='(';

s1[j++]='0';

s1[j++]='-';

s1[j++]='1';

s1[j++]=')';

s1[j]='*';

}if(s1[i]=='('&&s1[i+1]=='-') //非第一位負數時

s1[j++]='(';

s1[j++]='0';

s1[j++]='-';

s1[j++]='1';

s1[j++]=')';

s1[j]='*';

i=i+5;

} i++; }

i=0;

j=0;

while(s1[i]!='\0')

if(s1[i]>='0'&&s1[i]<='9'||s1[i]=='.')

else if(s1[i]=='+'||s1[i]=='-'||s1[i]=='*'||s1[i]=='/'||s1[i]=='(')

else

}} else if(s1[i]==')')

while(gettopc(&st1)!='(')

popc(&st1); //將'('出棧

} i++;

} while(st1.top>=0) //將棧內剩餘的運算子依次退棧輸出

s2[j]='\0';

}//表示式求值

double calculate(char *s1)

else //為資料時轉化為double型別壓棧

if(flag==0)

else

i++;

}if(s1[i]=='+'||s1[i]=='-'||s1[i]=='*'||s1[i]=='/') i--; //轉化成功乙個資料,若下個字元為運算子,則i--,回到當前運算的資料位置

pushd(&ds1,sum);

} i++; //i++準備下乙個字元的轉換

} return popd(&ds1);

}

棧實現簡易計算器

計算數學表示式的值。輸入數學表示式,輸出表示式的計算結果。數學表示式由單個數字和運算子 構成,例如 2 3 4 5 6 4。include include include include using namespace std double result int tag template class...

棧 簡易計算器

題目描述 讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。輸入 測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。輸出 對每個測試用例輸出1行,即該表示式的值,精確到小數點後2位...

利用棧實現簡易計算器

輸入數學表示式,輸出結果。其中符號支援加減乘除 乘方及括號,數字支援小數及負數。開兩個陣列,乙個陣列為符號棧,乙個陣列為數字棧。字串讀入表示式並逐位處理,有數字就擷取下來存入數字棧,運算符號截下來存入符號棧,若發現當前符號優先順序小於等於前乙個符號的優先順序,就要把前面那部分的值計算出來,例如3 2...