# 作业1：四则运算生成器

a.需求分析：

1.四则运算是小学数学计算教学中的难点内容，也是学生必须熟练掌握的内容之一。因而设计两个数的四则运算题库，能了解并提高学生对四则运算的掌握程度

2.小学四则运算以两个不超过100的整数，以及两个分数的四则运算为主。

b.功能设计：

1.基本功能

• 除了整数以外，还要支持真分数的四则运算，真分数的运算，例如：1/6 + 1/8 = 7/24
• 运算符为 +, −, ×, ÷
• 并且要求能处理用户的输入，并判断对错，打分统计正确率
• 要求能处理用户输入的真分数， 如 1/2, 5/12 等

2.部分代码说明：

求公约数:

int gcd(int x, int y)//求公约数
{
int temp;
while (x%y!=0)
{
temp = x%y;
x = y;
y = temp;
}
return y;
}

生成随机数：

up = 1 + rand() % 10;
down = 1 + rand() % 10;
up1 = 1 + rand() % 10;
down1 = 1 + rand() % 10;
left = 1 + rand() % 100;
right = 1 + rand() % 100;
type = 1 + rand() % 8;

整数加减乘除：
switch (type)
{
case 1:
cout << left;
cout << "+";
cout << right;
cout << "=?" << endl;
a[i] = left + right;
e[i] = 1;
break;//整数加法
case 2:
cout << left;
cout << "-";
cout << right;
cout << "=?" << endl;
a[i] = left - right;
e[i] = 2;
break;//整数减法
case 3:
cout << left;
cout << "*";
cout << right;
cout << "=?" << endl;
a[i] = left*right;
e[i] = 3;//整数乘法
break;
case 4:
cout << left;
cout << "÷";
cout << right;
cout << "=?" << endl;
result = left / right;
result = ((double)((int)((result + 0.005) * 100))) / 100;
a[i] = result;
e[i] = 4;
break;//整数除法

}

分数的生成及加法（减乘除同理）

int gn;

if (up < down)

{

printf("%g/%g", up, down);

cout << "+";

if (up1 < down1)

{

printf("%g/%g=?\n", up1, down1);

result1 = up*down1 + up1*down;

result2 = down1*down;

gn = gcd(result1, result2);

result1 = result1 / gn;

result2 = result2 / gn;

std::to_string(result1);

std::to_string(result2);

g[i] = result1 + '/' + result2;

}

else

{

printf("%g/%g=?\n", down1, up1);

result1 = up*up1 + down1*down;

result2 = up1*down1;

gn = gcd(result1, result2);

result1 = result1 / gn;

result2 = result2 / gn;

std::to_string(result1);

std::to_string(result2);

g[i] = result1 + '/' + result2;

}

}

else

{

printf("%g/%g", down, up);

cout << "+";

if (up1 < down1)

{

printf("%g/%g=?\n", up1, down1);

result1 = down1*down + up1*up;

result2 = up*down1;

gn = gcd(result1, result2);

result1 = result1 / gn;

result2 = result2 / gn;

std::to_string(result1);

std::to_string(result2);

g[i] = result1 + '/' + result2;

}

else

{

printf("%g/%g=?\n", down1, up1);

result1 = down*up1 + down1*up;

result2 = up*up1;

gn = gcd(result1, result2);

result1 = result1 / gn;

result2 = result2 / gn;

std::to_string(result1);

std::to_string(result2);

g[i] = result1 + '/' + result2;

}

}

e[i] = 5;

break;

cout << "请输入答案" << endl;
for (i = 0; i < n; i++)
{
if (e[i] < 5)
{
cin >> b[i];
if (b[i] == a[i])
count += 1;

}
if (e[i] >= 5)
{
cin >> f[i];
if (f[i].compare(g[i]) == 0)
count += 1;
else
continue;

}

}//判断对错
double rate = count/ n;
cout << "正确率：";
cout << rate;

c.运行结果截图：

2.展示psp:

 PSP2.1 Personal Software Process Stages Time (m) Senior Student Time (m) Planning 计划 2h 1.5h · Estimate 估计这个任务需要多少时间 8h 10h Development 开发 -- -- · Analysis 需求分析 (包括学习新技术) 10min 10min · Design Spec 生成设计文档 20min 15min · Design Review 设计复审 -- -- · Coding Standard 代码规范 5min 8min · Design 具体设计 40min 50min · Coding 具体编码 6h 7h · Code Review 代码复审 1h 1.5h · Test 测试（自我测试，修改代码，提交修改） 3h 3h Reporting 报告 30min 25min · 测试报告 -- -- · 计算工作量 5min 5min · 并提出过程改进计划 -- --

三、小结：

第一次做软件工程的作业 ，编程水平有限导致编写代码花费时间长，很多地方不完善。

posted @ 2017-03-07 16:27  林钊  阅读(162)  评论(5编辑  收藏  举报