• 20180925-6 四则运算试题生成


    作业链接:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2148

    git地址:https://git.coding.net/Cool_Ary/f4.git

    具体实现功能如下:

    功能1:支持出题4个数的四则运算题目,所有题目要求作者有能力正确回答。(+10

    功能2:在功能1的基础上,支持括号。(+15

    功能3:限定题目数量,精美打印输出,且要避免重复,最好能输出到.txt文件中。且对输入题目数进行限定,题目数量必须是正整数。(+10

    功能4:支持分数出题和运算。(不完成此题不倒扣分数)

    功能5:可把程序改成GUI/web/移植为androidios版。

    这篇博客主要由如下几个方面讲述:

    1.每个功能的重点,难点。

    2.如何解决重点难点以及收获

    3.运行截图

    4.结对编程体会。

    5.合作过程。

    6.版本控制。

    一,每个功能的重点,难点

          1)功能一的重点难点

              重点难点1如何产生随机数和随机字符。 

    重点难点3:如何将中缀表达式转换成后缀表达式。
             重点难点3:将输入的结果与正确结果比较,然后按照要求输出。
         2)功能二的重点难点 
             功能二的要求:在功能一要求的基础上加上有括号的运算。
             重点难点:加上有括号的运算,我们当初分析的时候是用括号匹配的方法,括号优先级最高,优先算括号里面的算式。
         3)功能三的重点难点 
            功能三的要求:输入题目道数,然后输出四则运算算式以及结果到.txt文件中,注意输出结果右对齐,与算式有一定的距离。
           重点难点:将输出结果放到.txt文件中。

    生成四个随机数和三个随机运算符。

    int num1 = rand.Next(1, 100);
    
    int num2 = rand.Next(1, 100);
    
    int num3 = rand.Next(1, 100);
    
    int num4 = rand.Next(1, 100);
    
    string[] opera = new string[] { "+", "-", "*", "/" };
    
    string op1 = opera[rand.Next(4)];
    
    string op2 = opera[rand.Next(4)];
    
    string op3 = opera[rand.Next(4)];

    将题目输出到文件。

    StreamWriter sw = File.AppendText("F:\研一\f4\f4\answer.txt");
    
    sw.WriteLine("{0,-30}{1}", str, sum);
    
    sw.Flush();//清空缓冲区
    
    sw.Close();//关闭流

    判断题目数量是否为正整数。

    System.Text.RegularExpressions.Regex reg1 = new System.Text.RegularExpressions.Regex(@"^[0-9]d*$");
    
    return reg1.IsMatch(str);

    中缀表达式转后缀表达式并计算。

    for (int i = 0; i < sp.Length; i++)
    {
      if (sp[i] != "+" && sp[i] != "-" && sp[i] != "*" && sp[i] != "/" && sp[i] != "(" && sp[i] != ")")
      {
        st1.Push(sp[i]);
      }
      else
      {
        if (st.Count == 0 || IsPriority(sp[i], st.Peek().ToString()) == 1 || sp[i] == "(")
        {
          st.Push(sp[i]);
        }
        else
        {
          while (st.Count != 0)
          {
            if (st.Peek().ToString() != "(")
            {
              res = calc(Convert.ToInt32(st1.Pop().ToString()), Convert.ToInt32(st1.Pop().ToString()), st.Pop().ToString());
              st1.Push(res);
            }
            else if (sp[i] != ")")
            {
              break;
            }
            else if (sp[i] == ")")
            {
              if (st.Peek().ToString() == "(")
              {
                st.Pop();
                break;
              }
              else
              {
                res = calc(Convert.ToInt32(st1.Pop().ToString()), Convert.ToInt32(st1.Pop().ToString()), st.Pop().ToString());
                st1.Push(res);
                     }
                  }
              }
          if (sp[i] != ")")
          {
            st.Push(sp[i]);
          }
        }
      }
    }

    判断题目是否重复。

    public static bool IsNotSame(string str, string[] set)
    {
      for (int i = 0; i < set.Length; i++)
      {
        if (str == set[i])
        {
          return false;
        }
      }
      return true;
    }

    运行截图:

     

    要求1 

    (1) 给出每个功能的重点、难点、编程收获。

    功能1:
    重点和难点在于表达式的生成和计算表达式的运算结果。
    编程收获:String字符串和int整型的互相转换、rand的使用、入栈操作、出栈操作、中缀表达式转后缀表达式、后缀表达式的计算。
    功能2:
    重点和难点在于括号优先级的判断。主要是在功能1上进行改进。
    功能3:
    重点和难点在于题目的文件输出。

    (2) 给出结对编程的体会

    两个人一起编程有默契,有争论,也有遇到困难时共同解决的喜悦。和自己一个人编程的感觉很不一样,很喜欢结对编程。

    (3) 至少5项在编码、争论、复审等活动中花费时间较长,给你较大收获的事件。 (10分)

    a.代码规范时两个人编程习惯的不同,造成制定规范时的争论。
    b.编码过程中在计算表达式的值的问题上,两个人都认为自己的想法更好。
    c.复审时遇到BUG两人认为出现问题的位置不相同。
    d.单元测试时测试用例的定制上出现争论。
    e.在如何判断运算符优先级的问题上讨论出多种方案,花费时间比较长。

    要求2 

    给出照片1张,包括结对的2位同学、工作地点、计算机,可选项包括其他能表达结对编程工作经历的物品或场景。 (5分)

    git地址:
  • 相关阅读:
    用redux-thunk异步获取数据
    用react + redux + router写一个todo
    用react+redux写一个todo
    给产品经理算的一卦。。。
    不知道为什么,我这里出了问题
    通过回调函数阻止进程创建(验证结束,方案完全可行)
    内核回调的触发时机
    我犯下的错误
    搬家完成
    sqlmap从入门到精通-第七章-7-14 绕过WAF脚本-overlongutf8.py&overlongutf8more.py
  • 原文地址:https://www.cnblogs.com/LY0503/p/9753643.html
Copyright © 2020-2023  润新知