20194580宝乐第二次作业自动生成四则运算作业
一、需求分析
随机四则运算生成小程序是一款非常实用的、给家里小孩出题的软件,设计这个小程序的初衷就是让家里小孩少看一点电视,就设计该软件让孩子做题,并且减少家长出题人力,软件可以生成100以内的加、减、乘、除,可以按需求添加乘除法,操作简单,用户界面简单,采用的是科学的随机性出题,很适合家长们给小孩出题使用。
二、功能设计
(1)自动生成10道100以内的2个操作数的四则运算算式(+ - * /),要求运算结果也在100以内
(2)剔除重复算式。 2 + 3 = 和 2 + 3 = 是重复算式 2 + 3 = 和 3 + 2 = 不属于重复算式
(3)题目数量可定制
(4)相关参数可控制
是否包含乘法和除法
操作数数值范围可控(如操作数 在100以内 还是1000以内)
操作数是否含负数
(5)生成的运算题存储到外部文件result.txt中
三、设计实现
这个小程序程序我用使用C语言来实现,其中包括while(),for()循环和switch() if else等语句实现包含加减,含正负,两个操作数的,选择乘除,操作数范围和题目数量并去掉重复的功能。数字的随机性利用的是rand()函数。
四、测试运行
1、(1)自动生成10道100以内的2个操作数的四则运算算式(+ - * /),要求运算结果也在100以内。
(2)剔除重复算式。 2 + 3 = 和 2 + 3 = 是重复算式 2 + 3 = 和 3 + 2 = 不属于重复算式
(3)题目数量可定制
(4)相关参数可控制
是否包含乘法和除法
操作数数值范围可控(如操作数 在100以内 还是1000以内)
操作数是否含负数
2、(1)生成的运算题存储到外部文件result.txt中
五、代码片段
(1)自动生成10道100以内的2个操作数的四则运算算式(+ - * /)。
t=rand()%al;//随机计算 if(t==0)//加法 { result=suiji_1+suiji_2; s='+'; } else if(t==1)//减法 { result=suiji_1-suiji_2; s='-'; } else if(t==2)//乘法 { result=suiji_1*suiji_2; s='*'; } else if(t==3)//除法 { result=suiji_1/suiji_2; s='/'; }
(2)运算结果也在100以内
if(result>100||result<-100)//判断结果是否在100范围内 { i--; continue; }
(3) 剔除重复算式。
for(a=i;a>0;a--) { if((cf_1[i]==cf_1[a-1])&&(low[i]==low[a-1])&&(cf_2[i]==cf_2[a-1])) { t=1; } } if(t==1)//判断结果为重复,删除此题 { i--; continue; }
(4)题目数量可定制
while(1) { printf("请输入题目的数量(范围在10~100以内):\n"); scanf("%d",&shuzi_1); if(shuzi_1>100||shuzi_1<10) printf("\n输入错误,重新输入\n\n"); else break; }
(5)是否包含乘法和除法
while(1) { printf("题目是否需要乘除法(1:是 0:否):\n"); scanf("%d",&shuzi_2); if(shuzi_2!=1&&shuzi_2!=0) printf("\n输入错误,请重新输入\n\n"); else break; }
(6)操作数是否含负数
while(1) { printf("该题目是否需要负数计算(1:是 0:否):\n"); scanf("%d",&shuzi_4); if(shuzi_4!=1&&shuzi_4!=0) printf("\n输入错误,请重新输入\n\n"); else break; } srand(time(0)); for(int i=0;i<shuzi_1;i++){ if(shuzi_4==0){ suiji_1=rand()%shuzi_3+1;//正数随机操作数1 suiji_2=rand()%shuzi_3+1;//正数随机操作数2 } else if(shuzi_4==1){ suiji_1=rand()%(2*shuzi_3+1)-shuzi_3;//负数随机操作数1 suiji_2=rand()%(2*shuzi_3+1)-shuzi_3;//负数随机操作数2 }
(7)生成的运算题存储到外部文件result.txt中
1 FILE*fp; 2 fp=fopen("E:\\result.txt","w+");//创建文件;
六、总结
最重要的是学习到了随机数是由一个rand()函数决定的。然后利用C语言的各种语句,把每个框架都写出来,然后进行调试,这样做程序还是比较高效的。
模块化的实现,首先把随机生成10个算数写出来,运算范围在0~100,然后在添加生成题目数。最后添加剔除重复和是否包含负数。
七、PSP
PSP2.1 |
任务内容 |
计划共完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
10 |
6 |
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
10 |
7 |
Development |
开发 |
120 |
93 |
·· Analysis |
需求分析 (包括学习新技术) |
10 |
6 |
· Design Spec |
· 生成设计文档 |
10 |
6 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
10 |
6 |
· Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
10 |
5 |
· Design |
具体设计 |
20 |
17 |
· Coding |
具体编码 |
40 |
33 |
· Code Review |
· 代码复审 |
10 |
8 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
10 |
12 |
Reporting |
报告 |
15 |
7 |
·· Test Report |
· 测试报告 |
5 |
2 |
· Size Measurement |
计算工作量 |
5 |
2 |
· Postmortem & Process Improvement Plan |
· 事后总结 ,并提出过程改进计划 |
5 |
3 |