一、实验目标:
1)体验敏捷开发中的两人合作。
2)进一步提高个人编程技巧与实践。
二 、实验内容:
1)根据以下问题描述,练习结对编程(pair programming)实践;
2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。
3)要求在结对编程工作期间,两人的角色至少切换 4 次;
4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。
三、问题描述(二选一)
1)生命游戏
生命游戏是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死亡的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因太孤单而死去。
游戏在一个类似于围棋棋盘一样的,可以无限延伸的二维方格网中进行。例如,设想每个方格中都可放置一个生命细胞,生命细胞只有两种状态:“生”或“死”。图中,用黑色的方格表示该细胞为“死”, 其它颜色表示该细胞为“生” 。
游戏开始时, 每个细胞可以随机地(或给定地)被设定为“生”或“死”之一的某个状态, 然后,再根据如下生存定律计算下一代每个细胞的状态:
-
每个细胞的状态由该细胞及周围 8 个细胞上一次的状态所决定;
-
如果一个细胞周围有 3 个细胞为生,则该细胞为生,即该细胞若原先为死则转为生,若原先为生则保持不变;
-
如果一个细胞周围有 2 个细胞为生,则该细胞的生死状态保持不变;
-
在其它情况下,该细胞为死,即该细胞若原先为生则转为死,若原先为死则保持不变。
2)开发一个自动生成小学四则运算题目的命令行 “软件”。实现 输入你要出题的个数,随机产生四则运算,然后用户回答,并且进行打分。
规则:用随机数实现100以内的加、减、乘、除运算,其中和与积不能超过100,差不为负(即须大减小),商不为小数或分数(即必须整除)。要求总计输出10个运算式,每输出一个运算式,等待输入结果,然后进行对错判断并输出。最后输出统计答对的题数与分。
四则运算:开发一个自动生成小学四则运算题目的命令行 “软件”。实现 输入你要出题的个数,随机产生四则运算,然后用户回答,并且进行打分。规则:用随机数实现100以内的加、减、乘、除运算,其中和与积不能超过100,差不为负(即须大减小),商不为小数或分数(即必须整除)。要求总计输出10个运算式,每输出一个运算式,等待输入结果,然后进行对错判断并输出。最后输出统计答对的题数与分数。
对课题理解:输入出题数10,先输出一个运算式,一个一个运算式输出,用户每回答完一个,再输出。用户输入答案,系统判断对错并显示出来,如果答对,答对题数加一,分数加分变化;如果答错,答对题数不变,分数不变;第十题做完后,系统显示的答对题数和分数既是本次测验成绩。关键难点在于随机产生四则运算和验证答案是否正确。随机数和加减乘除的排列,验证时,优先级的比较等等,这些都是需要解决的问题。
四、其他要求
1)在博客园https://www.cnblogs.com/注册个人账号,记录二个人的编程实现过程,遇到的问题及解决方法。
2)在github上托管二个人项目的代码,采用git对项目代码进行管理。
五、实验过程与记录
1、代码规范
1)编写代码时为了方便查看应利用空行,缩进,对齐使程序的格局段落分明。
2)有的符号需要成对书写,防止遗漏某些字符。对于像层层嵌套的程序,更需要谨慎小心。
3)由于某些单元极易出错,因此尽量将单元简化,不需要的可以删除,将其功能性尽量以最简化表达出来。
4)对于此次实验,头文件的添加极其重要。错误的头文件会影响代码运行。一开始由于添加了错误的头文件,导致代码半天敲不出来。因此,正确的头文件添加很重要。
5)对于此次四则运算,尽量将各个功能模块分开进行,有利于出错时检查问题。
6)模块间各个功能要分工明确,对于此次实验,因为加法和乘法有类似都要求,因此可以在某些方面将其进行类别比对。对于除法和减法,也可以利用相同的类别比对进行修改代码。
7)对于主函数部分,首先要了解所需功能,然后有目的性的开展代码内容。
8)在编写代码时我们一般遵循代码规范的七大原则——空行、空格、成对书写、缩进、对齐、代码行、注释七方面的书写规范上。我们选择c语言进行程序的代码编写。
9)对于类名首字母需要大写,对于标识符,有的需要在一起写,防止出错。
10)在关键字后面一定要有空格,避免代码报错显示关键字未定义。
11)在某些代码后加上一些注释,c语言的一行注释一般采用//,
使使用代码或修改代码的人更加清楚 地知道代码的作用成对的符号一定要成对书写,不然容易漏写而使代码报错。
2、程序的总体设计
程序流程图:
3、程序结对编程过程(附图)及功能实现情况(附代码和图)
(1)结对编程过程:
1)首先我们两人一起在网上查找一些关于四则运算方面的题目代码。然后整理汇总并由我来运行第一个版本,发现跟题目要求不一样,生成的随机数不是100以内,而是
10以内,做的是10以内的四则运算。但是在统计分数作答情况其他方面都符合题目要求。截图如下:
2)然后,我们两人通过QQ远程控制桌面以及语音通话来商量解决其中的问题,对题目提出意见和如何进行修改添加等操作,最后汇总。
(2)功能实现情况:
1)加法运算:由于加法总和不能超过100,那么定义a变量在1-100之间,定义b变量在1-10之间,防止运算出界。
2)减法运算:同第一种情况一样,防止运算结果有负数,因此这里定义被减数a为1-100,减数b为1-10。依然利用rand()函数随机产生两种随机数。
3)乘法运算:
4)除法运算:
5)运算方式的选择:选择需要的计算方式进行相应运算,得到结果。
6)用户计算完成后,可以选择继续进行运算或者退出,继续运算式也可以继续选择运算方式。
7)统计答题情况,算出得分。
(3)运行情况记录
4、项目信息
晁海燕:https://www.cnblogs.com/12345chy/
刘晓絮:https://www.cnblogs.com/liuxiaoxu/
仓库:https://github.com/liuxiaoxu66/pp_project.git
六、实验小结
此次结对编程实验,实验形式有所变化。以往都是一个人编程,此次是结对编程,两两一组,两个人互相监督,能发现不一样的错误,有着更多的收获。一个人做实验时,没有干劲,两个人一起有着不一样的积极性。一个人做实验时,往往在一个地方卡半天,不能够找到错误,或者破解方法。而两个人做实验时,伙伴能发现你不容易发现的错误。节约了编程时间。代码还有待加强,在代码方面仍有许多不足。在git hub方面仍是不能够掌握,对github平台不熟悉。