GIT地址 | https://github.com/xiaxiaoshux/AchaoCalculator |
---|---|
GIT用户名 | xiaxiaoshux |
学号后五位 | 03226 |
博客地址 | 我的博客园 |
作业链接 | 作业链接 |
一、环境配置
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 list = new List();
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();
}
}
三、测试过程
四、提交与感想
最终使用git命令行提交,迭代了3次,最后这个是第4个版本。
如下三个命令
感想就是对我来说还是挺复杂的,首先是之前没有上传项目的经历,其次C#语法确实不太记得了,中间好多次请教同学,也确实获得了很多有用的想法,总之这是个很有意思的经历。