题目:在原基础上能够输入答案判断对错,并且输出正确答案与错误答案的数目:
源代码:
#include<iostream>
#include<time.h>
using namespace std;
float suan(float o1, char oc, float o2)
{
float r;
switch (oc)
{
case '+':
r = o1 + o2;
break;
case '-':
r = o1 - o2;
break;
case '*':
r = o1 * o2;
break;
case '/':
r = o1 / o2;
r = int((r + 0.5) * 100) / 100.0;
break;
}
return r;
}
void main()
{
int i, k, q, j, v, h, l, hl, d = 0, c = 0; //定义几个变量
float *o1, *o2, *o3, *r1, *r2;
char *oc1, *oc2;
char n1, n2;
int a1, a2;
char g[4] = { '+', '-', '*', '/' };
char y[5][5] = {
' ', '+', '-', '*', '/',
'+', '=', '=', '<', '<',
'-', '=', '=', '<', '<',
'*', '>', '>', '=', '=',
'/', '>', '>', '=', '=' };
srand((unsigned)time(NULL)); //本地时间
b: cout << "请问您想输出多少道题目?" << endl;
cin >> q;
cout << "请输入操作数值的最大范围:" << endl;
cin >> j;
cout << "请问是否有无乘除法?(Y/N)" << endl;
cin >> n1;
cout << "请问是否有无括号?(Y/N)" << endl;
cin >> n2;
cout << "请输入每行运算式的个数:" << endl;
cin >> v;
cout << "请输入每行运算式之间的间隔:" << endl;
cin >> a2;
o1 = new float[q];
o2 = new float[q];
o3 = new float[q];
r1 = new float[q];
r2 = new float[q];
oc1 = new char[q];
oc2 = new char[q];
cout << "以下为随机选取的题目:" << endl << endl;
for (i = 1; i <= q; i++) //定义一个可以改变题目数量的q
{
if (n1 == 'Y')
{
oc1[i] = g[rand() % 4];
oc2[i] = g[rand() % 4];
o1[i] = rand() % j;
o2[i] = rand() % j;
o3[i] = rand() % j;
if (i == 1) //直接输出第一题
{
if (n2 == 'N') //无括号
{
cout << o1[i] << oc1[i] << o2[i] << oc2[i] << o3[i] << "= ";
for (hl = 1; hl < 5; hl++)
{
if (oc1[i] == y[hl][0])
{
h = hl;
}
if (oc2[i] == y[0][hl])
{
l = hl;
}
}
switch (y[h][l])
{
case '>':
r1[i] = suan(suan(o1[i], oc1[i], o2[i]), oc2[i], o3[i]);
break;
case '=':
r1[i] = suan(suan(o1[i], oc1[i], o2[i]), oc2[i], o3[i]);
break;
case '<':
r1[i] = suan(o1[i], oc1[i], suan(o2[i], oc2[i], o3[i]));
break;
}
}
else //有括号
{
if (rand() % 2 == 0) //括号在前
{
if (oc1[i] == '+' || oc1[i] == '-')
{
if (oc2[i] == '*' || oc2[i] == '/')
{
cout << '(' << o1[i] << oc1[i] << o2[i] << ')' << oc2[i] << o3[i] << "= ";
r1[i] = suan(suan(o1[i], oc1[i], o2[i]), oc2[i], o3[i]);
}
else
{
cout << o1[i] << oc1[i] << o2[i] << oc2[i] << o3[i] << "= ";
r1[i] = suan(suan(o1[i], oc1[i], o2[i]), oc2[i], o3[i]);
}
}
if (oc1[i] == '*' || oc1[i] == '/')
{
cout << o1[i] << oc1[i] << o2[i] << oc2[i] << o3[i] << "= ";
r1[i] = suan(suan(o1[i], oc1[i], o2[i]), oc2[i], o3[i]);
}
}
else //括号在后
{
if (oc1[i] == '+' || oc1[i] == '-')
{
if (oc2[i] == '+' || oc2[i] == '-')
{
cout << o1[i] << oc1[i] << '(' << o2[i] << oc2[i] << o3[i] << ')' << "= ";
r1[i] = suan(o1[i], oc1[i], suan(o2[i], oc2[i], o3[i]));
}
else
{
cout << o1[i] << oc1[i] << o2[i] << oc2[i] << o3[i] << "= ";
r1[i] = suan(o1[i], oc1[i], suan(o2[i], oc2[i], o3[i]));
}
}
if (oc1[i] == '*' || oc1[i] == '/')
{
cout << o1[i] << oc1[i] << '(' << o2[i] << oc2[i] << o3[i] << ')' << "= ";
r1[i] = suan(o1[i], oc1[i], suan(o2[i], oc2[i], o3[i]));
}
}
}
}
else
{
for (k = 0; k < i; k++) //避免重复start
{
if (o1[k] == o1[i] && o2[k] == o2[i] && o3[k] == o3[i] && oc1[k] == oc1[i] && oc2[k] == oc2[i])
{
i--;
break;
}
else
{
if (k == i - 1) //比较到最后一个数时
{
//循环输出/*q*/道运算题
if (n2 == 'N') //无括号
{
cout << o1[i] << oc1[i] << o2[i] << oc2[i] << o3[i] << "= ";
for (hl = 1; hl < 5; hl++)
{
if (oc1[i] == y[hl][0])
{
h = hl;
}
if (oc2[i] == y[0][hl])
{
l = hl;
}
}
switch (y[h][l])
{
case '>':
r1[i] = suan(suan(o1[i], oc1[i], o2[i]), oc2[i], o3[i]);
break;
case '=':
r1[i] = suan(suan(o1[i], oc1[i], o2[i]), oc2[i], o3[i]);
break;
case '<':
r1[i] = suan(o1[i], oc1[i], suan(o2[i], oc2[i], o3[i]));
break;
}
}
else //有括号
{
if (rand() % 2 == 0) //括号在前
{
if (oc1[i] == '+' || oc1[i] == '-')
{
if (oc2[i] == '*' || oc2[i] == '/')
{
cout << '(' << o1[i] << oc1[i] << o2[i] << ')' << oc2[i] << o3[i] << "= ";
r1[i] = suan(suan(o1[i], oc1[i], o2[i]), oc2[i], o3[i]);
}
else
{
cout << o1[i] << oc1[i] << o2[i] << oc2[i] << o3[i] << "= ";
r1[i] = suan(suan(o1[i], oc1[i], o2[i]), oc2[i], o3[i]);
}
}
if (oc1[i] == '*' || oc1[i] == '/')
{
cout << o1[i] << oc1[i] << o2[i] << oc2[i] << o3[i] << "= ";
r1[i] = suan(suan(o1[i], oc1[i], o2[i]), oc2[i], o3[i]);
}
}
else //括号在后
{
if (oc1[i] == '+' || oc1[i] == '-')
{
if (oc2[i] == '+' || oc2[i] == '-')
{
cout << o1[i] << oc1[i] << '(' << o2[i] << oc2[i] << o3[i] << ')' << "= ";
r1[i] = suan(o1[i], oc1[i], suan(o2[i], oc2[i], o3[i]));
}
else
{
cout << o1[i] << oc1[i] << o2[i] << oc2[i] << o3[i] << "= ";
r1[i] = suan(o1[i], oc1[i], suan(o2[i], oc2[i], o3[i]));
}
}
if (oc1[i] == '*' || oc1[i] == '/')
{
cout << o1[i] << oc1[i] << '(' << o2[i] << oc2[i] << o3[i] << ')' << "= ";
r1[i] = suan(o1[i], oc1[i], suan(o2[i], oc2[i], o3[i]));
}
}
}
}
}
} //避免重复end
}
}
else if (n1 == 'N')
{
oc1[i] = g[rand() % 2];
oc2[i] = g[rand() % 2];
o1[i] = rand() % j;
o2[i] = rand() % j;
o3[i] = rand() % j;
if (i == 1)
{
if (n2 == 'N')
{
cout << o1[i] << oc1[i] << o2[i] << oc2[i] << o3[i] << "= ";
r1[i] = suan(suan(o1[i], oc1[i], o2[i]), oc2[i], o3[i]);
}
else
{
if (rand() % 2 == 0)
{
cout << o1[i] << oc1[i] << o2[i] << oc2[i] << o3[i] << "= ";
r1[i] = suan(suan(o1[i], oc1[i], o2[i]), oc2[i], o3[i]);
}
else
{
cout << o1[i] << oc1[i] << '(' << o2[i] << oc2[i] << o3[i] << ')' << "= ";
r1[i] = suan(o1[i], oc1[i], suan(o2[i], oc2[i], o3[i]));
}
}
}
else
{
for (k = 0; k < i; k++) //避免重复start
{
if (o1[k] == o1[i] && o2[k] == o2[i] && o3[k] == o3[i] && oc1[k] == oc1[i] && oc2[k] == oc2[i])
{
i--;
break;
}
else
{
if (k == i - 1) //比较到最后一个数时
{
//循环输出/*q*/道运算题
if (n2 == 'N')
{
cout << o1[i] << oc1[i] << o2[i] << oc2[i] << o3[i] << "= ";
r1[i] = suan(suan(o1[i], oc1[i], o2[i]), oc2[i], o3[i]);
}
else
{
if (rand() % 2 == 0)
{
cout << o1[i] << oc1[i] << o2[i] << oc2[i] << o3[i] << "= ";
r1[i] = suan(suan(o1[i], oc1[i], o2[i]), oc2[i], o3[i]);
}
else
{
cout << o1[i] << oc1[i] << '(' << o2[i] << oc2[i] << o3[i] << ')' << "= ";
r1[i] = suan(o1[i], oc1[i], suan(o2[i], oc2[i], o3[i]));
}
}
}
}
} //避免 重复end
}
}
if (i % v == 0)
{
for (a1 = 1; a1 <= a2; a1++)
{
cout << endl;
}
}
}
cout << endl << "请输入答案:" << endl;
for (i = 1; i <= q; i++)
{
cin >> r2[i];
}
cout << endl << "以下是正确答案:" << endl;
for (i = 1; i <= q; i++)
{
cout << r1[i] << " ";
if (i % v == 0)
{
cout << endl;
}
}
for (i = 1; i <= q; i++)
{
if (r1[i] == r2[i])
{
d++;
}
else
{
c++;
}
}
cout << endl << "您答对了" << d << "道题,答错了" << c << "道题!" << endl;
cout << endl << "请重新测试:" << endl;
goto b;
}
截图:

总结:此次实验内容对我有一定难度,因为以前学的不好所以好多函数调用不太懂,是我和同学合作完成,以后一定要多加练习。