//利用棧實現簡易計算器,進行包含+,-,*,/,(,)間的計算
#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...