基於c的簡易計算器一

2022-07-19 09:39:18 字數 3202 閱讀 2931

1 #include 2 #include 3 #include 

45 #include 67

#define stack_size 10089

10struct

snode;

1415

struct

stack;

2021

/*棧操作函式

*/22

int initstack(stack &s); /*

建立棧*/

23int destroystack(stack &s); /*

銷毀棧*/

24int clearstack(stack &s); /*

清空棧*/

25int gettop(stack s, snode &e); /*

取出棧頂結點並返回節點值

*/26

int push(stack &s,snode e); /*

將結點e壓入棧

*/27

int pop(stack &s,snode &e); /*

刪除棧頂結點並返回其節點值

*/28

29/*

表示式計算器相關函式

*/30

char get_precede(char s,char c); /*

判斷運算子s和c的優先順序

*/31

int isopr(char c); /*

判斷輸入的字元是不是運算子,是則返回0,否返回1

*/32

float operate(float x, char opr, float y); /*

計算x和y經過運算子opr計算後的結果

*/33

float compute(); /*

表示式結算器主函式

*/34

char *killzero(float result); /*

去掉結果後面的0

*/35

36int initstack(stack &s)

3744 s.top=s.base

;45 s.size=stack_size;

46return0;

47}4849

int destroystack(stack &s)

5054

55int clearstack(stack &s)

5660

61int gettop(stack s,snode &e)

6268 e=*(s.top-1

);69

return0;

70}7172

int push(stack &s,snode e)

7382 s.top=s.base+s.size;84}

85 *s.top=e;

86 s.top++;

87return0;

88}8990

int pop(stack &s,snode &e)

9197 e=*(s.top-1

);98 s.top--;

99return0;

100}

101102

char get_precede(char s,char

c)103

166return0;

167}

168169

int isopr(char

c)170

176177

float operate(float x, char opr, float

y)178

197else

198202

default

:203 printf("

bad input.\n");

204return0;

205}

206return

result;

207}

208209

float compute() /*

計算的時候運算子棧頂結點的優先順序始終最低

*/210

235else

/*是運算子

*/236

246 opr_in.ch=c;

247switch(get_precede(opr_top.ch,c)) /*

根據運算子優先順序做相應操作

*/248

268 printf("

opnd出棧:[%f]\n

",b.data);

269if(pop(opnd,a)<0

)270

275 printf("

opnd出棧:[%f]\n

",a.data);

276 opn_tmp.data=operate(a.data,opr_t.ch,b.data); /*

計算*/

277 push(opnd,opn_tmp); /*

將計算結果壓入運算元暫存器

*/278 printf("

結果入棧:[%f]\n

",opn_tmp.data);

279break

;280

}281

}282 gettop(optr,opr_top); /*

取出運算子暫存器棧頂結點

*/283

}284

gettop(opnd,opn_tmp);

285destroystack(optr);

286destroystack(opnd);

287return

opn_tmp.data;

288}

289290

char *killzero(char *res,float

result)

291301

if(res[i]=='.'

)302 res[i]='\0'

;303

return

res;

304}

305306

intmain()

307324

return0;

325 }

C 簡易計算器

介紹 僅支援自然數間的 操作,並沒有括號。實現 利用棧實現儲存運算數以及運算子。流程 輸入 string exp 對exp進行處理 數字入數棧,運算子入字元棧。對字元棧檢測,非空時進行 計算 輸出 結果。處理 數字則入數棧,字元就進行判斷,1 棧空,字元入棧 2 而棧非空 棧頂運算級別 當前字元運算...

研發基於GUI的簡易計算器

使用物件導向思想研發簡易計算器 匯入相關的類庫檔案 import wx class cal gui 類的初始化方法,建立所有的控制項 def init self self.window wx.frame none title 計算器 size 600 500 self.panel wx.panel ...

簡易計算器

include include include char xpr expression int level char ch double calc int lim return ret int main cal的遞迴使用,利用了當 運算子運算完畢以後,仍然會留在這個位置 比如式子 3 5 2 的分析...