20194711 自动生成四则运算题第一版报告
1.需求分析:
为父母老师节省时间,设计出一个可以简单高效的制作出符合各种需求的随机的生成四则运算的程序。
2. 功能设计:
(2-1)基本功能:自动生成10道100以内的2个操作数的四则运算算式(+ - * /)
(2-2)扩展功能:
(1)要求运算结果也在100以内
(2)剔除重复算式。 2 + 3 = 和 2 + 3 = 是重复算式 2 + 3 = 和 3 + 2 = 不属于重复算式
(3)题目数量可定制
(4)相关参数可控制
(4-1)是否包含乘法和除法
(4-2)操作数数值范围可控(如操作数 在100以内 还是1000以内)
(4-3)操作数是否含负数
(5)生成的运算题存储到外部文件result.txt中
(6)可以选择是否生成答案。
3. 设计实现:
用fanwei()函数来确定操作数的取值范围是100以内还是1000以内
用chengchu()函数来确定用户是否需要乘除运算
用fuhao()函数来确定用户是否允许操作数中包含负数
用main()函数来调用其他函数,并且通过分支语句完成其他功能,比如可控的题目数量和运算结果的范围,是否生成答案等等。
4. 测试运行:
5.程序代码片段
(5-1)主函数中的用户控制条件:
int m,n,s,r1,r11,r2,r3; printf("请输入题目数量\n") ; //控制题目的数量 scanf("%d",&n); printf("请输入数值范围,100以内按1,1000以内按2\n") ; //控制操作数取值范围 scanf("%d",&s); r1=fanwei(s); r11=fanwei(s) +100; //负数取值是-100到100 printf("请输入是否包含乘除法,包含请按1,不包含请按2\n") ; //控制是否含有乘除法 scanf("%d",&s); r2=chengchu(s); printf("请输入是否包含负数,包含请按1,不包含请按2\n") ; //控制是否包含负数 scanf("%d",&s); r3=fuhao(s); printf("请输入是否同时出现答案,出现请按1,不出现请按2\n") ; //控制是否同时出现答案 scanf("%d",&s);
(5-2)控制取值范围的函数(其他的函数也都相似):
int fanwei(int choose){ int s; s=choose; if(s==1) return 100; else return 1000; }
(5-3)该程序中的具体功能的实现
for(m=0;m<n;m++){ int i,j,k,sum; if(r3==2){ i=rand()%r1; j=rand()%r1; k=rand()%r2; } //没有负数的操作数的取值 else { i=rand()%r11-100; j=rand()%r11-100; k=rand()%r2; } //有负数的操作数的取值 if(k==0){ sum=i+j; if(sum>100) {m--;continue;} //控制运算结果在100以内 fprintf(fp,"%d+%d= ",i,j); //存入外部文件result.txt里 } else if(k==1){ sum=i-j; if(sum>100) {m--;continue;} //控制运算结果在100以内 fprintf(fp,"%d-%d= ",i,j); //存入外部文件result.txt里 } else if(k==2){ sum=i*j; if(sum>100) {m--;continue;} //控制运算结果在100以内 fprintf(fp,"%d*%d= ",i,j); //存入外部文件result.txt里 } else{ sum=i/j; if(sum>100&&j==0) {m--;continue;} //控制运算结果在100以内 fprintf(fp,"%d÷%d= ",i,j); //存入外部文件result.txt里 } }
6. 总结报告:
将需要实现的取值范围的控制,正负号的选择,是否带有乘除法等功能分别用不同的函数实现,再在主函数中根据用户的需求,调用相应的功能。
总计110行代码,完成了:
- 自动生成10道100以内的2个操作数的四则运算算式(+ - * /)
- 要求运算结果也在100以内
- 剔除重复算式。 2 + 3 = 和 2 + 3 = 是重复算式 2 + 3 = 和 3 + 2 = 不属于重复算式
- 题目数量可定制
- 相关参数可控制
- 是否包含乘法和除法
- 操作数数值范围可控(如操作数 在100以内 还是1000以内)
- 操作数是否含负数
- 生成的运算题存储到外部文件result.txt中
- 可以选择是否生成答案。(扩展)
等功能,但是有一个小问题,因为我是利用结果sum是否小于100来确定是否选用该算式的,但是在符号出现的同等概率下,操作数小于100的情况下,两个操作数的乘积的结果小于100的概率远远小于其他运算,所以出现乘法运算的概率极小。这是我设计这个程序的一个问题,就是保证了随机的情况下,还没办法完完全全的保证加减乘除出现的概率相等。(还在考虑怎么设计更合理,考虑好了再更新)。
7. PSP:
PSP各个阶段 | 预估时间(分钟) | 实际记录(分钟) |
计划: |
10 | 10 |
开发: (八个子项目) |
120 | 130 |
|
10 | 15 |
|
10 | 10 |
|
10 | 5 |
|
10 | 10 |
|
10 | 20 |
|
30 | 20 |
|
10 | 10 |
|
20 | 40 |
报告: |
40 | 80 |
|
10 | 10 |
|
10 | 10 |
|
20 | 60 |