zoukankan      html  css  js  c++  java
  • 《构建之法》第二次作业

    GIT地址| https://github.com/xiaxiaoshux/AchaoCalculator

    一、环境配置

    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#语法确实不太记得了,中间好多次请教同学,也确实获得了很多有用的想法,总之这是个很有意思的经历。

  • 相关阅读:
    准备活动
    几个很好的.Net开源框架
    windows 进程通信(使用DDE)(转)
    mysql error 1046 1064 1264 (ERROR大全)
    在版本库里建立版本
    20120206系统日志
    Cocos2dx项目从VS移植到Xcode中的配置
    用python解析JSON
    win10下vc++6.0的安装问题
    Python爬虫(一)抓取指定的页面
  • 原文地址:https://www.cnblogs.com/xiaxiaoshux/p/11548887.html
Copyright © 2011-2022 走看看