---恢复内容开始---
1.开头
GIT地址 | https://github.com/Untrara |
GIT用户名 | Untrara |
学号后五位 | 31124 |
博客地址 | https://i.cnblogs.com/posts |
作业链接 | https://www.cnblogs.com/harry240/p/11515697.html |
2.作业
(1)因为自己在很早之前就安装过VS2019,我就直接截我VS2019的图来证明我的环境配置完成了吧。
我的GitHub首页
GIt我也之前就安装了,这个地方不再演示安装过程,展示一下黑色窗体
从远程仓库拷贝到本地(我这是第二次拷贝的截图,第一次拷贝忘了截图,第二次拷贝显示文件已经在本地)
(2)代码设计思路
首先声明一个包含四则运算符号的数组
产生一个随机数2或者3,来确保选择的符号个数,是2或者3
接下来分成两个分支,一个符号是2个的时候,一个符号是三个的时候
符号是2的时候,随机从符号数组选取两个符号,存入LIst<String>中,再随机产生三个[1,100]的数
接下来把三个随机数与两个符号用Concat函数拼接成一个四则运算式。形如:2+3-5
得到这个四则运算的字符串之后,用dataTable.Compute对拼接好的四则运算式进行运算(公式本身会先算乘除,再算加减)
这个时候程序初步就完成了,但是由于这个时候没有条件限制,导致输出会有小数和负数,此时需要对结果进行判定
如果结果为负,或者是小数,则舍弃当前的式子,重新开始一轮循环,知道式子的结果不为负,不为小数为止
此时还有最后一个需要注意的地方,就是虽然结果不会出现小数,但是形如:10/20*20的式子在运算中会出现小数。这个时候我的判别条件是这样的,如果符号为负的时候,符号前的数必须大于符号后的数,如果不大于,则同样舍弃当前式子,继续下一轮循环。(以上都是符号为两个,随机数为三个的情况。符号为三个,随机数为四个的情况同理)
总体代码:
using System; using System.Collections.Generic; using System.Data; using System.IO; namespace Calculator { class Program { static void Main(string[] args) { StreamWriter sw = new StreamWriter(@"F:\QQPCmgr\Desktop\Calculator\Untrara\Output.txt"); int NumOfSymbol; DataTable dataTable = new DataTable(); Console.WriteLine("输入一个整数确定四则运算个数,请输入:"); int count = Convert.ToInt32(Console.ReadLine()); String[] symbol = { "+", "-", "*", "/" }; Random r = new Random(); Console.SetOut(sw); for (int j = 1; j <= count; j++) { int num = r.Next(1, 101); if (num > 50) { NumOfSymbol = 2; int tmp = 0; List<string> list1 = new List<string>(); while (true) { int NumOfArr = r.Next(0,4); string result = symbol[NumOfArr]; list1.Add(result); tmp++; if (tmp == NumOfSymbol) { string a = Convert.ToString(r.Next(1, 101)); string b = Convert.ToString(r.Next(1, 101)); string c = Convert.ToString(r.Next(1, 101)); string formula = String.Concat(a, list1[0], b, list1[1], c); object test = dataTable.Compute(formula,""); decimal final = Convert.ToDecimal(test); int finalNum = Convert.ToInt32(final); if (final == finalNum && final > 0) { if (list1[0].Equals("/") || list1[1].Equals("/")) { if (Convert.ToInt32(a) < Convert.ToInt32(b) && Convert.ToInt32(b) < Convert.ToInt32(c)) { tmp = 0; list1.Clear(); } } else { Console.WriteLine(a + list1[0] + b + list1[1] + c + "=" + final); break; } } else { tmp=0; list1.Clear(); } } } } else { NumOfSymbol = 3; int tmp = 0; List<string> list2 = new List<string>(); while (true) { int NumOfArr = r.Next(0,4); string result = symbol[NumOfArr]; list2.Add(result); tmp++; if (tmp == NumOfSymbol) { string a = Convert.ToString(r.Next(1, 101)); string b = Convert.ToString(r.Next(1, 101)); string c = Convert.ToString(r.Next(1, 101)); string d = Convert.ToString(r.Next(1, 101)); string formula = String.Concat(a, list2[0], b, list2[1], c, list2[2], d); object test = dataTable.Compute(formula, ""); decimal final = Convert.ToDecimal(test); int finalNum = Convert.ToInt32(final); if (final == finalNum && final > 0) { if (list2[0].Equals("/")|| list2[1].Equals("/")|| list2[2].Equals("/")) { if (Convert.ToInt32(a) < Convert.ToInt32(b) || Convert.ToInt32(b) < Convert.ToInt32(c) || Convert.ToInt32(c) < Convert.ToInt32(d)) { tmp = 0; list2.Clear(); } } else { Console.WriteLine(a + list2[0] + b + list2[1] + c + list2[2] + d + "=" + final); break; } } else { tmp = 0; list2.Clear(); } } } } } sw.Flush(); sw.Close(); } } }
(3).用git提交代码
提交后结果
四、对项目进行单元测试和回归测试的过程
vs2019测试创建
单元测试:
回归测试,多次输入数字,发现结果均正确:
效能分析,cpu与内存可视图
五.感想
虽然通过这次的作业收获很多,首先是自己花了一天的时间编写了一个四则运算的程序,在这个过程之中,我是自己编写这个程序,我看到有些人使用了堆栈或者二叉树等数据结构来实现,总的来说还是自己对这些基本的数据结构了解不够深刻,所以想使用的时候总感觉有心无力,以后有空的话,这个程序的实现可以使用二叉树来试一试。在编程的过程中,很多时候以为变量的作用域而出错,经常在修改不同的变量,想来通过这次,发现自己虽然一直在往前学习,但是却基础不牢,实在是不应该,在今后的学习中要更加注意。接下来是使用git和GitHub的使用,这些工具虽然我在之前也安装使用过,如果操作得当,是真的很方便,但是这些工具都需要在日常的使用中一次又一次的使用,才能保证熟练的使用。通过单元测试和回归测试等等,以这次机会了解到了一个类的运行时间,比起之前,更加直观的看到自己写的代码是否高效,在以后的学习工作中,多使用,才能保证自己代码的高效。
---恢复内容结束---