首页 > 其他 > 详细

20180925-6 四则运算试题生成

时间:2018-10-08 00:21:05      阅读:194      评论:0      收藏:0      [点我收藏+]

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



四则运算试题生成:

功能1. 四则运算:支持出题4个数的四则运算题目

功能2. 支持括号

功能3. 限定题目数量,打印输出,避免重复

功能4. 支持分数出题和运算(女神的青睐放弃之。。)



要求一:(1) 给出每个功能的重点、难点、编程收获。(2)给出结对编程的体会。 (3) 至少5项在编码、争论、复审等活动中花费时间较长,给你较大收获的事件。

(一)对每个功能进行分析

1. 功能一:

  • 重点:实现随机生成四则运算试题,并计算出正确答案。我们对此进行分析,要解决这个问题大致分成几个步骤:随机生成数字和运算符组合成中缀表达式,为计算正确值将中缀表达式转换成后缀表达式(根据题目中的提示决定使用),对后缀表达式进行计算得到正确答案。
  • 难点:为了实现生成随机试题并判断正误的功能,我们认为难点在于中缀表达式到后缀表达式的转换,借助两个栈和四则运算符号之间的优先级实现。
  • 重要代码部分展示:
 1 for (i = 0; i < strlen - 1; i++)
 2             {
 3                 switch (strOld[i])
 4                 {
 5                     case +:
 6                     case -:
 7                     case *:
 8                     case /:
 9                         //判断优先级,进行压栈出栈操作
10                         while (this.priority(ope.Peek()) >= this.priority(strOld[i]))
11                         {
12                             num.Push(ope.Peek());
13                             strNew += " ";
14                             strNew += ope.Peek();
15                             ope.Pop();
16                         }
17                         ope.Push(strOld[i]);
18                         flag = 1;
19                         break;
20                     case (:
21                         ope.Push(strOld[i]);
22                         break;
23                     case ):
24                         while (ope.Peek() != ()
25                         {
26                             num.Push(ope.Peek());
27                             strNew += " ";
28                             strNew += ope.Peek();
29                             ope.Pop();
30                         }
31                         ope.Pop();
32                         break;
33                     default:
34                         num.Push(strOld[i]);
35                         if ((flag == 1) && (i != 0))
36                         {
37                             strNew += " ";
38                             flag = 0;
39                         }
40                         strNew += strOld[i];
41                         break;
42                 }
43             }

 

2. 功能二:

  • 重点:功能二要求生成加入括号的随机试题,并能计算正确的值。重点除了在计算逆波兰式时添加更高级别的括号,还在于如何在生成的试题中添加括号。
  • 难点:难点在于如何在生成的试题字符串中随机添加括号。最后我们采用了枚举的方法,将能够随机生成带有括号的形式列举出来,随机选择一个。

3. 功能三:

  • 重点:根据输入的指令,对试题进行批量生成。这里面需要注意的地方是对输入指令的格式正确性进行判断。
  • 实现后进行了简单的检验:

技术分享图片

  • 部分代码展示:
 1 if (args.Length != 2)
 2             {
 3                 Console.WriteLine("输入指令有误!");
 4             }
 5             else
 6             {
 7                 if (args[0] != "-c")
 8                 {
 9                     Console.WriteLine("输入指令有误!");
10                 }
11                 else if(!int.TryParse(args[1],out tmp))
12                 {
13                     Console.WriteLine("题目数量必须是 正整数。");
14                 }
15                 else if (Convert.ToDecimal(args[1]) <= 0 || args[1].Contains("."))
16                 {
17                     Console.WriteLine("题目数量必须是 正整数。");
18                 }
19                 else
20                 {
21                     sum = Convert.ToInt32(args[1]);
22                     function3(sum);
23                 }
24             }

 

(二)结对编程的体会

这次作业是与小伙伴一起完成的,因为上一次作业没有提前计划好写作业时候很痛苦,这次我们更多注意在事前的讨论和计划上。两个人一起完成,可以有更多讨论和互补,就觉得没有上一次的焦头烂额,完成作业的过程相对顺利和愉快。体会就是,很多人一起完成一项任务,比自己一个人孤军奋战能更快解决问题。

(三)花费时间较长的事件

(1)学习如何进行单元测试,以及编写测试用例:

(2)分析功能实现的过程:

(3)逆波兰式的转化出现错误,找错花费了一些时间:

(4)讨论如何添加括号:

(5)实现功能三批量生成试题写入文件的方法:

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

工作地点:星华公寓 b116

使用乔静玉同学的电脑进行编程

照片:

 技术分享图片

 

 

要求三:使用coding.net做版本控制。

代码地址:https://git.coding.net/qiaojingyu/f4.git

20180925-6 四则运算试题生成

原文:https://www.cnblogs.com/wuyiyao694/p/9750987.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!