• 软件工程第四周作业之四则运算-C#实现


    拿到题目的时候,快放假了,也没心思做。十月七号的一下午大概从两点做到八点半,加上十月八号的十二点半到两点半,做了一共八个半小时,去掉吃饭半个小时那么一共做了八个小时。

    逆波兰表达式我是扒的别人代码,没有自己写一遍。

    记得有一位老师曾经在课上讲过,每个人按照约定完成自己的工作,这是现代工业的基础。

    学习了一些C#语言。

    我写代码生成了带括号的四则运算表达式。数是随机的,括号是暴力生成的,特暴力。

    有理数计算懒得写了,女神青睐不值钱。

    加上括号之后怎么避免产生无限小数呢?这个我没有避免,仍然有时候会算出带小数的,比较少。

    加上括号之前的比较好处理。

    由于第一个数一定不会做被除数(出现在分母里)

    我直接把第2,3,4个数都构造成2^m*5^n,这样一定可以得到一个有限小数,当然,可能存在更好更漂亮的方法。

    下面贴一些关键代码。

      static void Main(string[] args)
            {   int num;//The number of expressions
                int cnt = 0;
                int token = 0;
                var arguments = CommandLineArgumentParser.Parse(args);//command line parameter
                int anslen = 1;//The number of the answers of expressions that have been used.
                double[] ansrep;//array to maintain answers that have been used
                ansrep = new double[1000];
                ansrep[0] = -23579;
                if (!arguments.Has("-c"))//如果命令行参数没有-c
                    num = 20;
                else
                { 
                num = int.Parse(arguments.Get("-c").Next);//命令行参数中得到要输出的表达式数量
                    token = 1;
                }
                if (token==0)
                {
                    for (int i = 0; i < num; i++)
                    {
                        Test t = new Test();//new Test
                        t.opinit();
                        t.GetBracketExp();
                        // t.GetExp();
                        //t.NoRepeatedAns(anslen, ansrep);
                        ansrep[(anslen++) - 1] = t.ansr;
                        t.DispExp();//display expression
                        Console.Write("?");
                        double ans = double.Parse(Console.ReadLine());
                        // Console.WriteLine("{0},{1}",ans,t.ansr);
                        if (Math.Abs(ans - t.ansr) < 1e-7)//answer is right
                        {
                            Console.WriteLine("You are very clever!!!");
                            cnt++;
                        }
                        else//answer is wrong
                        {
                            if (Math.Abs((double)Math.Round(t.ansr) - t.ansr) < 1e-7)//Intenger
                            {
                                Console.WriteLine("Sorry,the answer is {0}", (int)t.ansr);
                            }
                            else//decimal
                            {
                                string floatValue = t.ansr.ToString();
                                floatValue = floatValue.TrimEnd('.', '0');
                                Console.WriteLine("Sorry,the answer is {0}", floatValue);
    
                            }
                        }
                        /* for (int j = 0; j < anslen; j++)
                         {
                             Console.WriteLine("{0:f5}", ansrep[j]);
                         }*/
                    }
                }
                else
                {
                    for (int i = 0; i < num; i++)
                    {
                        Test t = new Test();//new Test
                        t.opinit();
                        t.GetBracketExp();
                        // t.GetExp();
                        //t.NoRepeatedAns(anslen, ansrep);
                        ansrep[(anslen++) - 1] = t.ansr;
                        t.DispExpAns(t);//display expression and answer
               
                    }
                }
                Console.WriteLine("Total 20 Problems,you have solved {0}problem(s)", cnt);
            }
        }

    这是我的主函数。

    值得一提的是,读取命令行参数也是用的别人代码,这两个加起来有接近三百行之多。

    结对编程的照片,最后修改一些代码的格式,找一些bug,我的搭档王玉玲同学耐心的给予我帮助和指导,作为一个领航者给出一些方向上的意见。

    https://git.coding.net/Rainbows/F4.git

    这是我代码的git地址

    结对编程争论的点、体会稍后补充

  • 相关阅读:
    SQL Server 快速大数据排序方法
    RGB颜色名称与色值对应表
    Visual Studio 2017 Android 调试无法连接到虚拟机
    sqlite 使用 cte 及 递归的实现示例
    C# 判断文件编码
    SQL点点滴滴_SQL分页查询
    SQL点点滴滴_判断字段或者字符中是否包含有特殊字符
    SQL点点滴滴_公用表表达式(CTE)递归的生成帮助数据
    【Oracle】Update方法
    SQL点点滴滴_DELETE小计
  • 原文地址:https://www.cnblogs.com/gaoyb348/p/7638242.html
Copyright © 2020-2023  润新知