這次結對編程的作業中,我的隊友是郭光耀,他的博客地址是http://home.cnblogs.com/u/guoguangyao/。
1、要求:
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輪以上,并能夠保留各輪比賽結果。
2、討論過程:
本次試驗我們采取的是結對編程的方式,我和我們班郭光耀一起結對編程,剛開始時由于學習習慣不太一樣,而且自習時間不統一,導致效率不是很高。但是經過幾天的編程,我們相互熟悉后,編程效率顯著提高,最終成功完成任務,同時我也感謝我們班其他同學在我們遇到困難時對我們的幫助。
設計過程:
本次代碼由于需要輸入需要的輪次以及人數,所以我們采取了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值過程中通過#include<math.h>頭文件下fabs絕對值來求取我們所需要的G值
最后在運行完一輪過后,必須重新賦初值,否則初值會帶到第二輪中,影響G值得結果。最后通過while 循環scanf("%s",&y);重新回到下一次的輸入
判斷是否進行下一次輸出。
將最高分賦值過student[i]
for(i=0;i<n;i++)
{
if(student[i]>maxscore)
{
maxscore=student[i];
}
}
最后輸出結果。
3、過程問題:
1.在判斷最接近G值時,沒加math.h文件,導致fabs沒辦法使用
2.在運算第二次求G值的時候,輸入同樣的數,G值變成兩倍最后才發現在第二次求值的時候必須將初始值賦予初始化
3.還有許多如拉掉分號,花括號之類的問題。
4、運行結果:
開始輸入數據以及第一次結果的截圖:
結束時的截圖:
5、合作拍照:
6、感悟:因為我們兩個人沒有學習過出c/s和b/s,所以我們在看見需要使用時,感到了自身學習的不足,在往后的日子里我將努力學習,努力提高自己的編程能力。另外在編寫代碼的時候,由于時間安排上的不同,所以在一起編寫代碼時間不是很多,所以遇到問題就經常通過qq在網上溝通商量。
最后代碼已經存入coding。
7、源程序代碼:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
double Sum(int a,int num[]);
void main()
{
system("color 3F");
int i,n,m,k ,G;
char y='Y';
int a=0, Max, student[10000],num[1000];
double b=0.0, min = 10000 , max = 1;
while(y=='Y')
{
Max=-1;
printf("請輸入游戲人數:");
scanf("%d",&n);
printf("請輸入游戲局數:");
scanf("%d",&m);
printf("***********************************游戲開始***********************************\n");
for(i=0;i<n;i++) //將得分數組賦值0
{
student[i]=0;
}
for(k=0;k<m;k++)//輸入學生數,并將分數求和
{
printf("第%d輪游戲:\n",k+1);
for(i=1;i<=n;i++)
{
printf("第%d個人的數字:",i);
scanf("%d",&num[i-1]);
a = num[i-1]+a;
}
printf("G值為:%.3f \n",b=a/n*0.618);
for(i=0;i<n;i++)
{
if(fabs(num[i]-b)<min) //fabs調用絕對值函數
{
min=fabs(num[i]-b);
}
}
for(i=0;i<n;i++)
{
if(fabs(num[i]-b)>max)
{
max=fabs(num[i]-b);
}
}
for(i=0;i<n;i++) //賦值
{
if(fabs(num[i]-b)==max)
{
student[i]=-2;
}
if(fabs(num[i]-b)==min)
{
student[i]=10;
}
if(fabs(num[i]-b)!=min&&fabs(num[i]-b)!=max)
{
student[i]=0;
}
}
a=0,b=0.0;
max=1,min=10000;
printf("每人得分是:\n");
for(i=0;i<n;i++)
{
printf("第%d位學生的得分為%d\n",i+1,student[i]);
}
}
for(i=0;i<n;i++) //找到最高分
{
if(student[i]>Max)
{
Max=student[i];
}
}
printf("\n");
printf("游戲結束!\n");
printf("恭喜得分為%d的同學獲勝!\n",Max); //輸出游戲結果
printf("\n");
printf("輸入“Y”繼續玩下去,否則輸入“不玩了”");
scanf("%s",&y);//繼續就發揮while函數
}
/*ave(double a)
{
double g,sum;
sum=a*0.618;
}*/
}
文章列表