首页 > 技术文章 > 20180925-6 四则运算试题生成

zhaojialu 原文

  本作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2148

结对对象:王硕

一、功能的重点难点,编程收获及运行截图

功能一的重点难点:

1.重点,如何生成随机数和随机运算符

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

2.重点,如何定义+-*/的优先级

 1  public static int assess(string str)
 2         {
 3             switch (str)
 4             {
 5                 case "+":
 6                     return 1;
 7                 case "-":
 8                     return 1;
 9                 case "*":
10                     return 2;
11                 case "/":
12                     return 2;
13                 default:
14                     return 0;
15             }
16         }

3.难点,判断题目是否重复

 1 public static bool IsNotSame(string str, string[] set)
 2         {
 3             for (int i = 0; i < set.Length; i++)
 4             {
 5                 if (str == set[i])
 6                 {
 7                     return false;
 8                 }
 9             }
10             return true;
11         }

功能二的重点难点 

1.重点难点,中缀表达式转后缀表达式并计算

 1         public static int ChangeExpression(string zStr)
 2         {
 3             char a = ' ';
 4             String[] sp = zStr.Split(a);//字符串数组sp
 5 
 6             Stack st = new Stack();  //栈st
 7 
 8             Stack st1 = new Stack();
 9             //int j = 0;
10             int res = 0;
11             for (int i = 0; i < sp.Length; i++)
12             {
13                 if (sp[i] != "+" && sp[i] != "-" && sp[i] != "*" && sp[i] != "/" && sp[i] != "(" && sp[i] != ")")
14                 {
15                     st1.Push(sp[i]);
16                     //j++;
17                 }
18                 else
19                 {
20                     if (st.Count == 0 || IsPriority(sp[i], st.Peek().ToString()) == 1 || sp[i] == "(")
21                     {
22                         st.Push(sp[i]);
23                     }
24                     else
25                     {
26                         while (st.Count != 0)
27                         {
28                             if (st.Peek().ToString() != "(")
29                             {
30 
31                                 res = calc(Convert.ToInt32(st1.Pop().ToString()), 
Convert.ToInt32(st1.Pop().ToString()), st.Pop().ToString());
32 st1.Push(res); 33 //j++; 34 } 35 else if (sp[i] != ")") 36 { 37 break; 38 } 39 else if (sp[i] == ")") 40 { 41 if (st.Peek().ToString() == "(") 42 { 43 st.Pop(); 44 break; 45 } 46 else 47 { 48 res = calc(Convert.ToInt32(st1.Pop().ToString()),
Convert.ToInt32(st1.Pop().ToString()), st.Pop().ToString());
49 st1.Push(res); 50 } 51 } 52 } 53 if (sp[i] != ")") 54 { 55 st.Push(sp[i]); 56 } 57 } 58 } 59 } 60 while (st.Count != 0) 61 { 62 res = calc(Convert.ToInt32(st1.Pop().ToString()), Convert.ToInt32(st1.Pop().ToString()), st.Pop().ToString()); 63 st1.Push(res); 64 //j++; 65 } 66 67 return res; 68 }

功能三的重点难点 :

1.重点,将题目输出到文件

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

2.难点,判断题目数量是否为正整数

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

运行截图:

功能一,功能二运行截图:

功能三运行截图:

 

编程收获: 

1,有了另一个人在一边监督,指导,让枯燥的编程更加的有了趣味性,质量也更好了,没有一个人编程那么多盲点。

2,学会了许多之前不会的问题,比如如何打印,如何不重复输出等等。

、结对编程的体会及 在编码、争论、复审等活动中花费时间较长,给我较大收获的五事件

1.开始我们对于用哪种语言也产生了分歧,最后选择了大家都熟悉的C#。

2.对于如何把题目打印出来,花了许多的心思,最后找到了成功实现的方法。

3.对输入f4 -c后输入test时总是出错花了许多的时间去调整如何让系统辩认出这不是正整数。

4.如何保证题目不重复。

5.两个人的编程代码风格有所不同,花了许多时间去适应对方。

结对体会:发现了两个人编程的优势,并且觉得团队协作比一个人工作要更有动力更有进展,两个人也在合作中增进了友谊并且取长补短。

三、给出照片1张

 

四、版本控制

 https://coding.net/u/lulululu88/p/f4/git

推荐阅读