任务要求:使用C或Java语言完成一个自动生成四则运算试题的程序。软件基本功能如下。
(1)自动生成10道100以内的2个操作数的四则运算算式(+ - * /),要求运算结果也在100以内
(2)剔除重复算式。 2 + 3 = 和 2 + 3 = 是重复算式 2 + 3 = 和 3 + 2 = 不属于重复算式
(3)题目数量可定制
(4)相关参数可控制
是否包含乘法和除法
操作数数值范围可控(如操作数 在100以内 还是1000以内)
操作数是否含负数
(5)生成的运算题存储到外部文件result.txt中
一. 需求分析
为应对小学生对于四则运算熟悉练习的掌握度,减轻出题员的负担,故设计一款程序能自动编写四则运算里的题目。
二. 功能设计
- 基本功能
- 能自动生成算数式
- 算数式符号随机生成
- 扩展功能
- 对生成的算数式能够自动计算并且给出算数答案
- 算数式可以控制是否存在负数
- 算数式可以控制是否存在乘除表达式
- 生成的最后结果会保存在result.txt文件中方便查看
- 算数式可以控制其操作范围
三. 设计实现
- C语言
- 引用<stdio.h>库
- 引用<time.h>库
- 引用<stdlib.h>库
- 计算负数时乘以2然后减去自身得出值
- fopen函数来储存输出值
四. 测试运行
测试运行结果在控制台里面与在文本输出里面的表现
五. 代码片段
rand()用来生成随机值,使用它来获取n的值,就可以对下面的op赋值并计算相对应的算式。
for(a=0;a<size;a++) { i=rand()%z+1; j=rand()%z+1; n=rand()%4; if(n==0){op='+'; q=i+j;} if(n==1){op='-'; q=i-j;} if(n==2){op='*'; q=i*j;} if(n==3){op='/'; q=i/j;} printf("%d%c%d=%d\n",i,op,j,q); fprintf(fp,"%d%c%d=%d\n",i,op,j,q); }
如果想生成负数那么就对其上限乘以2然后在减去自身就是想要的答案。
i=rand()%(2*z)-z+1; j=rand()%(2*z)-z+1; n=rand()%2; if(n==0){op='+'; q=i+j;} if(n==1){op='-'; q=i-j;}
六. 总结
自己写的if判断语句有点多,而且我写注释的习惯不好造成我自己有时候都看不明白自己写的东西,不过经过这一次的经验与训练,相信下一次我定能在原有基础上做到更好。
七. PSP
PSP | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
Planning | 计划 | 8 | 6 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 8 | 6 |
Development | 开发 | 66 | 64 |
Analysis | 需求分析 (包括学习新技术) | 6 | 10 |
Design | 具体设计 | 10 | 12 |
Coding | 具体编码 | 40 | 30 |
Test | 测试(自我测试,修改代码,提交修改) | 10 | 12 |
Reporting | 报告 | 3 | 3 |
Postmortem & Process Improvement Plan | 事后总结 ,并提出过程改进计划 | 3 | 3 |