当你感到学习困难的时候,你在走上坡路!

 

GIT地址 https://github.com/MinChanDu
GIT用户名 MinChanDu
学号后五位 62305
博客地址 https://www.cnblogs.com/Mchandu/
作业链接 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/2793

一、

VS安装及环境配置问题:之前学习C#的时候就已经安装过了,除了使用反应慢了点没有什么问题。当时初次安装的时候,安装完毕过后出现了路径不对,打开错误的问题,又重新卸载干净后,在选择路径的时候有留意过,解决了。

二、

 代码设计思路:(PS:本人把之前学的所有东西都忘了,在完成本次作业之前,偷偷摸摸把前知识学习了,才动了手,哭哭)

(1)生成四则运算肯定是要选取随机数,采用了Random()函数

问题:测试生成数时发现数字重复率很大

解决:百度c#随机数生成不重复?

参考博客主文章:http://www.cnblogs.com/huangfr/archive/2012/03/27/2420464.html(博客是个好东西,你可以站在别人的肩膀上)

明白了,去重可以设置时间种子,设计检验是否生成的随机数有重复的函数(产生随机数放在数组里面),部分代码如下图:

 

 public int getNum(int[] arrNum, int tmp, int minNum, int maxNum, Random ra)
        {
            int n = 0;
            while (n <= arrNum.Length - 1)
            {
                if (arrNum[n] == tmp) //利用循环判断是否有重复
                {
                    tmp = ra.Next(minNum, maxNum); //重新随机获取。
                    getNum(arrNum, tmp, minNum, maxNum, ra);//递归:如果取出来的数字和已取得的数字有重复就重新随机获取。
                }
                n++;
            }
            return tmp;
        }
        public int[] getRandomNum(int num, int minNum, int maxNum)
        {

            Random ra = new Random(unchecked((int)DateTime.Now.Ticks));
            int[] arrNum = new int[num];
            int tmp = 0;
            for (int i = 0; i <= num - 1; i++)
            {
                tmp = ra.Next(minNum, maxNum); //随机取数
                arrNum[i] = getNum(arrNum, tmp, minNum, maxNum, ra); //取出值赋到数组中
            }
            return arrNum;
        }

 

(2)四则运算符号也用随机数除余抽取,主要问题在于非负和非整问题,于是本人限制了乘号和除号的位置只能在第一个(后面去取符号就不用判断前面的结果,也没有乘除法在后面的优先处理了,所以用switch循环处理符号只有在第一个switch中有’*/’),至于处理产生负数的问题,本人用变量存储了每一步结果,遇到减号需要判断大小。部分代码如下(以生成只有两个运算符的算式为例子):

 

public void Two_op()
        {
            int p, t;
            int[] arr = getRandomNum(5, 1, 100); //从1至100中取出5个互不相同的随机数,其中4,5决定操作符
            int[] b = new int[1];//存储每次操作符后的结果
            char[] c = new char[2];//存储确定的操作符
            string d1;  //存储算式及结果,后续输入到文件中
            p = arr[3] % 3;
            switch (p)
            {
                case 0:
                    b[0] = arr[0] + arr[1];
                    c[0] = '+';
                    break;
                case 1:
                    if (arr[0] < arr[1])//排除负数结果,用大数减去小数
                    {
                        t = arr[0];
                        arr[0] = arr[1];
                        arr[1] = arr[0];
                    }
                    b[0] = arr[0] - arr[1];
                    c[0] = '-';
                    break;
                case 2:
                    if (arr[0] % arr[1] == 0)//判断m是否可以整除n,可以就打印除法,否则做乘法
                    {
                        b[0] = arr[0] / arr[1];
                        c[0] = '/';
                    }
                    else
                    {
                        b[0] = arr[0] * arr[1];
                        c[0] = '*';
                    }
                    break;
                default:
                    break;
            }
            p = arr[4] % 2;//第二个操作符
            switch (p)
            {
                case 0:
                    c[1] = '+';
                    b[0] += arr[2];
                    break;
                case 1:
                    if (b[0] < arr[2])//排除负数结果
                    {
                        c[1] = '+';
                        b[0] += arr[2];
                    }
                    else
                    {
                        c[1] = '-';
                        b[0] -= arr[2];
                    }
                    break;
                default:
                    break;
            }
            Console.WriteLine("{0}{1}{2}{3}{4}=", arr[0], c[0], arr[1], c[1], arr[2]);//打印算式
            d1 = Convert.ToString(arr[0]) + Convert.ToString(c[0]) + Convert.ToString(arr[1]) + Convert.ToString(c[1]) + Convert.ToString(arr[2]) + "=" + Convert.ToString(b[0]);
            PutFile(d1);

        }
public void Two_op()
        {
            int p, t;
            int[] arr = getRandomNum(5, 1, 100); //从1至100中取出5个互不相同的随机数,其中4,5决定操作符
            int[] b = new int[1];//存储每次操作符后的结果
            char[] c = new char[2];//存储确定的操作符
            string d1;  //存储算式及结果,后续输入到文件中
            p = arr[3] % 3;
            switch (p)
            {
                case 0:
                    b[0] = arr[0] + arr[1];
                    c[0] = '+';
                    break;
                case 1:
                    if (arr[0] < arr[1])//排除负数结果,用大数减去小数
                    {
                        t = arr[0];
                        arr[0] = arr[1];
                        arr[1] = arr[0];
                    }
                    b[0] = arr[0] - arr[1];
                    c[0] = '-';
                    break;
                case 2:
                    if (arr[0] % arr[1] == 0)//判断m是否可以整除n,可以就打印除法,否则做乘法
                    {
                        b[0] = arr[0] / arr[1];
                        c[0] = '/';
                    }
                    else
                    {
                        b[0] = arr[0] * arr[1];
                        c[0] = '*';
                    }
                    break;
                default:
                    break;
            }
            p = arr[4] % 2;//第二个操作符
            switch (p)
            {
                case 0:
                    c[1] = '+';
                    b[0] += arr[2];
                    break;
                case 1:
                    if (b[0] < arr[2])//排除负数结果
                    {
                        c[1] = '+';
                        b[0] += arr[2];
                    }
                    else
                    {
                        c[1] = '-';
                        b[0] -= arr[2];
                    }
                    break;
                default:
                    break;
            }
            Console.WriteLine("{0}{1}{2}{3}{4}=", arr[0], c[0], arr[1], c[1], arr[2]);//打印算式
            d1 = Convert.ToString(arr[0]) + Convert.ToString(c[0]) + Convert.ToString(arr[1]) + Convert.ToString(c[1]) + Convert.ToString(arr[2]) + "=" + Convert.ToString(b[0]);
            PutFile(d1);

        }

 

(3)每一步的数字和符号转换成字符串存在变量的d1中,用输入文件中,函数代码如下:

public void PutFile(string x)//将算式打印到文件中
        {
            string path = @"D:\subject.txt";
            FileInfo fileInfo = new FileInfo(path);
            StreamWriter sw = fileInfo.AppendText();
            sw.WriteLine(x);
            sw.Close();
        }

 

(4)主函数用于接收题目个数,代码如下:

 

  static void Main(string[] args)
        {
            Operation A = new Operation();//新建生成算式对象
            int n, x, y, i, j;
            Console.WriteLine("请输入您想生成的四则运算题目个数:");
            n = Convert.ToInt32(Console.ReadLine());//题目个数
            x = n / 2;//生成的含有2个运算符的题目个数
            y = n - x;//生成的含有3个运算符的题目个数
            for (i = 0; i < x; i++)
            {
                A.Two_op();//生成x个含有2个运算符的算式
            }
            for (j = 0; j < y; j++)
            {
                A.Third_op();//生成n-x个含有2个运算符的算式
            }
        }

 

(5)结果运行截图:(博客写到这里我也是激动的,相信看客们,不止我一个人写一点,就需要去查资料吧,就那个文件覆盖问题,我也是掉了头发的~)

 

 

 

 

三、

用Git克隆提交代码:(前面注册和阿超克隆不详写,史上使用GIT最惨博主)

容许本人说下经历:先是安装它,就十几次,找不到文件,本人跑到图书馆git下载起了,VS不行,于是回到寝室,继续git,苍天啊,总算安装起了。已经式深夜了,开始提交代码,pushpush~(此处省略N次push),搞笑的是还有人问深夜不睡,心事?(不,心肌梗塞!)不详细抱怨了,过程苦并快乐着,莫名觉得满高大上的项目。(贡献经验,git提交问题处理参考:希望对git使用有问题的同学有所帮助哦~

链接一:https://www.cnblogs.com/jackchensir/p/8306448.html

链接二: https://blog.csdn.net/hanghangaidoudou/article/details/83501185)

最完美的一次push附上:

 

 

 

 

 

四、

单元测试和回归测试:(这段比较有意思的就是断点,可以详细的看到每个参数信息,本人开始“启动新项目”出错,就是因为在单元测试里面点的,想运行原项目,就出错了,后来关闭了测试通过的单元项目就好了)附上部分图:

 

 

还有就是查看CPU占用,以前并不清楚代码的背后,看到分析,还是感到神奇:

 

五、

总结:

  1. 首先,本次作业花费时间最大的问题就在于git安装,本人的电脑不能用git(找不到路径文件),到图书馆机房的电阅室做的;
  2. 随机数的生成问题,虽然百度解决了问题,但是在运行结果中,还是可以看出会有相同的算式;
  3. 非负,和非整问题,开始的思路是不满足,就重新生成,还要判断符号位置,觉得复杂,就采用了固定乘号除号只能生成在第一个;
  4. 第一次做这种作业,有点难度,但是苦并快乐着,因为很充实,自己思考出来的解决方法,虽然仍然缺点很多,但是成就感很足;
  5. 第一篇博客就有写,重新认真,最然很晚提交作业,但是这次作业是用心完成的,缺点很多,但是对比以前的自己进步很大,每次作业后,都希望对自己的要求慢慢提升一些,埋头苦干,只希望自己在上坡前进!
  6. GIT真的是个新东西,之前有听过,不爱学习,就没有去管,通过这次作业了解还可以创建自己的代码创库,神奇!
  7. 也希望看到这篇博客的同学加油吧,遇到困难,自暴自弃不是办法,解决完了,你会发现自己还不错!
posted @ 2019-03-28 17:54  明婵度  阅读(688)  评论(3编辑  收藏  举报