题目描述
从《构建之法》第一章的 “程序” 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 “软件”,满足以下需求:
除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
运算符为 +,-,×,÷
并且要求能处理用户的输入,并判断对错,打分统计正确率。
要求能处理用户输入的真分数, 如 1/2, 5/12 等
使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目Myapp.exe -n 10
需求分析:
能够实现生成整数和分数的式子并实现计算;
能够控制生成式子的个数;
能够实现判断对错并计算正确率;
PSP2.1 | Personal Software Process Stages | Time (%) Senior Student(/hour) | Time (%)(/hour) |
· Planning | 计划 | 2 | 1.5 |
· Estimate | 估计这个任务需要多少时间 | 48 | 65 |
· Analysis | 需求分析 (包括学习新技术) | 6 | 10 |
· Coding Standard | 代码规范 | 0.5 | 0.5 |
· Design | 具体设计 | 1.5 | 3 |
· Coding | 具体编码 | 36 | 48 |
· Test | 测试(自我测试,修改代码,提交修改) | 1 | 1 |
Reporting | 报告 | 1 | 2 |
代码:
{
while(s2==0)
s2=random();
cout<<s1<<"/"<<s2<<"=";
if(s1%s2==0)
{cin>>s5;
if(s5==s1/s2)
{
cout<<"right!"<<endl;right++;
}
else
{
cout<<"wrong!"<<endl;wrong++;
}
}
else
{
cin>>s5;cout<<"/"<<endl;cin>>s6;
a=s1;
b=s2;
for(c=a;c>=1&&c<=a;c--)
{
d=a%c;
e=b%c;
if(d==0&&e==0)
{
f=a/c;
g=b/c;
}
}
if((f==s5)&&(g==s6))
{
cout<<"right!"<<endl;right++;
}
else
{
cout<<"wrong!"<<endl;wrong++;
}
break;
}
}...//这是整数相除的情况
{
cout<<"("<<s1<<"/"<<s2<<")"<<"/"<<"("<<s3<<"/"<<s4<<")"<<"=";
cin>>s5;cout<<"/"<<endl;cin>>s6;
a=s1*s4;
b=s2*s3;
if(a>b)
{
for(c=b;c>=1&&c<=b;c--)
{
d=a%c;
e=b%c;
if(d==0&&e==0)
{
f=a/c;
g=b/c;
}
}
}
else
{
for(c=a;c>=1&&c<=a;c--)
{
d=a%c;
e=b%c;
if(d==0&&e==0)
{
f=a/c;
g=b/c;
}
}
}
if((f==s5)&&(g==s6))
{
cout<<"right!"<<endl;right++;
}
else
{
cout<<"wrong!"<<endl;wrong++;
}
break;
}
}
}
}
}//这是分数相除的情况。因为涉及分数的算法会比较复杂所以选择分开进行。
总结:因为自己平时对代码的接触不多,再这样的时间限制下要我独立完成这样一个有难度的作业真的是太吃力了,刚开始的时候是毫无头绪,之后通过百度参考代码以及在同学的帮助下,对一些已完成的项目代码进行了理解,知道了他们的项目进行的思路和实现方法,也学习到了很多以前不知道的头文件和算法。然后参照着,自己动手打代码,选择了一种很笨的方式,但也是比较容易接受和理解的思路。