1. 程式人生 > >C語言 黃金點遊戲

C語言 黃金點遊戲

eof i++ 重復 size strcpy_s ++ == math 打印

  今天用C語言把這個寫出來了,雖然c不是很熟,寫的還是蠻簡單,目前還想寫一個判斷輸入數字是否重復,重復就需要重新輸入,由於時間原因,還沒有寫。

  代碼:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
//存儲信息的結構體 typedef struct scoreNode{ double score; char name[10]; struct scoreNode *next; }scoreNode,*scoreLink; //尋找與黃金點相隔最近與最遠的人(目前還沒考慮輸入數字相同的情況)最近加一分 最遠減一分 void findM(scoreNode *inLink,scoreNode *scLink,double aver){ char name[10];//存儲最近人姓名 char name1[10];//存儲最遠 double temp0,temp1; scoreNode *p=NULL; p=scLink; temp0=temp1=fabs(inLink->score-aver); strcpy_s(name,strlen(inLink->name)+1,inLink->name); strcpy_s(name,strlen(inLink->name)+1,inLink->name); inLink=inLink->next; //printf("%lf\n",inLink->score); while(inLink){ double temp2=fabs(inLink->score-aver); if(temp0>temp2){ temp0=temp2; strcpy_s(name,strlen(inLink->name)+1,inLink->name); } if(temp1<temp2){ temp1=temp2; strcpy_s(name1,strlen(inLink->name)+1,inLink->name); } inLink=inLink->next; } while(scLink){ if(strcmp(name,scLink->name)==0){ scLink->score=scLink->score+1; } if(strcmp(name1,scLink->name)==0){ scLink->score=scLink->score-1; } scLink=scLink->next; } //打印輸出 while(p){ printf("%s的得分為:%lf\n",p->name,p->score); p=p->next; } } void goldPoint(){ int num; int time; double sum=0; double aver; int i; scoreNode *head,*p,*q,*head0,*q0,*p0; head=NULL; head0=NULL; q=NULL; q=head; q0=head0; printf("請輸入參加的人數:\n"); scanf_s("%d",&num); printf("請輸入需要進行幾輪:\n"); scanf_s("%d",&time); printf("第1輪開始\n");
//第一輪需要咩個人輸入自己的名字 和自己的數字 for(i=0;i<num;i++){ p=(scoreNode *)malloc(sizeof(scoreNode)); p0=(scoreNode *)malloc(sizeof(scoreNode)); printf("請輸入你的名字:\n"); scanf_s("%s",p->name,sizeof(p->name)); printf("請輸入你的分數:\n"); scanf_s("%lf",&p->score,sizeof(p->score)); p0->next=NULL; p->next=NULL; if(head==NULL){ head=p; q=p; }else{ q->next=p; q=p; } sum+=p->score;
//初始化存放分數的鏈表 strcpy_s(p0->name,strlen(p->name)+1,p->name); p0->score=0; if(head0==NULL){ head0=p0; q0=p0; }else{ q0->next=p0; q0=p0; } } aver=sum/num*0.618; printf("aver=%lf\n",aver); q=head; q0=head0; findM(q,q0,aver); sum=0; printf("第1輪結束\n"); for(i=0;i<time-1;i++){ printf("第%d輪開始\n",(i+2)); q=head; while(q){ printf("%s請輸入你的分數:\n",q->name); scanf_s("%lf",&q->score); sum+=q->score; q=q->next; } aver=sum/num*0.618; q=head; q0=head0; findM(q,q0,aver); sum=0; printf("第%d輪結束\n",(i+2)); } printf("遊戲結束\n"); } void main(){ goldPoint(); }

  

C語言 黃金點遊戲