輸入中綴表示式輸出結果(結果可以是小數,但輸入必須是整數)
1 #include2 #include//需要兩個棧,乙個儲存結果,乙個儲存運算子
3#define newpc (stype *)malloc(sizeof(stype))
4#define newpi (inttype *)malloc(sizeof(inttype)) //
定義兩個申請位址的巨集
5 typedef struct
char_stack
6 stype;
10 typedef struct
int_stack
11 inttype;
15void charpush(stype** stacktop,char c) //
運算子壓棧函式,需要傳進棧頂指標本身的位址,而不是它指向的位址
1622
char charpop(stype** stacktop) //
運算子出棧函式
2330
void intpush(inttype** stacktop,double c) //
數字壓棧函式
3137
double intpop(inttype** stacktop) //
數字出棧函式
3845
void tanchu(char c,inttype ** stacktop) //
彈出字元,然後運算,然後進棧
4654
int tance(char c) //
探測優先順序的函式
5560
int main() //
主函式 功能:處理輸入的中綴表示式,輸出結果(過程中用到了字尾的轉化)
6184 intpush(&numtop,a); //
如果是個數字字元,就把這個數字一直讀進去(因為不一定是幾位數),然後壓棧到num裡
85}
86else
if (c=='
(') //
如果是左括號,直接壓棧到sig裡
8791
else
if (c=='
)') //
如果是右括號,就邊彈棧邊處理結果,直到遇到左括號
9297 c=getchar();
98 charpop(&sigtop);99}
100else
if (c=='
+'||c=='
-'||c=='
*'||c=='
/') //
如果是+-*/就比較與棧頂的優先順序,如果高,直接壓入,否則(等於也不能壓入),邊彈邊處理結果,直到可以壓入(和上面有點像)
101109
else
115 charpush(&sigtop,c);
116 c=getchar();
117}
118}
119else
//否則,忽略這個符號 ,並且顯示輸入有誤
120124
125}
126while (sigtop->dat!='
@') //
收收尾,把沒有彈出的都處理一下
127130 printf("
%.2lf\n
",numtop->dat);
131 c=getchar();
132return0;
133 }
棧的應用1 超級計算器(中綴與字尾表示式)C語言
這裡要學的程式主要用來實現乙個功能 輸入表示式輸出結果,也就是乙個計算器。效果如下 這個程式主要有兩個步驟 1 把中綴表示式轉換為字尾表示式 2 計算字尾表示式的結果。首先先明白幾個問題 2 怎麼把中綴表示式轉換為字尾表示式?3 怎麼用字尾表示式輸出結果?相信如果弄明白了上面幾個問題,有c語言基礎的...
棧應用 中綴轉字尾 字尾計算
中綴表示式 infix expression 即 平時生活中大家對於算式的書寫格式 eg 6 5 2 3 8 3 字尾表示式 post expression 即 把數字和運算子分開,把運算子的優先順序運算內涵到字尾式的數字和運算子的順序 中 故其 優點就是,沒有必要知道任何優先的規則 乙個運算子只對...
動態陣列 棧的應用 之中綴計算器
格式化表示式 public class infixcalculator private static string insertblanks string expression else return sb.tostring 執行結果 中綴表示式實現的簡易的計算器 操作符棧 數字棧 如果遇到數字 直...