### 题目描述:

• 除了整数以外，还要支持真分数的四则运算，真分数的运算，例如：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 估计这个任务需要多少时间 37 40
· Analysis 需求分析 (包括学习新技术) 1 1
· Coding Standard 代码规范 0.5 0.5
· Design 具体设计 1.5 1
· Coding 具体编码 30 35
· Test 测试（自我测试，修改代码，提交修改） 1 1
Reporting 报告 1 1

### 源代码:

#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int b = 0;
int maxNum(int i, int j)
{
int k;
if ((k = i % j) != 0)
{
maxNum(j, k);
}
else
return j;
}
int INT()
{
int x, y, z, t, m, n, c, r1, r2;
char r3[10], r4[10];
srand(time(NULL));
memset(r3, 0, sizeof(r3));
memset(r4, 0, sizeof(r4));
x = rand() % 100;
y = rand() % 100;
z = rand() % 4;
r1 = 0;
r2 = 0;
switch (z)
{
case 0:
cout << x << "+" << y << "=";
cin >> r1;
cin.get();
r2 = x + y;
if (r1 == r2)
{
cout << "    " << "T" << endl;
b = b + 1;
}
else cout << "    " << "F" << endl;
break;
case 1:
if (x<y)
{
t = x;
x = y;
y = t;
}
else;
cout << x << "-" << y << "=";
cin >> r1;
cin.get();
r2 = x - y;
if (r1 == r2)
{
cout << "    " << "T" << endl;
b = b + 1;
}
else cout << "    " << "F" << endl;

break;
case 2:
cout << x << "*" << y << "=";
cin >> r1;
r2 = x * y;
if (r1 == r2)
{
cout << "    " << "T" << endl;
b = b + 1;
}
else cout << "    " << "F" << endl;
break;
case 3:
if (y != 0)
{
cout << x << "÷" << y << "=";
c = maxNum(x, y);
m = x / c;
n = y / c;
if (n != 1)
{
sprintf_s(r3, "%d/%d", m, n);
cin >> r4;
if (strcmp(r3, r4) == 0)
{
cout << "    " << "T" << endl;
b = b + 1;
}
else cout << "    " << "F" << endl;
}
else
{
cin >> r2;
if (r2 == m) {
cout << "    " << "T" << endl;
b = b + 1;
}
else cout << "    " << "F" << endl;
}

}
else {
cout << x << "÷" << "1" << "=";
cin >> r2;
if (r2 == x) {
cout << "    " << "T" << endl;
b = b + 1;
}
else cout << "    " << "F" << endl;
}
break;
default:
cout << "wrong" << endl;
break;
}

return 0;
}

int fra() {
int x, y, z, t, m, n, c, r1, r2, i, j;
char r3[10], r4[10];
srand(time(NULL));
memset(r3, 0, sizeof(r3));
memset(r4, 0, sizeof(r4));
x = rand() % 100;
y = rand() % 100;
i = rand() % 100;
j = rand() % 100;
z = rand() % 4;
r1 = 0;
r2 = 0;
if (y == 0 || y == 1)
y = 2;
if (j == 0 || j == 1)
j = 2;
switch (z)
{
case 0:
cout << x << "/" << y << "+" << i << "/" << j << "=";
m = (x*j) + (i*y);
n = y*j;
c = maxNum(m, n);
m = m / c;
n = n / c;
if (n != 1) {
sprintf_s(r3, "%d/%d", m, n);
cin >> r4;
if (strcmp(r3, r4) == 0)
{
cout << "    " << "T" << endl;
b = b + 1;
}
else cout << "    " << "F" << endl;
}
else {
cin >> r2;
if (r2 == m)
{
cout << "    " << "T" << endl;
b = b + 1;
}
else cout << "    " << "F" << endl;
}
break;
case 1:
if ((x*j)<(i*y))
{
t = x;
x = i;
i = t;
t = y;
y = j;
j = t;
}
else;
cout << x << "/" << y << "-" << i << "/" << j << "=";
m = (x*j) - (i*y);
n = y*j;
c = maxNum(m, n);
m = m / c;
n = n / c;
if (n != 1) {
sprintf_s(r3, "%d/%d", m, n);
cin >> r4;
if (strcmp(r3, r4) == 0)
{
cout << "    " << "T" << endl;
b = b + 1;
}
else cout << "    " << "F" << endl;
}
else {
cin >> r2;
if (r2 == m)
{
cout << "    " << "T" << endl;
b = b + 1;
}
else cout << "    " << "F" << endl;
}
break;
case 2:
cout << x << "/" << y << "×" << i << "/" << j << "=";
m = x*i;
n = y*j;
c = maxNum(m, n);
m = m / c;
n = n / c;
if (n != 1) {
sprintf_s(r3, "%d/%d", m, n);
cin >> r4;
if (strcmp(r3, r4) == 0)
{
cout << "    " << "T" << endl;
b = b + 1;
}
else cout << "    " << "F" << endl;
}
else {
cin >> r2;
if (r2 == m)
{
cout << "    " << "T" << endl;
b = b + 1;
}
else cout << "    " << "F" << endl;
}
break;
case 3:
cout << x << "/" << y << "÷" << i << "/" << j << "=";
m = x*j;
n = y*i;
c = maxNum(m, n);
m = m / c;
n = n / c;
if (n != 1) {
sprintf_s(r3, "%d/%d", m, n);
cin >> r4;
if (strcmp(r3, r4) == 0)
{
cout << "    " << "T" << endl;
b = b + 1;
}
else cout << "    " << "F" << endl;
}
else {
cin >> r2;
if (r2 == m)
{
cout << "    " << "T" << endl;
b = b + 1;
}
else cout << "    " << "F" << endl;
}
break;
default:
cout << "wrong" << endl;
break;
}

return 0;
}
int main(int argc, char*argv[]) {
int a, c;
if (argc<2)
cin >> a;
else a = atoi(argv[2]);
srand(time(NULL));

for (int i = 0; i < a; i++) {
c = rand() % 2;
switch (c) {
case 0:INT(); break;
case 1:fra(); break;
default:
cout << "wrong" << endl;
break;
}
}

cout << "grade:" << b;

return 0;
}