第四次作业四则运算

本文介绍了如何使用逆波兰表达式实现四则运算,并通过随机生成包含加减乘除的数学表达式来避免十进制下的无限小数问题。文章详细记录了编程过程中的难点攻克与结对编程的心得。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码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);
}

 

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

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

 

转载于:https://www.cnblogs.com/WYLFZ/p/7639874.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值