第二次结对作业 四则运算生成器
1.题目要求
- 题目1:
- 我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:
- 能够自动生成四则运算练习题
- 可以定制题目数量
- 用户可以选择运算符
- 用户设置最大数(如十以内、百以内等)
- 用户选择是否有括号、是否有小数
- 用户选择输出方式(如输出到文件、打印机等)
- 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)
- 我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:
2.代码部分
我在本次结对作业中担任的是驾驶员的角色,负责所有代码工作。
如下是涉及到的头文件与定义变量。
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<iostream>
#include <fstream>
#include <iomanip>
#include<ctime>
using namespace std;
int num;//题目数量
int suanfa;//算法
int max;//最大数
int kuo;//是否有括号
int xiao;//是否有小数
int wen;//输出到文件
float shu1, shu2, shu3;
char fuhao1, fuhao2;
以下是变量输入部分,以完成根据用户需要进行四则运算的生成的目标。
int main()
{
srand((unsigned int)time(0));
cout<<"请输入生成题目数量:
";
cin >> num;
while (1)
{
if (num > 100 || num < 0)
{
cout<<"输入错误
";
cin >> num;
}
else
break;
}
cout << "请输入生成题目类型:
";
cout << "1.加减 2.乘除 3.加减乘除
";
cin >> suanfa;
while (1)
{
if ((suanfa != 1)&&(suanfa != 2)&&(suanfa != 3))
{
cout << "输入错误
";
cin >> suanfa;
}
else
break;
}
cout << "请输入生成最大数:
";
cin >> max;
while (1)
{
if (max<0||max>10000)
{
cout << "输入错误
";
cin >> max;
}
else
break;
}
cout << "请输入是否有括号:
";
cout << "1.没有 2.有
";
cin >> kuo;
while (1)
{
if (kuo!=1 && kuo!=2)
{
cout << "输入错误
";
cin >> kuo;
}
else
break;
}
cout << "请输入是否有小数:
";
cout << "1.没有 2.有
";
cin >> xiao;
while (1)
{
if (xiao != 1 && xiao != 2)
{
cout << "输入错误
";
cin >> xiao;
}
else
break;
}
使用rand函数进行随机数生成,分别进行小数的生成和整数的生成,以及使用随机数生成产生所需的操作符。
通过if判断保证所产生的随机数与操作符在用户所需的范围内。
float decimal()
{
float a;
while(1)
{
a = rand() % 10000 + 1;
a = a * (0.01);
if (a <= max)
break;
}
return a;
}
int integer()
{
int b;
b = rand() % max + 1;
return b;
}
char suanfu()
{
int c;
char ch;
while(1)
{
c = rand() % 4 ;
switch (c)
{
case 1:ch = '+'; break;
case 2:ch = '-'; break;
case 3:ch = '*'; break;
case 4:ch = '/'; break;
}
if ((suanfa == 1) && ((c == 1) || (c == 2)))
break;
if ((suanfa == 2) && ((c == 3) || (c == 4)))
break;
if (suanfa == 3 && ((c == 1) || (c == 2)||(c == 3) || (c == 4)))
break;
}
return ch;
}
根据用户要求的出题数量进行循环调用函数随机生成不同的题目并输出
int i;
for (i = 1; i <= num; i++)
{
if (xiao == 1)
{
shu1 = integer();
shu2 = integer();
shu3 = integer();
}
else
{
shu1 = decimal();
shu2 = decimal();
shu3 = decimal();
}
fuhao1 = suanfu();
fuhao2 = suanfu();
if (kuo == 1)
{
wukuo();
}
else
{
int k;
k = rand() % 2;
if (k == 1)
kuo1();
else
kuo2();
}
}
进行一下测试
输入需求
输出四则运算
还挺成功的
3.心得体会与总结
本次作业是第一次真正两人在一起进行结对编程,我的结对搭档吴琼同学尽职尽责地完成了领航员的职责,在我进行编程时在我身边督促我,检查错误,理清思路,并帮助我查找必要的资料,在此予以致意。二人结对后感觉效率有了显著的提高,思路更加开阔,解决问题的速度也有了明显的提升。在编程是与人合作是一种很新奇的体验,期待合作所能让我看见的更多可能性。
本次作业所要求的的随机生成四则运算题最终采用了包含三个随机数的分别进行加减、乘除、加减乘除三种模式的各分为有无括号与有无小数的版本。总体来说用户所需的要求已经基本实现,不过由于技术原因并未完成输出到文本的方面,只能直接输出到屏幕,这是今后仍需要钻研和提升的部分。
本次结对作业让我意识到了合作的重要性,面对相对复杂的算法能够有人自始至终跟进你的思路,及时找出编程中的漏洞并提出具有建设性的建议是一件非常有意义的事,这提高了编程的效率与准确性,使在编程上花的时间远小于我的预计时间,可见结对编程的重要性,也让我更加期待之后的团队项目。