GIT地址 | aglj |
---|---|
GIT用户名 | xiaxiaoshux |
学号后五位 | 03226 |
博客地址 | 我的博客园 |
作业链接 | 作业链接 |
一、环境配置
1.安装Visual Studio 2017
2.安装git
如下图可运行
3.克隆项目
点击fork后直接复制链接,再在git中输入命令即可。
二、代码思路
问题的背景:
阿超家里的孩子上小学一年级了,这个暑假老师给家长们布置了一个作业:家长每天要给孩子出一些合理的,但要有些难度的四则运算题目,并且家长要对孩子的作业打分记录。
作为程序员的阿超心想,既然每天都需要出题,那何不做一个可以自动生成小学四则运算题目与解决题目的命令行 “软件”呢。他把老师的话翻译一下,就形成了这个软件的需求:
程序接收一个命令行参数 n,然后随机产生 n 道加减乘除(分别使用符号+-*/来表示)练习题,每个数字在 0 和 100 之间,运算符在 2 个 到 3 个之间。
由于阿超的孩子才上一年级,并不知道分数。所以软件所出的练习题在运算过程中不得出现非整数,比如不能出现 3÷5+2=2.6 这样的算式。
练习题生成好后,将生成的 n 道练习题及其对应的正确答案输出到一个文件 subject.txt 中。
当程序接收的参数为4时,以下为一个输出文件示例。
13+17-1=29 11*15-5=160 3+10+4-16=1 15÷5+3-2=4
我的解决方案:
每次都产生范围内随机数和随机运算符,字符串拼接起来,最后使用DataTable将字符串算式计算出来,若不为小数即可。
using System; using System.Collections.Generic; using System.Text; using System.Data; using System.IO; public class Calculator { private static string[] op = new string[] { "+", "-", "*", "/" }; //初始化运算符 //生成表达式avd public static string mkfun() { Random r = new Random(Guid.NewGuid().GetHashCode());//解决随机数重复的问题 StringBuilder build = new StringBuilder(); int count = r.Next(2,4); // 运算符个数 int start = 0; int num1 = r.Next(1,101); // 范围内随机数 build.Append(num1); // 第一个数字 for (start = 0; start <= count; start++) { int idx = r.Next(0,4); // 随机运算符 int num2 = r.Next(1,101); // 范围内随机数 build.Append(op[idx]).Append(num2); // 运算符 连接 随机数 start++; } return build.ToString(); } //计算四则运算表达式结果 public static string Solve(string question) { DataTable dt = new DataTable(); string ans = dt.Compute(question, null).ToString(); // 将算式部分计算出结果并转为字符串 if (double.Parse(ans) % 1 != 0) // 如果结果是个小数,则返回null { return null; } return ans; } public static void Main(string[] args) { StreamWriter streamWriter = new StreamWriter(@"G:\000_xiaxiaoshux____大学各学期的文件\大三_上学期\系统分析与设计作业\AchaoCalculator\MyCalculator\MyCalculator\bin\Debug\test.txt", true); List<string> list = new List<string>(); Console.Write("请输入想要生成的个数:"); int n = int.Parse(Console.ReadLine()); for (int i = 0; i < n; i++) { string question = mkfun(); string answer = Solve(question); if (answer == null) // 如果是个小数,则continue { i--; continue; } list.Add(question + "=" + answer); Console.WriteLine(question + "=" + answer); } Console.WriteLine(string.Join("", list.ToArray())); foreach(string s in list) { streamWriter.WriteLine(s); } Console.ReadLine(); } }
输出的文件test.txt
三、测试过程
四、提交与感想
最终使用git命令行提交,迭代了3次,最后这个是第4个版本。
感想就是对我来说还是挺复杂的,首先是之前没有上传项目的经历,其次C#语法确实不太记得了,中间好多次请教同学,也确实获得了很多有用的想法,总之这是个很有意思的经历。