利用栈实现c语言计算器

利用栈实现c语言计算器

ID:9018985

大小:24.00 KB

页数:4页

时间:2018-04-15

利用栈实现c语言计算器_第1页
利用栈实现c语言计算器_第2页
利用栈实现c语言计算器_第3页
利用栈实现c语言计算器_第4页
资源描述:

《利用栈实现c语言计算器》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、栈的应用:C实现简单计算器(表达式的计算)作为栈的著名应用,表达式的计算可以用下面方法实现:首先建立两个栈,操作数栈NUM_S和运算符栈OPR_S。其中,操作数栈用来存储表达式中的操作数;运算符栈用来存储表达式中的运算符。可以用字符‘=’来表示表达式结束符。自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:1.若W为操作数,则将W压入操作数栈NUM_S,且继续扫描下一个字符;2.若W为运算符,则根据运算符的性质做相应的处理:(0)若符号栈为空,无条件入栈当前指针指向的字符

2、(1)若w为不大于运算符栈栈顶的运算符,则从操作数栈NUM_S中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPR_S中弹出一个运算符,比如为+,然后作运算a+b,并将运算结果压入操作数栈NUM_S。(2)若w为左括号或者运算符的优先级大于运算符栈栈顶的运算符,则将运算符W压入运算符栈OPR_S,并继续扫描下一个字符。(3)若运算符W为右括号,循环操作(设先后弹出的操作数为a、b,再从运算符栈OPR_S中弹出一个运算符,比如为+,然后作运算a+b,并将运算结果压入操作数栈NUM_S),直到从运算符栈中

3、弹出第一个左括号。(4)若运算符W为表达式结束符‘=’,循环操作(设先后弹出的操作数为a、b,再从运算符栈OPR_S中弹出一个运算符,比如为+,然后作运算a+b,并将运算结果压入操作数栈NUM_S),直到运算符栈为空为止。此时,操作数栈栈顶元素即为表达式的值。=========================================================================举例:计算3+(5-2*3)/4-2=(1)开始栈为空,3入栈,+入栈,(无条件入栈,5入栈,-号优先级比(高,

4、所以-号入栈,2入栈,*优先级比目前栈顶的-号优先级高,所以*入栈,3入栈,接着扫描到)括号,)括号不入栈

5、

6、

7、

8、-------------------

9、3

10、

11、*

12、-------------------

13、2

14、

15、-

16、-------------------

17、5

18、

19、(

20、-------------------

21、3

22、

23、+

24、-------------------操作数栈操作符栈(2)在)括号碰到(括号之前,让操作数栈一直出栈,直到让左括号出栈为止所以:2,3弹出操作数栈,*弹出操作符号栈,计算2*3=6,然后将6入操作数栈

25、

26、

27、

28、

29、-------------------

30、

31、

32、

33、-------------------

34、6

35、

36、-

37、-------------------

38、5

39、

40、(

41、-------------------

42、3

43、

44、+

45、-------------------操作数栈操作符栈(3)接着6,5弹出操作数栈,-弹出操作符栈,计算5-6=-1,然后将-1入操作数栈,然后左括号出栈

46、

47、

48、

49、-------------------

50、

51、

52、

53、-------------------

54、

55、

56、

57、-------------------

58、-1

59、

60、

61、------

62、-------------

63、3

64、

65、+

66、-------------------操作数栈操作符栈(4)接着向下遍历表达式,到/号,优先级比操作符栈栈顶+高,所以/压栈,然后接着扫描,4入栈,再接着扫描到-号,优先级比操作符栈栈顶/的优先级低,则操作数栈4,-1出栈,操作符栈/出栈,计算-1/4=0,

67、

68、

69、

70、-------------------

71、

72、

73、

74、-------------------

75、4

76、

77、

78、-------------------

79、-1

80、

81、/

82、-------------------

83、3

84、

85、+

86、---------

87、----------操作数栈操作符栈(5)将上一步结果0压入操作数栈,刚才扫描到的-号,优先级和+号相同,则-号不入栈,将0,3弹出,将+号弹出,计算3+0=3

88、

89、

90、

91、-------------------

92、

93、

94、

95、-------------------

96、

97、

98、

99、-------------------

100、0

101、

102、

103、-------------------

104、3

105、

106、+

107、-------------------操作数栈操作符栈(6)将上一步中的结果3压入操作数栈,-号入操作符栈,接着扫描到2,2入操作数栈,接着扫描,发现到了=号,

108、则操作数栈2,3弹出,操作符栈-号弹出,计算3-2=1

109、

110、

111、

112、-------------------

113、

114、

115、

116、-------------------

117、

118、

119、

120、-------------------

121、2

122、

123、

124、-------------------

125、3

126、

127、-

128、-------------------操作数栈操作符栈(7)将上一步中的结果1压入操作数栈,最后1弹出栈,作为最后结果。

129、

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。