VC#_Windows窗体应用程序设计。能实现四则混合运算的计算器。如下图所示。
VC#_Windows窗体应用程序的使用(新建项目等操作),在上一篇博客中有详细介绍,在此就不赘述。
四则运算先乘除后加减, 如下
1 + 14 / 7 x (7 - 3)
我们可以很简单的计算 7-3=4 , 14/7=2 , 2*4=8 , 1+8=9 得到最终答案9.
该运算在程序中 是以字符形式存储在 数组中的:char_temp[ ]={1,+,1,4,/,7,x,(,7,-,3,)}
**(此段落了解即可)*运算先后是以运算符为判断标志,可采用 for 语句找到所有的运算符,可得到pos_temp[ ]={+,/,x,(,-,)}。因为程序并不知道应该先计算括号中的运算符。于是采用自定义优先级判断函数,重新得pos_temp[ ]={-,/,x,+},现在可以运算了,char_temp[ ]={1,+,#,#,14/7,#,x,#,#,7-3,#,#}; //即 根据pos_temp[ ]中的符号顺序,提取符号前的 数与符号后的数进行运算,并按规律填 #字符(后续运算便可根据 ASCII值对其进行排除),对剩下的运算符 依照此规律 依次运算便可得到最终结果。
上述思路是可行的,不过绕来绕去真的烦。如果可以将char_temp[ ]重新排序,依次计算过来,那就简单很多了。
用到的优先级判断表 及 排序逻辑 如下所示(理解大概的 程序运行思路即可,文章后附有 程序源代码)
// '+' '-' '*' '/' '(' ')' '#' case'<':
/*'+'*/{ '>', '>', '<', '<', '<', '>', '>' }, pos_temp[++pos_cnt] = char_temp[char_cnt];
/*'-'*/{ '>', '>', '<', '<', '<', '>', '>' }, char_cnt++; break;
/*'*'*/{ '>', '>', '>', '>', '<', '>', '>' }, case'=':
/*'/'*/{ '>', '>', '>', '