《构建之法》第二次作业

限于喜欢 提交于 2019-11-30 03:02:25
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#语法确实不太记得了,中间好多次请教同学,也确实获得了很多有用的想法,总之这是个很有意思的经历。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!