一、实验目标
1)体验敏捷开发中的两人合作。
2)进一步提高个人编程技巧与实践。
二 、实验内容
1)根据以下问题描述,练习结对编程(pair programming)实践;
2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。
3)要求在结对编程工作期间,两人的角色至少切换 4 次;
4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。
三、实验过程
1、代码规范
由于我们采用的是C语言,所以以下是我查找资料并总结的代码规范。
代码规范化基本上有七大原则,体现在空行、空格、成对书写、缩进、对齐、代码行、注释七方面的书写规范上。
1)空行
规则一:定义变量后要空行。
规则二:每个函数定义结束之后都要加空行。
总规则:两个相对独立的程序块、变量说明之后必须要加空行。
2)空格
规则一:关键字之后要留空格。像 const、case 等关键字之后至少要留一个空格,否则无法辨析关键字。
规则二:函数名之后不要留空格,应紧跟左括号(
,以与关键字区别。
规则四:,
之后要留空格。如果;
不是一行的结束符号,其后要留空格。
规则五:双目运算符的前后应当加空格,单目运算符以及像数组符号[]
、结构体成员运算符.
、指向结构体成员运算符->
,这类操作符前后不加空格。
3)缩进
缩进是通过Tab 键实现的,缩进可以使程序更有层次感。原则是:如果地位相等,则不需要缩进;如果属于某一个代码的内部代码就需要缩进。
4)成对书写
成对的符号一定要成对书写,如{,}。
5)对齐
对于大括号来说:{和}
分别都要独占一行。互为一对的{
和}
要位于同一列,并且与引用它们的语句左对齐;
{}之内的代码要向内缩进一个 Tab,且同一地位的要左对齐,地位不同的继续缩进。
6)代码行
规则一:一行代码只做一件事情,如只定义一个变量,也便于注释。
规则二:if、else等语句自占一行,执行语句不得紧跟其后。
7)注释
规则一:注释是对代码的“提示”,而不是文档,不应过于繁琐。
规则二:如果代码本来就是清楚的,则不必加注释。如i++。
规则三:边写代码边注释,修改代码的同时要修改相应的注释,以保证注释与代码的一致性。
规则四:当代码比较长,特别是有多重嵌套的时候,应当在段落的结束处加注释,便于阅读。
规则五:每一条宏定义的右边必须要有注释,说明其作用。
参考链接:http://c.biancheng.net/view/158.html
2、程序的总体设计
主程序包括以下几个部分:
- 变量定义(操作数a,b,结果d,运算符c,答对题数统计sum等)
- 开始循环输出运算式
- 产生随机数(先初始化)
- 判断随机数是否满足条件
- 输出运算式
- 等待输入
- 结果判断
- 结束循环输出运算式
- 输出统计数据
程序的总体设计流程图如下:
3、程序结对编程过程及功能实现情况
(1)结对编程的过程
一开始我们一起在网上查找关于四则运算的资料,以及其他做成功的案例,考虑怎么二人协作完成此次实验。
然后我们商定出了一个大概的程序,运行条件都满足,但是仍需优化,于是李夏对程序进行了一番修改,添加了界面颜色、输出方式等,使其更加完善。
在对代码进行修改提交时,我进行了如下操作
(2)功能实现
首先产生随机数,然后生成算式,输入自己的计算结果,然后判断对错,最后系统统计出正确题数和所得分数。
刚开始的进入界面是一颗大大的爱心,开始测验,紧接着出现的就是第一个算式
输入自己的运算结果后,系统会判断结果是否正确,并给出下一算式
一共有十个算式,当所有结果全部输入完成后,系统会自动统计成绩,若是对的题数小于七,则会在给出成绩的同时给予鼓励的话
若是对的题数大于等于七,则会同样在给出成绩的同时给与夸奖。
源代码:
#include
#include
#include
int main()
{
int a,b,d,e,t; //定义两个操作数a,b,结果d,输入结果t
char c; //运算符c可取“+、-、×、÷”
float y, x, m;
int i,sum=0; //题目数量i,答对数目sum
srand(time(0)); //初始化随机数发生器
/**< 产生数据 */
system("color 73");
printf("--------------------欢迎来到四则运算小练习--------------------\r\n");
for (y = 1.5f;y > -1.5f;y -= 0.1f)
{
for (x = -1.5f;x < 1.5f;x += 0.05f)
{
m = x*x + y*y - 1;
putchar(m*m*m - x*x*y*y*y <= 0.0f ? '*' : ' ');
}
putchar('\n');
}
printf("-------------------------咱们开始喽-------------------------\r\n");
for(i=0;i<10;i++)
{
a=rand()%100+1;
b=rand()%100+1;
c=rand()%4; //0表加,1表减,2表乘,3表除
/**< 数据合格判断及算式显示 */
printf(" 第%d题:",i+1);
switch(c)
{
case 0:
while((d=a+b)>100) //保证和在100内
{
a=rand()%100+1;
b=rand()%100+1;
}
printf("%d + %d = ",a,b);
break;
case 1:
while(a>100||b>100) //被减数小于100
{
a=rand()%100+1;
b=rand()%100+1;
}
if(a {
d=a;
a=b;
b=d;
}
d=a-b;
printf("%d - %d = ",a,b);
break;
case 2:
while((d=a*b)>100) //保证积小于100
{
a=rand()%100+1;
b=rand()%100+1;
}
printf("%d × %d = ",a,b);
break;
case 3:
while(a>100||b>100||(a*b==0)) //保证被除数小于100且除数不为0
{
a=rand()%100+1;
b=rand()%100+1;
}
if(a {
d=a;
a=b;
b=d;
}
a=(a/b)*b; //保证整除
d=a/b;
printf("%d ÷ %d = ",a,b);
break;
}
/**< 输入你的计算结果 */
scanf("%d",&t);
if(d==t)
{
sum++;
printf("正确\n");
}
else
printf("错误\n");
}
/**< 输出答对题数和得分 */
printf(" 答对 %d 题,得分:%d\n",sum,sum*10);
if(sum>=7)
printf(" 小朋友你真厉害,继续加油哦!(*^▽^*)\r\n");
else
printf(" 不要泄气哦,继续加油,你一定可以的!(*^▽^*)\r\n");
return 0;
}
4、项目github地址
源仓库的地址为:https://github.com/yixia1/pp_project.git
5、实验总结
通过此次实验我深刻体会到了结对编程的意义,我们在完成代码的同时,学会了如何协商,以及配合。其大大程度上提高了编程效率,但是也同样需要两个人能够积极的处理问题,面对问题,互相学习,来编出更好的代码。此次实验做的还不够完善,代码过于简单,对函数的使用还不是很擅长,希望今后能在更多的团队协作中学习的更多。