博客信息 | |
---|---|
作业要求 | |
课程目标 | |
作业目标 |
- 我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:
- 可以定制题目数量
- 用户可以选择运算符
- 用户设置最大数(如十以内、百以内等)
- 用户选择是否有括号、是否有小数
- 用户选择输出方式(如输出到文件、打印机等)
- 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)
2、任务分工
- 领航员:魏思梦(链接)
- 辅助驾驶员完成四则运算自动生成算法的设计
- 编写单元自动测试并设计测试用例
- 优化代码并完成代码复审
- 驾驶员:曾丽君
- 主要设计四则运算程序并完成相应功能,并将代码上传至GitHub代码托管系统中
- 辅助领航员完成代码测试
3、代码地址
点这里呀!!!小学生四则运算生成程序(链接)
4、功能设计
经过我和魏思梦同学审题后的结果得出,我们觉得实现以下功能:
- 用户能自行定制题目的数量
- 用户可以选择一种或多种加减乘除的运算符
- 用户能设置最大数(10和100作为选择)
- 用户能选择输出整数还是浮点数
- 用户能选择表达式中是否带括号
- 用户能选择是否输出到文件,这里默认输出到D盘里
5、关键部分代码简述
(1) 随机数的生成
在C语言中,我选择使用 <stdlib.h> 头文件中的 rand() 函数来生成随机数
在C语言中,我选择使用 <stdlib.h> 头文件中的 rand()
函数来生成随机数, rand()
会随机生成一个位于 0 ~ RAND_MAX 之间的整数,RAND_MAX 是 <stdlib.h> 头文件中的一个宏,它用来指明 rand() 所能返回的随机数的最大值,按照规定RAND_MAX取 32767。使用 <time.h> 头文件中的 time() 函数即可得到当前的时间(精确到秒),就像下面这样:
srand((unsigned)time(NULL));
下面举返回随机整数函数为例:
//产生0~10的随机数
int re_ten()
{
int a;
a = rand() % 11;
return a;
}
(2) 输出运算式(以加号为例)
产生随机数1—4来表示加减乘除
if(add==1&&c==1)
{//add=1表示用户要求在式子出现'+'
cout<<a<<"+"<<b<<"="<<endl;
if(way==1)
{//输出到D盘文件
if ((fp = fopen("D:\text.txt", "a")) == NULL)
{
printf("error!
");
exit(0);
}
else
{
fprintf(fp,"%d+%d=
",a,b);
}
}
}
(3) 输出带有括号的复杂表达式
if(add==1&&c==1)
{
c1=symbol();
if(sub==1&&c1==2)
{
printf("%.2f-(%.2f+%.2f)
",d,a,b);
if(way==1)
{
fprintf(fp,"%.2f-(%.2f+%.2f)
",d,a,b);
}
}
if(mul==1&&c1==3)
{
printf("%.2f*(%.2f+%.2f)
",d,a,b);
if(way==1)
{
fprintf(fp,"%.2f*(%.2f+%.2f)
",d,a,b);
}
}
if(div==1&&c1==4)
{
printf("(%.2f+%.2f)/%.2f
",a,b,d);
if(way==1)
{
fprintf(fp,"%.2f+%.2f)/%.2f
",a,b,d);
}
}
}
6、运行结果展示
(1) 下面以包含加减乘除最大值为100的整数且含有括号的复杂表达式并输出到文件里为例:
输出到文件:
(2) 下面以只含有减号和除号最大值为10的小数且不含有括号的复杂表达式并输出到文件里为例:
输出到文件:
7、工作记录
本次设计前的沟通与协作,我会结对伙伴采取以QQ分屏的演示进行线上沟通:
8、对领航员的评价
在本次作业的过程中,我们相处的十分愉快,我们在任务开始前,进行了有关任务的讨论,在明确各自的任务分工之后,魏思梦和我分别选择了领航员和驾驶员领航员的工作,并积极查阅资料做充分准备。魏思梦同学作为领航员十分尽职尽责,在她的帮助下,我完成了项目的需求分析和总体设计工程,在我们的代码大体思路确定下来之后,我能顺利的敲出题目要求的代码。
在代码完成之后,魏思梦同学完成了代码优化和代码复审,因此在整个过程中,我十分感谢魏思梦同学的帮助,我们在这次合作的过程中也受益匪浅,我认为,魏思梦是很优秀的结对伙伴,很荣幸能在这次与她合作。
9、驾驶员自我总结
在这次结对作业过程中,我了解了驾驶员——领航员工作机制,在编程过程中,得益于这种模式,分工明确,更易完成项目设计与最终审核。
驾驶员负责代码编写,浏览文件,完成基础功能。领航员则更加着眼于更加长远的考虑并且检查错误。我认为,领航员弥补了我思路的不足,这种模式下的“头脑风暴”,对双方来说都是一种宝贵的财富,不仅可以提高双方的能力,而且,孤舟难立,良好的合作,也是走向成功的关键,对于我来说,如果没有一个优秀的领航员相辅助,我觉得我也很难走向终点。
三人行,必有我师焉。择其善者而从之,其不善者而改之,虽然由于时间关系和个人水平原因,我们没有完成代码界面设计的功能,这是我们的遗憾后续我会加以补充,但这次作业工程中,我受益匪浅,我不仅学会了结对开发的技术,我也会会积极学习魏思梦同学的长处,取长补短,努力提高自己。
10、工作记录表
项目 | ||
---|---|---|
设计时间 | ||
开始时间 | ||
编码时间 | ||
代码行数 | ||
错误数量 | ||
开发总时间 |