20194651—自动生成四则运算题第一版报告chris
1.需求分析:
(1)自动生成四则运算算式(+ - * /),或两则运算(+ -)。
(2)剔除重复算式。
(3)题目数量可定制。
(4)相关参数可控制。
(5)生成的运算题存储到外部文件中。
2.功能设计:
- 基本功能:随机生成算式,可控制题目数量及相关参数。筛选重复的算式并剔除。
- 拓展功能:当操作数生成负数是会产生小括号。
3.设计实现:
共设计了4个函数:Ctrl_2or4:用来控制四则运算还是2则运算。
Rand_Get:生成随机数,是否包含负数可控。
Data_Filtering:数据过滤,剔除重复算式。
My_print:控制输出。
4.测试运行:
1.生成四则运算,包含负数,操作数100以内,10道题:
2.生成两则运算,不包含负数,操作数50以内,15道题:
3.生成四则运算,包含负数,操作数范围1000以内,7道题:
5.代码片段:
- 生成随机数,控制操作数是否带负数:
1 void Rand_Get(int c , int Maxl) 2 { 3 if( c == 1) 4 { 5 Num_a = rand()%(2*Maxl+1)-Maxl; 6 Num_b = rand()%(2*Maxl+1)-Maxl; 7 } 8 else if( c == 2) 9 { 10 Num_a = rand()%Maxl; 11 Num_b = rand()%Maxl; 12 } 13 else 14 { 15 printf("输入有误!"); 16 } 17 }
- 数据筛选,剔除重复算式:
1 int Data_Filtering(int flag ) 2 { 3 int j,f3_flag,equ[Maxsize][3]; 4 5 f3_flag = 1; 6 equ[i][0]=Num_a; 7 equ[i][1]=flag; 8 equ[i][2]=Num_b; 9 for(j=i-1;j>=0;j--) 10 { 11 if(equ[i][0] == equ[j][0]) 12 { 13 if(equ[i][1] == equ[j][1]) 14 { 15 if(equ[i][2] == equ[j][2]) 16 { 17 i--; 18 f3_flag = 0; 19 } 20 } 21 } 22 } 23 i++; 24 return f3_flag ; 25 }
- 控制是两则运算(+ -)还是四则运算(+ - * /):
1 int Ctrl_2or4(int b) 2 { 3 4 int f2_c; 5 if(b == 2) 6 { 7 f2_c = rand()%2; 8 } 9 else if(b == 4) 10 { 11 f2_c = rand()%4; 12 } 13 else 14 { 15 printf("输入有误!"); 16 } 17 return f2_c; 18 }
6.总结(如何实现程序“模块化”原则):
利用函数,分层次分模块进行代码编写,将每个功能用函数描述出来,而不是全部都写在主函数里。
7.PSP:
PSP2.1 |
任务内容 |
计划共完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
15 |
20 |
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
15 |
20 |
Development |
开发 |
410 |
520 |
·· Analysis |
需求分析 (包括学习新技术) |
10 |
20 |
· Design Spec |
· 生成设计文档 |
0 |
0 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
0 |
0 |
· Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
5 |
5 |
· Design |
具体设计 |
15 |
20 |
· Coding |
具体编码 |
360 |
450 |
· Code Review |
· 代码复审 |
10 |
10 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
10 |
15 |
Reporting |
报告 |
30 |
45 |
·· Test Report |
· 测试报告 |
20 |
25 |
· Size Measurement |
计算工作量 |
0 |
0 |
· Postmortem & Process Improvement Plan |
· 事后总结 ,并提出过程改进计划 |
10 |
20 |