20194602自动生成四则运算题第一版报告
1.需求分析
(1)自动生成10道100以内的2个操作数的四则运算算式(+ - * /),要求运算结果也在100以内
(2)剔除重复算式。 2 + 3 = 和 2 + 3 = 是重复算式 2 + 3 = 和 3 + 2 = 不属于重复算式
(3)题目数量可定制
(4)相关参数可控制
是否包含乘法和除法
操作数数值范围可控(如操作数 在100以内 还是1000以内)
操作数是否含负数
(5)生成的运算题存储到外部文件result.txt中
2. 功能设计
基本功能:满足功能需求;
3. 设计实现
我设计了两个函数,主函数接收用户提出的出题要求,函数根据提出要求输出题目。
4. 测试运行 (动图)
5.代码
int PrintfTimu(int Tinumber, int resultT, int numberA, int numberB, int YN, int sign1) { int i = 0; srand((unsigned)time(NULL)); int sign[] = { 1, -1 };//符号控制数组; int sign2;//符号控制;数字一符号控制 int sign4;//符号控制;数字二符号控制 int sign3 = 0;//乘除符号控制; int a, b;//接收数字1,2; if (YN == 1) { sign3 = 4; } else { sign3 = 2; } if (sign1 == 1) { sign2 = 2; sign4 = 2; } else { sign2 = 1; sign4 = 1; } FILE *fpWrite = fopen("d:\\result.txt", "w"); if (fpWrite == NULL) { return 0; } while (i < Tinumber) { switch (rand() % sign3)//随机加减乘除代码段 { case 0: if (resultT < (a = sign[rand()%sign2]*(rand() % numberA + 1)) + (b = sign[rand() % sign4] * (rand() % numberB + 1))) { break; } else { if (b < 0) { printf("%d+(%d)= ", a, b); fprintf(fpWrite, "%d+(%d)= ", a, b); fprintf(fpWrite, "\n"); i++; printf("\n"); break; } printf("%d+%d= ", a, b); fprintf(fpWrite, "%d+%d= ", a, b); fprintf(fpWrite, "\n"); i++; printf("\n"); }; break; case 1: if (resultT < (a = sign[rand() % sign2] * (rand() % numberA + 1)) - (b = sign[rand() % sign4] * (rand() % numberB + 1))) { break; } else { if (b < 0) { printf("%d-(%d)= ", a, b); fprintf(fpWrite, "%d-(%d)= ", a, b); fprintf(fpWrite, "\n"); i++; printf("\n"); break; } printf("%d-%d= ", a, b); fprintf(fpWrite, "%d-%d= ", a, b); fprintf(fpWrite, "\n"); i++; printf("\n"); }; break; case 2: if (resultT < (a = sign[rand() % sign2] * (rand() % numberA + 1)) * (b = sign[rand() % sign4] * (rand() % numberB + 1))) { break; } else { if (b < 0) { printf("%d*(%d)= ", a, b); fprintf(fpWrite, "%d*(%d)= ", a, b); fprintf(fpWrite, "\n"); i++; printf("\n"); break; } printf("%d*%d= ", a, b); fprintf(fpWrite, "%d*%d= ", a, b); fprintf(fpWrite, "\n"); i++; printf("\n"); }; break; case 3: b = rand() % (numberB + 1); if (b == 0) { break; } if (resultT < (a = sign[rand() % sign2] * (rand() % numberA+1)) / (b = sign[rand() % sign4] * b)) { break; } else { if (b < 0) { printf("%d/(%d)= ", a, b); fprintf(fpWrite, "%d/(%d)= ", a, b); fprintf(fpWrite, "\n"); i++; printf("\n"); break; } printf("%d/%d= ", a, b); fprintf(fpWrite, "%d/%d= ", a, b); fprintf(fpWrite, "\n"); i++; printf("\n"); }; break; } } }
6. 总结
主函数完成参数控制,输出函数根据参数完成输出。
7:psp
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
Planning | 计划 | 15 | 25 |
.Estimate | · 估计这个任务需要多少时间,并规划大致工作步骤 | 15 | 13 |
Development | 开发 | 120 | 135 |
. Analysis | . 需求分析 (包括学习新技术) | 5 | 10 |
.Design Spec | · 生成设计文档 | 8 | 12 |
.Design Review | . 设计复审 (和同事审核设计文档) | 12 | 10 |
Coding Standard | . 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
. Design | . 具体设计 | 25 | 25 |
. Coding | . 具体编码 | 40 | 48 |
. Code Review | . 代码复审 | 10 | 22 |
Test | . 测试(自我测试,修改代码,提交修改) | 10 | 22 |
Reporting | 报告 | 12 | 20 |
·Test Report | . 测试报告 | 4 | 6 |
.Size Measurement | . 计算工作量 | 3 | 10 |
.Postmortem & Process Improvement Plan | . 事后总结 ,并提出过程改进计划 | 5 | 8 |