一、需求分析
通过此代码自动生成四则运算,给运算带来方便,节省老师和家长的出题时间。
二、功能设计
(1)自动生成10道100以内的2个操作数的四则运算算式(+ - * /),要求运算结果也在100以内
(2)剔除重复算式。 2 + 3 = 和 2 + 3 = 是重复算式 2 + 3 = 和 3 + 2 = 不属于重复算式
(3)题目数量可定制
(4)相关参数可控制
是否包含乘法和除法
操作数数值范围可控(如操作数 在100以内 还是1000以内)
操作数是否含负数
(5)生成的运算题存储到外部文件result.txt中
三、设计实现
生成几个随机数,但需要设置一些判断条件,来满足用户出题要求,写一个出题函数,根据用户要求改变其中的变量,循环调用这个函数出题。
四、测试运行
五、代码片段
#include<iostream.h> #include<time.h> #include<stdlib.h> #include<math.h> int main() { int num1,num2,num0,c; int limit[8]; double num3,num4; srand((int)time(0)); // 不同的时间,产生不同的随机数,但不保证缩小范围后是不是一样的数,是缺陷 cout<<"输入题目的数量:"; cin>>num0; cout<<endl; cout<<"输入打印中每行的间隔:"; cin>>limit[0]; cout<<endl; cout<<"输入打印中每行的题目数:"; cin>>limit[1]; //每次都输入太麻烦了,这个设置一般是一样的,可否改为设置一次即可 cout<<endl; cout<<"输入操作数的数值范围的最小值和最大值:"; cin>>limit[2]>>limit[3]; cout<<endl; cout<<"是否有乘除法,有输入1,没有输入0:"; cin>>limit[4]; cout<<endl; cout<<"加减有无负数,有输入1,没有输入0:"; cin>>limit[5]; cout<<endl; if(limit[4]==1) { cout<<"除法有无余数,有输入1,没有输入0:"; cin>>limit[6]; cout<<endl; } if(limit[4]==0) { cout<<"是否支持小数,有输入1,没有输入0:"; cin>>limit[7]; cout<<endl; if(limit[7]==1) { cout<<"若支持小数,精确到多少位:"; cin>>limit[8]; cout<<endl; } } for(int i=0;i<num0;i++) //输出题目的循环 { num1=limit[2]+(int)(limit[3]*rand()/(RAND_MAX+1.0)); num2=limit[2]+(int)(limit[3]*rand()/(RAND_MAX+1.0)); c=1+(int)(4*rand()/(RAND_MAX+1.0)); if(limit[4]==1) { if(c%4==0) { if(limit[6]==1) { if(num1%num2==0) cout<<"第"<<i+1<<"道:"<<num1<<"/"<<num2<<"="<<" "; else { while(num1%num2!=0) { num2=num2-num1%num2; } cout<<"第"<<i+1<<"道:"<<num1<<"/"<<num2<<"="<<" "; } } } //输出有无余数的除法 if(c%4==1) cout<<"第"<<i+1<<"道:"<<num1<<"+"<<num2<<"="<<" "; if(c%4==2) cout<<"第"<<i+1<<"道:"<<num1<<"-"<<num2<<"="<<" "; if(c%4==3) cout<<"第"<<i+1<<"道:"<<num1<<"*"<<num2<<"="<<" "; } //输出有乘除法的题目 else { if(limit[7]==1) { num3=pow(0.1,limit[8])+(int)(0.1*rand()/(RAND_MAX+1.0))+num1; num4=pow(0.1,limit[8])+(int)(0.1*rand()/(RAND_MAX+1.0))+num2; } if(limit[5]==1) { if(c%2==0) cout<<"第"<<i+1<<"道:"<<pow(-1,i)*num3<<"-"<<pow(-1,i+1)*num4<<"="<<" "; if(c%2==1) cout<<"第"<<i+1<<"道:"<<pow(-1,i)*num3<<"+"<<pow(-1,i+1)*num4<<"="<<" "; } else { if(c%2==0) cout<<"第"<<i+1<<"道:"<<num3<<"-"<<num4<<"="<<" "; if(c%2==1) cout<<"第"<<i+1<<"道:"<<num3<<"+"<<num4<<"="<<" "; } //输出有无负数的加减 } if((i%limit[1])+1==limit[1]) //每行打印的题目数 for(int k=0;k<=limit[0];k++) cout<<endl; //每行打印的间隔 } return 0; }
六、实验总结
经过漫长的努力,终于完成了大部分要求,我基础不大好,这次真的是费了很大劲。
七、PSP
PSP2.1 | 任务内容 |
计划共完成需要的 时间(min) |
实际完成需要的 时间(min) |
Planning | 计划 | 60 | 50 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 60 | 50 |
Development | 开发 | 80 | 100 |
Analysis | 需求分析 (包括学习新技术) | 8 | 10 |
Design Spec | 生成设计文档 | 6 | 8 |
Design Review | 设计复审 (和同事审核设计文档) | 5 | 6 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 3 | 3 |
Design | 具体设计 | 10 | 15 |
Coding | 具体编码 | 35 | 45 |
Code Review | 代码复审 | 5 | 6 |
Test | 测试(自我测试,修改代码,提交修改) | 3 | 5 |
Reporting | 报告 | 10 | 11 |
Test Report | 测试报告 | 2 | 5 |
Size Measurement | 计算工作量 | 5 | 6 |
Postmortem & Process Improvement Plan | 事后总结 ,并提出过程改进计划 | 5 | 3 |
原文:https://www.cnblogs.com/scgg/p/11528626.html