zoukankan      html  css  js  c++  java
  • 当你感到学习困难的时候,你在走上坡路!

    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. 也希望看到这篇博客的同学加油吧,遇到困难,自暴自弃不是办法,解决完了,你会发现自己还不错!
  • 相关阅读:
    【NOI1999、LOJ#10019】生日蛋糕(搜索、最优化剪枝、可行性剪枝)
    【NOI2016】区间
    【CodeForces688A】Opponents
    「LOJ10150」括号配对
    HDU6444(子段和、分情况比较)
    牛客练习赛41E(球的体积并)
    Codeforces 1154G(枚举)
    POJ1830(异或高斯消元)
    Codeforces 1114F(欧拉函数、线段树)
    牛客小白月赛13 G(双向搜索)
  • 原文地址:https://www.cnblogs.com/Mchandu/p/10616674.html
Copyright © 2011-2022 走看看