结对作业---四则运算(Core 第四组)

Posted neversettle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结对作业---四则运算(Core 第四组)相关的知识,希望对你有一定的参考价值。

----by core 第四组 ( 邹卫其 范力 )

一.项目介绍

1. 能自动生成小学四则运算题目并给出答案,生成题目时可以选择下列参数:

  1)生成题目数量

  2)每道题目中运算数数量

  3)运算数数值范围

  4)运算符种类(  +  -  *  /  ^  )

  5)运算数类型(整数,小数,分数)

  6)运算数精度(保留到小数点后几位)

2. 将四则运算的计算功能包装在一个模块中( Class或DLL)

3. 将Core模块通过一定的API 接口( Application Programming Interface ) 来和其他组的模块( UI )交流

4. UI组测试所有 Core 组 DLL 后,Core 组需根据 UI 组的测试结果进行反馈优化

5. 项目管理和撰写博客

二.功能分析

1. 创建类Core的一个对象 cal ,根据 UI 传进来的数据配置对象 cal 的相关参数 ,将生成的题目和答案以string串的形式传递给 UI

2. 生成算数表达式时我们采用了二叉树的结构。算术表达式树的树枝天然是运算符,树叶是操作数,先随机的生成一颗运算符树,再将树叶补全即可。

3. 在用户选择乘方时我们将 ‘^‘ 运算符沉到运算符树底,保证算术表达式不会过于复杂

4. 重载 Core 类的成员函数,实现加,减,乘,除,乘方运算

5. 在运算的过程中要保证任何中间步骤都不会出现负数,有意思的是,在所有的运算符中只有减号会使表达式非法,此时左子树的值大于右子树,但只要交换减号的左右子树即可

6. 计算算数表达式的值并返回 string串

 三.代码实现

 1. 定义 Core 类

技术分享图片
 1 class Core
 2 {
 3 private:
 4     int que_num = 100;  //题目数量
 5     int data_num = 10;  //操作数数量
 6     int range = 5;      //计算的数值范围 
 7     int opr_type = 3;   //操作符种类  0.加减  1.加减乘  2.加减乘除  3.加减乘除乘方 
 8     int data_type = 1;  //0整数  1小数  2分数
 9     int accuracy = 2;
10     string* que = new string[que_num + 1];
11     string* ans = new string[que_num + 1];
12 public:
13     void set_que_num(int a) { que_num = a; }
14     void set_data_num(int a) { data_num = a; }
15     void set_range(int a) { range = a; }
16     void set_opr_type(int a) { opr_type = a; }
17     void set_data_type(int a) { data_type = a; }
18     void set_accuracy(int a) { accuracy = a; }
19     int get_que_num() { return que_num; }
20     int get_data_num() { return data_num; }
21     int get_range() { return range; }
22     int get_opr_type() { return opr_type; }
23     int get_data_type() { return data_type; }
24     int get_accuracy() { return accuracy; }
25     string *getQue();
26     string *getAns();
27 private:
28     string expstring(Node *root);
29     Node *creatOptree();
30     Node calc(Node *root);
31     void previsite(Node *head);    
32     char operat();
33     char int_operat();
34     int get_factor(int a);
35 };
View Code

2. 设置类的参数并调用示例

技术分享图片
 1 int main()
 2 {
 3     Core cal;
 4     string *q, *a;
 5 
 6     cal.set_data_num(10);
 7     cal.set_que_num(100);
 8     cal.set_range(10);
 9     cal.set_opr_type(3);
10     cal.set_data_type(1);
11     cal.set_accuracy(3);
12 
13     q = cal.getQue();
14     a = cal.getAns();
15     for (int i = 1; i <= cal.get_que_num(); i++)
16     {
17         cout << q[i] <<  " = " << a[i] << endl << endl;
18     }
19 
20     system("pause");
21     return 0;
22 }
View Code

 四.测试

以下测试样例约定生成20道题目,每题10个运算数,数值范围0~10,在加,减,乘,除,乘方模式

1. 整数

技术分享图片
 1 ( 3 - 8 / 4 ) * ( 10 + 1 ^ 3 ) + 4 ^ 4 - ( 2 + 4 )
 2  = 261
 3 5 / 1 + 1 - 5 + 9 * 10 - ( 10 + 5 - 4 * 2 )
 4  = 84
 5 ( 6 - 4 + 8 ) * ( 10 - ( 5 ^ 1 - 2 ) ) + 5 + 9 + 3
 6  = 87
 7 5 * ( 10 * 7 - 7 ) - 2 / 1 + 9 + 4 ^ 4 + 4
 8  = 582
 9 9 * 3 ^ 2 + 4 * 3 + 7 * ( 9 + ( 10 - 7 ) * 2 )
10  = 198
11 6 * ( 6 * 9 - 5 ) * 9 + ( 8 * 10 + 8 - 4 ) * 10
12  = 3486
13 ( 2 + 7 ) * ( 6 - 4 ) + ( 10 / 5 + 10 - 4 ) * 9 * 6
14  = 450
15 ( 3 + 4 * 4 ) * 4 + 1 ^ 1 * ( 7 / 1 + 1 / 1 )
16  = 84
17 10 - 7 / 1 - ( 9 - 8 ) + 4 ^ 5 * ( 8 - 3 / 1 )
18  = 5122
19 1 * 5 - 1 - 9 / 3 + 2 / 1 * 4 * 1 ^ 3
20  = 9
21 3 / 1 + 10 + 3 / 1 + 2 * 10 + 4 - ( 8 + 6 )
22  = 26
23 3 * 2 * ( 4 / 2 + 5 ) + 3 - ( 6 - 3 ) + 9 - 1
24  = 50
25 2 * ( 8 - 4 + 1 ) + 1 ^ 5 + 3 + 8 * 4 - 7
26  = 39
27 7 + 10 - 4 - 2 + ( 10 + 6 ) * ( 1 ^ 3 + 4 / 2 )
28  = 59
29 ( 1 + 9 - 7 / 1 ) * 9 * 10 + 7 * 6 * ( 6 - 2 )
30  = 438
31 2 * ( 7 - 2 ) - ( 5 - 9 / 3 ) + 1 * 5 * 3 * 3
32  = 53
33 9 + 4 + 2 / 1 * 4 / 2 + 2 * 9 - 9 / 3
34  = 32
35 ( 2 ^ 4 + 7 / 1 ) * ( 2 + 9 * 9 ) + 2 * ( 4 + 4 )
36  = 1925
37 ( 5 + 4 ^ 1 ) * 2 ^ 4 * 4 + 3 + 8 + 5 / 1
38  = 592
39 9 * 9 / 3 + ( 8 + 3 + 9 ) * ( 3 / 1 - 10 / 5 )
40  = 47
View Code

2. 小数(精度为3)

技术分享图片
 1 ( 1.05 - 1 ^ 3 ) / ( 1.75 * ( 6.1 - 3.2 ) ) + 3.4 + 3.1 + 6.15 + 8.9
 2  = 21.559
 3 ( 6.85 + 4.1 ) * 7.2 + 1.65 / ( 6 ^ 5 * 2.9 + 1.45 + 5.6 + 8.05 )
 4  = 78.840
 5 ( 9.55 / ( 7.95 - 7.4 ) - 0.65 ) / 7.3 + ( 0.1 + 1.8 ) / ( 9.8 - 3.4 / 6.7 )
 6  = 2.494
 7 1.2 / ( 6.15 + 5.15 - 9.75 - 0.45 ) + 2.9 / ( 9.9 / 9.9 ) * 1.1 / 1.9
 8  = 2.769
 9 ( 3.8 - 1.05 ) * 3.75 / 2 ^ 5 + ( 9.25 + 4.4 ) * 7.85 * 6 ^ 4
10  = 138870
11 ( 4.1 / ( 5.05 * 9.3 ) + 9.25 - 0.4 ) * 2 ^ 2 + 1.1 - ( 2.5 - 2.2 )
12  = 36.549
13 3.7 + 6 ^ 4 + 9.6 * 4 + ( 8.6 - 7.15 - 0.1 ) * ( 1.6 + 6.25 )
14  = 1348.7
15 4.7 + 8.55 + 3.2 - 2.55 + ( 4.35 - 0.5 ) * ( 5.75 + ( 4.1 + 4.35 ) / 2.15 )
16  = 51.168
17 ( 2 ^ 5 - 7.65 ) * 2 ^ 4 + 7.85 / 5.4 / ( 0.05 * 9.65 * 7 )
18  = 390.03
19 7.95 - 6.45 + 1 ^ 3 + 8.15 * 5.55 + ( 3.75 + 7.1 ) / ( 8.75 - 1.05 )
20  = 49.141
21 3 ^ 4 - 0.55 / 3.9 + 6.6 / 1 ^ 3 * ( 7 + 6.75 ) / 7.25
22  = 93.376
23 ( 2 ^ 4 - 0.05 ) / ( 3.15 - 0.2 ) + 8.55 - 8.2 + 1.6 * 8.75 + 5.65
24  = 25.406
25 3.6 / ( ( 8.45 - 1.15 ) / 8.5 + 1.4 * ( 7.15 - 3.15 ) ) + ( 1.05 + 4.4 ) * 9.4
26  = 51.787
27 ( 1.25 + 7.45 ) / ( 3 ^ 2 / 2 ^ 2 ) + 5 ^ 5 * 5 ^ 1
28  = 15628.9
29 5 ^ 5 - ( 4.45 + 2.65 + 2.15 ) + 0.1 * ( 8.45 - ( 9.6 - 7.25 ) * 0.4 )
30  = 3116.5
31 2 ^ 1 + 5.5 - ( 4.1 - 1.95 ) + ( 7.05 - 4.45 ) * 9.4 - ( 1.4 - 0 )
32  = 28.39
33 4 ^ 3 - 8.2 - ( 3.3 - 0.8 ) + 6.55 * 5.9 * 7.05 / ( 4.05 - 1.5 )
34  = 160.142
35 3.3 + 9.8 / 7.9 + 2.9 * 4.9 + 9.6 - ( 3.9 + 2.4 ) * 8.75 / 6.8
36  = 20.243
37 4.45 - ( 9.25 + 0.75 - ( 4.65 + 5 ) ) + ( 8.95 + 9.1 ) * 1.3 - 8.05 / 7.9
38  = 26.546
39 8.1 / 0.75 / 3 ^ 1 + ( 8.35 - 6.6 ) * 2 ^ 4 / 5 ^ 2
40  = 4.72
View Code

3.分数

技术分享图片
 1 ( 3|3 - 9|7 / 8|6 ) / ( 2|7 * ( 10|8 - 3|10 ) ) + 4|5 + 3|2 + 5|4 + 2|2
 2  = 1779|380
 3 2|7 * 9|4 / 1|10 + 5|4 * 7|5 + 7 / ( 1 ^ 4 + 9|9 + 10|3 )
 4  = 1063|112
 5 2 - 7|5 - ( 3|2 - 5|6 ) * 6|7 + ( 8|8 - 2|8 ) * 8|8 * ( 6|4 - 10|10 )
 6  = 113|280
 7 7 * ( 10|9 - 5|9 ) + ( 9|10 - 1|9 ) * 5|2 - ( 9|8 + 4|9 * 2|8 ) * 8|9
 8  = 1543|324
 9 9|4 / 9 * ( 9|10 - 8|10 ) / 9|7 / 1|9 + 3|3 - 3|9 / ( 9|8 - 1|10 )
10  = 4181|4920
11 ( 10|3 - 7|8 ) / ( 1|3 * 4 ) + 9|2 + 10|2 + ( 3|4 - 3|6 ) * ( 8|8 - 7|9 )
12  = 3283|288
13 ( 8|10 + 10|7 - ( 8|6 - 7|7 ) ) * ( 5|6 + 2|5 + 9|6 ) + 4|4 / 6|6 + 2|7
14  = 10184|1575
15 4|10 + 6 ^ 4 + 9|3 * 8|9 + 2|9 + 6|3 + 5|5 + 3|5 - 5|8
16  = 93763|72
17 3|3 + 8 - 5|7 - 2|6 - ( 3|4 - 4|6 ) + 4|6 * 1|2 * 1|5 / 4
18  = 276|35
19 1 ^ 1 * 8|7 * 9|4 + 5 ^ 3 / ( ( 8|6 + 9|10 ) / ( 3 * 4|3 ) )
20  = 106206|469
21 ( 4 - 9|9 ) / ( 9 * 4|10 + 8|6 ) + 4 ^ 3 - 1|2 * 1 ^ 2
22  = 2372|37
23 10|4 - 6|10 - ( 7|3 - 4|6 ) + ( 5|5 - 3|5 ) / ( ( 3|10 + 8|4 ) * ( 6|2 - 9|8 ) )
24  = 15|46
25 6|7 * ( 4 - 2|9 ) / ( 6|6 * 3|3 ) * 5|8 * 3|9 + 7|4 * ( 4 - 3|6 )
26  = 3427|504
27 2|5 + 10|4 + 10|8 - 3|9 + 6 ^ 1 + ( 8|2 - 4|4 * 5|3 ) * 5|4
28  = 191|15
29 1 ^ 5 + 2|4 + 3 ^ 1 * 8|9 + 3|4 + 7|3 * 3|10 / 6|10
30  = 73|12
31 1 ^ 5 + 10|4 - ( 3|9 - 1|9 ) + ( 10 - 7|9 ) / 9|2 * ( 1 + 8|9 )
32  = 10423|1458
33 5|6 * ( 4|6 + 7|3 ) * ( 4|7 / 5|10 - 3|9 ) + 7|6 / 2|7 * 6|3 / 7|6
34  = 379|42
35 5|4 / 5|4 * 7|4 * 2 ^ 1 + 9 * ( 6 / 5|2 + 4|7 - 3|10 )
36  = 964|35
37 9|10 + 2 + 10|6 - 8|9 / ( 2|9 * 4|10 + 2 ) + 6|6 / 10 * 8|5
38  = 30323|7050
39 4 / ( 5|9 - 1|9 ) / ( 5|6 + 4|2 ) + 4|8 + 10|9 + 7|4 - ( 6|9 + 10|7 )
40  = 19031|4284
View Code

4. 样例分析

可以看到,我们随机生成的表达式比较均匀,括号匹配无误,计算结果正确

五.DLL封装和对接

 

 

六.结对编程感悟

 

 

七.PSP表格

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上是关于结对作业---四则运算(Core 第四组)的主要内容,如果未能解决你的问题,请参考以下文章

软件工程第四次作业二—单元测试 —[结对刘成志]

四则运算-第四组-雷曜博

结对作业——四则运算 Part3. 对于结对编程的总结与思考

结对编程作业:四则运算

第四次作业四则运算

第五章多重线性回归分析第四组小组作业