源码地址:https://git.coding.net/xucan0110/first.git
1.需求分析:
现代社会不仅提笔忘字现象严重,人们也更加依赖于计算器,这个程序不仅可以满足小学生学习的检测,亦可作为成年人提升自己计算能力的练习工具
2.功能分析:
我将本次作业分析为两大部分:a.基本的四则运算及正误判断(包括整数与真分数两部分,分别涉及“加减乘除”);
b.题目的生成(包括数的随机调用与运算符号的随机调用,以及两者间的随机组合);
3.设计实现:用C++语言实现
先将四则运算分为整数与分数两部分,整数不用说。分数则是采用辗转相除法求最大公约数的方法先判断是否为真分数,然后再用最小公倍数法求出结果。
题目的生成则随机调用0到9自由组成分数或整数,再与任一运算符号结合即可。
4.代码说明:
a.随机选取运算符号的实现
char Operator()
{
char op;
srand(time(0));
int i=rand()%4+1;
switch(i)
{
case 1: return '+';
case 2: return '-';
case 3: return '*';
case 4: return '/';
}
}
b.整数的运算(以加法为例)
void integer()
{
int g;
int x,y;
char op;
srand(time(0));
x=rand()%100+1;//取随机数
y=rand()%100+1;//取随机数
op=Operator();
cout<<x<<op<<y<<"="<<endl;
cout<<"请输入运算结果:";
if(op=='+')
{
cin>>g;
if(g==x+y)
{
cout<<"恭喜你答对了!"<<endl<<endl;
correct++;//累计计算正确的题目数
}
else
{
cout<<"很遗憾你答错了,正确答案是:"<<x+y<<endl<<endl;
mistake++;//累计计算错误题目个数
}
}
else
c.辗转相除法实现求最大公约数
int maxNumber(int k, int l)
{
while(k%l!=0){
int t=k%l;
k=l;
l=t;
}
return l;
}
d.真分数的运算(以除法为例)
if(op=='/')
{
element=b*c;//分子的计算
denominator=a*d;//分母的计算
maxNum=maxNumber(element,denominator);
element=element/maxNum;
denominator=denominator/maxNum;
if(denominator!=1)//分母不为一的情况
{
sprintf_s(answer, "%d/%d",element ,denominator);
if (strcmp(answer, result) == 0)
{
cout<<"恭喜你答对了!"<<endl<<endl;
correct++;
}
else
{
cout<<"很遗憾你答错了,正确答案是:"<<answer<<endl<<endl;
mistake++;
}
}
else//分母为一的情况
{
sprintf_s(answer, "%d",element);
if (strcmp(answer, result) == 0)
{
cout<<"恭喜你答对了!"<<endl<<endl;
correct++;
}
else
{
cout<<"很遗憾你答错了,正确答案是:"<<answer<<endl<<endl;
mistake++;
}
5.测试运行

6.展示psp
| PSP2.1 |
Personal Software Process Stages |
Time (m) Senior Student |
Time (m) |
| Planning |
计划 |
10 |
20 |
| · Estimate |
估计这个任务需要多少时间 |
288 |
367 |
| Development |
开发 |
90 |
120 |
| · Analysis |
需求分析 (包括学习新技术) |
10 |
20 |
| · Design Spec |
生成设计文档 |
5 |
5 |
| · Design Review |
设计复审 |
5 |
6 |
| · Coding Standard |
代码规范 |
3 |
2 |
| · Design |
具体设计 |
10 |
15 |
| · Coding |
具体编码 |
20 |
30 |
| · Code Review |
代码复审 |
10 |
30 |
| · Test |
测试(自我测试,修改代码,提交修改) |
20 |
100 |
| Reporting |
报告 |
10 |
30 |
| · |
测试报告 |
5 |
2 |
| · |
计算工作量 |
5 |
2 |
| · |
并提出过程改进计划 |
5 |
5 |
7.小结
本次作业看上去并不十分困难,在计划中也以为不会花费很多时间,但事实证明,看上去简单的东西并不意味实施起来容易。
拿到作业的最初就有了一个大概的思路,但是当我真正顺着这个思路往细节思考的时候,发现需要解决的问题还很多。在代码测试的阶段花费了很多时间,因为
出现了很多错误,有些是因为自己的失误,有些是因为编译器的问题,最后是百度加上同学的帮助才解决的大部分问题。
发现自己在代码编还差得很远,以后应多加强练习,加强编码速度,提高编码正确率。