结对编程 黄金点游戏
一.实现要求:
N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。玩了几天以后,大家发现了一些很有意思的现象,比如黄金点在逐渐地往下移动。
现在请大家根据这个游戏规则,编一个可以多人一起玩的小游戏程序,要求如下:
1、本作业属于结对编程项目,必须由二人共同完成,并分别将本次作业过程发到博客,同时将本次作业源代码提交到codeing系统;
2、如果可能的话尽量以C/S或B/S方式实现,即利用服务器接收和处理所有玩家提交的数字,并将结果反馈给各玩家,玩家可以通过客户端提交的数字;
3、如果采用单机方式实现的话,需要为用户提供便利的输入界面;
4、该游戏每次至少可以运行10轮以上,并能够保留各轮比赛结果。
二.讨论过程:
本次试验我们采取的是结对编程,在本次试验过程中十分感谢“隔壁老王”王鑫,本次试验由于我和搭档都没有学习过C/S或B/S,现学来不及所以我们在讨论过后,便商量还是使用我们最熟悉的c语言来实现单击过程,游戏过程尽量简便为主,在编写过程中不太会进行轮次输入与人数在判断时的运算,是同学讲解后我们才会的,由于是一男一女所以在编程时不太方便,我们尽量通过网上讨论的方式解决了我们遇到的一些小困难。
设计过程:
在本次结对编程过程中,由于需要输入轮次和认读,所以我们使用了好多次的for循环语句;首先在输入人数时,运用for循环输入。在判断大小值的时候我想到了运用函数比较大小 for(i=0;i<N;i++)
int f(int*s) { int j,t,i; for(i=0;i<N-1;i++) { for(j=0;j<N-1;j++) if(s[j]>s[j+1]) { t=s[j]; s[j]=s[j+1]; s[j+1]=t; } } return s[i];} 。
运用这段代码实现最大值查找以及实现分数的赋值
在判断G值过程中刚开始是自己编写的
double G(int a, int fabs[]) { double sum, ave, g; sum = 0.0; for (int i = 0; i < a; i++) { sum = fabs[i] + sum; } ave = sum / a; g = ave*0.618; return(g); }
后来同学说可以使用#include<math.h>下fabs函数进行绝对值运算。
最后在运行完一轮过后,必须重新赋初值,否则初值会带到第二轮中,影响G值得结果。最后通过
scanf("%s",&y);
判断是否进行下一次输出,如果是就将while循环进行重新运行,否则输入任意字符跳出。
将最高分赋值过student[i]
for(i=0;i<n;i++) { if(student[i]>maxscore) { maxscore=student[i]; } }
最后输出结果。
三.过程遇见问题:
1.在判断最接近G值时,函数编写错误
for (i = 0; i < b; i++) { if (min > S1[i]){ min = S1[i]; } if (S1[i] == min){ S2[i] = b; printf("第%d位小朋友得%d分", i, S2[i]); } }
2.在运算第二次求G值的时候,输入同样的数,G值变成两倍最后才发现在第二次求值的时候必须将初始值赋予初始化
3.还有许多如拉掉分号,花括号之类的问题。
四.运行过程:
第二次:
五.合作拍照:
l六.感悟:本次结对编程。我发现了许多不足,首先是在函数编写上,好多基础知识都忘记了,在查看了书籍之后我才完成了此次函数的编写。其次本次结对编程我是和女生一起,可能是屌丝本性,让我在编程过程中好多问题不好意思问我搭档蔡丽娟,倒是我的搭档十分大方,让我在编写过程中省去好多麻烦。另外在本次编写我发现了自己编写语言的匮乏,好多同学他们都做了界面,但是我却不会,只有眼馋别人界面漂亮。在这次试验过后,我想要学习一下Java语言来加深自己的编程能力,我们是已经大三的学生党了,现在已经有企业来找我们实习了。在今后我们不能再这样得过且过了,应该努力学习哪怕是为了自己。
最后代码已经存入coding。