- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
试验一计算器的制作
一. 试验要求
1.参照Windows 系统供应的计算器功能,制作一个自己的计算器,至少能完 成数据的加减乘除的基本功能。
多个控件〔按钮〕大事的共享
二. 设计思路
1、 首先要考虑将输入的内容在 textbox ±显示出来。所以整个过
程接受全局变量 input 来记录用户输入的内容〔计算器的按 键输入或者键盘输入〕。然后再将 input 的内容显示到 textbox 上。
2、 接下来就是怎么去将用户的输入变成数字和运算符的问题了。
本试验的计算器有“一般运算”和“科学运算”之分。所以 在计算的时候需要推断是哪一种运算,用 radioButton.Checked 来推断。
3、 假如是一般的运算,“+”、,”、* ”、/”的优先级一样,所
以算法比较简洁,只需要将 input 字符串的内容分割成运算 符和数字, 然后再 push 到两个不同的栈中。其中数字要先 转换为 double 类型, 再存入到栈中。
4、 假如是科学运算,则需要依据来“ +”、“-”、“*”、/”的优先级来进行运算。我是运用堆栈来实现的。算法如下:每当用 户点击“+”、,”、*” T 中的任何一个键时,则进行判
断,假如是“*”、/”,则将“*”、“/”之前的一个数变成double 类型,然后再存入栈中。然后设置乘号的标识符 flagl 为 true,或者设
置除号的标识符 flag2 为 true。假如用户点击 的是“+”、-”,则先推断 flag1,flag2 是否为 true,假如为 true, 则从栈中 pop 一个数,然后与当前用户输入的数进行计算, 然后再 push 到栈中,并把“ +”、-”也存入到另一个栈中; 假如为 false,则将+”、-”之前的一个数变为 double,然 后存入栈中,把“ +”、-”也存入到另一个栈中。
5、 当用户点击“=”号的时候,则对两个栈进行运算。由于试验
还要求可以支持键盘输入。所以需要对
Input 进行推断。因
为假如是键盘输入,input 的值为空,所以需要先把 textbox 中的内容读取进来,然后再进行推断,分割成数字和运算符, 然后再分别存入到两个栈中。假如是计算器的按键输入,则 直接对两个栈的内容进行运算。
6、 假设你的输入为“ 1+2-3*4+4+”,然后按“=”号,即输入的式
子后面多了一个“ +”号或“-”号或“*”号或“/”号,程 序会白动忽视式子最终多出的那一个运算符, 照旧能够正确
计算。而且程序的上一次计算结果能够作为下一次计算的一 个输入,
即将上一次的计算结果赋给运算。
input,然后可以连续
7、 程序中还设计了小数的计算、退格键以及清零键。可以进行小
数的“ +”、,”、“*”、“/”;假设输错了数字,可以通过退格键“ ”来清除。本试验的“退格键”支持一次性退多个格,
例如,你输入 1+2-3*45+6 之类的,然后退格到 1+2-3,计算 结果依
然正确。清零键即将程序中的各个变量的值重置。
8 、本程序的键盘输入跟计算器上的按键输入具有同样的效果, 同
样具有“一般运算”和“科学运算”之分。它只是在获得数 据方面跟按键输入不同,其余的计算是一样的
四则运算核心代码:
private void cal() //推断+或-”号之前的运算符是不是为
*”或者/号”,假如是则进行
相应的计算。
{
if (radioButton2.Checked == true )
{
{
sum =
if (flag1 == true )
Double .Parse(substr) * num.Pop();
num.Push(sum); flagl =
)
false ;
else if (flag2 == true )
{
sum = num.Pop() / num.Push(sum);
Double.Parse(substr);
flag2 =
)
{
else
false ;
num.Push(
)
)
else
{
Double.Parse(substr));
num.Push(
)
Double.Parse(substr));
private void button13_Click( object sender, EventArgs e)// 加号算法,调用 cal()函数。
(
clears();
i = input.LastlndexOfAny(fuhao); substr = input.Substring(i + 1);
if (substr !=
(
cal(); fh.Push(
click(sender,e);
)
+);
}
}
private void button14_Click( obje
原创力文档


文档评论(0)