一.题目要求
题目1:
我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:
能够自动生成四则运算练习题
可以定制题目数量
用户可以选择运算符
用户设置最大数(如十以内、百以内等)
用户选择是否有括号、是否有小数
用户选择输出方式(如输出到文件、打印机等)
最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)
二.角色分配
1.驾驶员
能够完成全部代码工作,程序基本实现全部要求功能,并将代码上传至coding.net或者GitHub代码托管系统中
能够对导航员在本次编程工作中起到的作用给出客观评价,并完成500字以上的总结,并且上传和队友工作时的照片
2.领航员
能够辅助驾驶员完成全部代码工作,并且为关键函数选用合适的覆盖标准设计测试用例,并编写代码进行单元自动测试。
能够根据上次作业的代码检查表对驾驶员的本次工作进行评价。
能够对本次工作完成500字以上的总结。
在这一次的结对作业中,我扮演的角色是驾驶员。
三.主要函数功能介绍
1.对增加括号的处理方法
void Addparentheses(char *a, int k)//增添括号
{
int m, c, b;
char *p1, *p2;
p1 = a;
m = rand() % (k - 1);
p1 = p1 + m;
p2 = p1;
p1 = p1 + (k - m);
for (b = 0; b < k - m; b++)
{
*p1 = *(p1 - 1);
p1--;
}
*p1 = '(';
c = rand() % (k - m + 1);
c = c + m;
while (1)
{
if ((c - m < 2) || (c - m == k))//判读两个括号是否是紧挨着
{
c = rand() % (k - m + 1);
c = c + m;
}
else
break;
}
p2 = a + c;
p1 = a + k + 1;
for (b = 0; b < k + 1 - c; b++)
{
*p1 = *(p1 - 1);
p1--;
}
*p1 = { ')' };
}
2.输出四则运算中数字部分的函数
void showopernumber(int *oper, int i)//输出数字
{
float n;
int m;
{
if (FloatingpointNumbers == 1)//判断是否需要转换成小数
{
m = randomnumber(4);
if (m == 2)
{
n = theFloatingpointNumbers();
cout << *(oper + i) + n;
}
else
cout << *(oper + 1);
}
if (FloatingpointNumbers == 0)
cout << *(oper + 1);
}
}
3.输出整体四则运算算式的函数
void show(char *symbol, int *oper, int a)//输出最后结果
{
char *p1, *p2;
int *p3;
int i, m;
char n;
p1 = symbol;
p2 = p1;
p3 = oper;
if (division == 1)
{
if (*p1 == '(')
{
cout << *p1;
outfile << *p1;
p1++;
for (i = 0; i < a; i++)
{
showopernumber(oper, i);
if (*p1 == ')')
{
cout << *p1 << *(p1 + 1);
outfile << *p1 << *(p1 + 1);
p1 = p1 + 2;
}
else
{
cout << *p1;
p1++;
outfile << *p1;
}
}
p1 = p2;
cout << endl << endl;
}
if (*p1 != '(')
{
for (i = 0; i < a; i++)
{
//cout << oper[i];
//outfile << oper[i];
showopernumber(oper, i);
if (*(p1 + 1) == '(')
{
cout << *p1 << *(p1 + 1);
outfile << *p1 << *(p1 + 1);
p1 = p1 + 2;
}
else if (*p1 == ')')
{
cout << *p1 << *(p1 + 1);
outfile << *p1 << *(p1 + 1);
p1 = p1 + 2;
}
else
{
cout << *p1;
p1++;
outfile << *p1;
}
}
p1 = p2;
cout << endl << endl;
outfile << endl;
// outfile.close();
}
}
if (division == 0)
{
for (i = 0; i < a; i++)
{
showopernumber(oper, i);
cout << symbol[i];
outfile << oper[i] << symbol[i];
}
cout << endl << endl;
}
}