第四次作业四则运算

Posted fztt111

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四次作业四则运算相关的知识,希望对你有一定的参考价值。

代码git地址:https://git.coding.net/Rainbows/ruanjiangongcheng.git

对于本周作业,老师要求的是结对编程。作业要求如下:

功能1. 四则运算

功能2. 支持括号

功能3. 限定题目数量,"精美"打印输出,避免重复

根据高远博同学的提示,四则运算求值一定要用到逆波兰表达式,所以我百度搜了一下逆波兰表达式的作用和用法。

将一个普通的中序表达式转换为逆波兰表达式的一般算法是:

  (1)首先构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则。

  (2)读入一个用中缀表示的简单算术表达式,为方便起见,设该简单算术表达式的右端多加上了优先级最低的特殊符号“#”。

  (3)从左至右扫描该算术表达式,从第一个字符开始判断,如果该字符是数字,则分析到该数字串的结束并将该数字串直接输出。

  (4)如果不是数字,该字符则是运算符,此时需比较优先关系。

  做法如下:将该字符与运算符栈顶的运算符的优先关系相比较。如果,该字符优先关系高于此运算符栈顶的运算符,则将该运算符入栈。倘若不是的话,则将栈顶的运算符从栈中弹出,直到栈顶运算符的优先级低于当前运算符,将该字符入栈。

  (5)重复上述操作(3)-(4)直至扫描完整个简单算术表达式,确定所有字符都得到正确处理,我们便可以将中缀式表示的简单算术表达式转化为逆波兰表示的简单算术表达式。

 

以下是我所写的程序主要代码,也是我编写本次程序的重点难点:随机生成四个数作为四则运算式子中的四个数,然后生成四则运算的符号‘+,-,*,/\',并把数字和符号合并到一起,形成一个随机的四则运算的式子。并且采用

让被除数的素因子只有2和5去避免十进制下的无限小数。
{
num1 = RandNumber();
System.Threading.Thread.Sleep(15);
num2 = RandNumber();
System.Threading.Thread.Sleep(15);
num3 = RandNumber();
System.Threading.Thread.Sleep(15);
num4 = RandNumber();
System.Threading.Thread.Sleep(15);
op1 = RandSymbol();
System.Threading.Thread.Sleep(15);
op2 = RandSymbol();
System.Threading.Thread.Sleep(15);
op3 = RandSymbol();
if (op1 == \'/\')//如果我们要避免十进制下的无限小数,只需要让被除数的素因子只有2和5,以下同理。
{
Random rd = new Random();
n2 = rd.Next(1, 5);
System.Threading.Thread.Sleep(15);
m5 = rd.Next(1, 3);
num2 = (int)(Math.Pow(2, n2) * Math.Pow(5, m5));
}
if (op2 == \'/\')
{
Random rd = new Random();
n2 = rd.Next(1, 5);
System.Threading.Thread.Sleep(15);
m5 = rd.Next(1, 3);
num3 = (int)(Math.Pow(2, n2) * Math.Pow(5, m5));
}
if (op3 == \'/\')
{
Random rd = new Random();
n2 = rd.Next(1, 5);
System.Threading.Thread.Sleep(15);
m5 = rd.Next(1, 3);
num4 = (int)(Math.Pow(2, n2) * Math.Pow(5, m5));
}
ToEval = num1.ToString() + op1.ToString() + num2.ToString() + op2.ToString() + num3.ToString() + op3.ToString() + num4.ToString();
GetAnsr();
//Console.WriteLine("{0}{1}{2}{3}{4}{5}{6}{7}", num1, op1, num2, op2, num3, op3, num4,eq);
// Console.WriteLine("{0}", ToEval);
}

 

最后从控制台输入执行结果如图:

 这次编程过程中,我体会到了结对编程的好处,我的搭档高远博同学给予了我很大的帮助。我们互相转换思想,遇到问题一起讨论,最终完成了本次任务。以下是我们结对编程的照片:

 

以上是关于第四次作业四则运算的主要内容,如果未能解决你的问题,请参考以下文章

软件工程第四次作业二—单元测试 —[结对刘成志]

第四次寒假作业

寒假第四次作业

第四次作业 树

软件工程——第四次作业

第四次作业