//包括计算机猜数和用户猜数两个功能。
//计算机猜数包括用户输入数(number)和计算机猜的数guess1以及正确与否。
//每个组属性包括:序号(num);计算机随机产生的数(magic),在1~100以内。
//每个数猜测次数(count),每个数允许猜10次;每个数猜测正误(correct),猜对为1,猜错为0。
//对计算机猜数结果输出。
//对5个人按猜测次数由小到大排序,输出结果列表。
//结果保存文件中。
#include
#include
#include
#include
struct game
{
int num;
int magic;
int count;
int correct;
};
struct data
{
int gues[10];
};
/*计算机猜数*/
void guess_number1(int number,int *guess1,char correct[],int n)
{
srand(time(NULL));
(*guess1)=rand()%100+1;
printf("计算机猜的数为:%d\n",*guess1);
if((*guess1)
{printf("结果:低\n");strcpy(correct,"低");}
else if((*guess1)>(number))
{printf("结果:高\n");strcpy(correct,"高");}
else
{printf("结果:正确\n");strcpy(correct,"正确");}
}
/*自定义猜数函数*/
void guess_number(int mag,int *coun,int *corr,int guess[],int n )
{
*coun=0;
*corr=0;
int i=0,j;
while((*coun)
{ printf("please guess a magic number:");
scanf("%d",&guess[i]);
(*coun)++;
if(guess[i]>mag)
printf("Wrong! Too big!\n");
else if (guess[i]
printf("Wrong! Too small!\n");
else
{ printf("Right!\n");
(*corr)=1;
break; }
i++;
}
for(j=i+1;j
guess[j]=0;
}
/*自定义按猜测次数排序函数,按猜的次数由少到多排列,(起泡法)*/
void sort(struct game person[],int n,struct data num[],int a )
{ int i,j;
struct game temp;
struct data t;
for(i=0;i
for(j=0;j
if(person[j].count>person[j+1].count)
{ temp=person[j];
person[j]=person[j+1];
person[j+1]=temp;
t=num[j];
num[j]=num[j+1];
num[j+1]=t;
}
}
/*自定义保存函数*/
void save(struct game person[],int n ,int number,int *guess1,char correct[],int t,struct data num[],int a)
{
FILE *fp;
int i,j;
if ( (fp=fopen("d:\\guess.txt", "w"))==NULL)
{
printf (" cannot open this file\n") ;
exit(0) ;
}
fprintf(fp,"用户输入的数 计算机猜的数 猜的对错 \n");
fprintf(fp,"%9d %13d %8s \n",number,*guess1,correct);
for(i=0;i<5;i++)
{ fprintf(fp,"编号 计算机产生数 猜的次数 猜的对错 \n");
fprintf (fp, "%3d %10d %12d %10d \n",person[i]. num, person[i]. magic, person[i]. count, person[i]. correct);
fprintf(fp,"你猜的数 \n");
for(j=0;j<10;j++)
fprintf (fp," %10d \n",num[i].gues[j]);
}
fclose(fp) ;
}
/*主函数*/
int main()
{
struct game person[5];
struct data num[5];
int i,j,k,t;
int number;
int guess1;
char correct[10];
while(1)
{ printf("请选择功能:输入1,计算机猜数;输入2,人猜数。\n");
scanf("%d",&k);
switch(k)
{case 1:printf("执行功能%d\n",k);
while(1)
{ printf("请输入1~100的任意数值。\n");
scanf("%d",&number);
guess_number1(number,&guess1,correct,10);
printf("是否继续进行计算机猜数,不是,输入1,是,键入其他数继续。\n");
scanf("%d",&j);
if(j==1)
break;} break;
case 2:printf("执行功能%d\n",k);
again:
srand(time(NULL));
for(i=0;i<5;i++)
{ person[i].num=i+1;
person[i].magic=rand()%100+1;
printf("\n计算机已产生第%d个数,请第%d个人猜数:\n",i+1,i+1);
guess_number(person[i].magic,&person[i].count,&person[i].correct,&num[i].gues[0],10);
}
printf("是否继续进行人猜数,是,输入1,不是,键入其他数继续。\n");
scanf("%d",&j);
if(j==1)
goto again;
break;
default:;
}
printf("是否结束猜数游戏,是,输入1,不是,键入其他数继续。\n");
scanf("%d",&t);
if(t==1)
break;
}
sort(person,5,num,5);
save(person,5,number,&guess1,correct,10,num,5);
printf("\n");
printf("功能1,计算机猜数结果:\n");
printf("用户输入的数 计算机猜的数 猜的对错 \n");
printf("%9d %9d %8s\n",number,guess1,correct);
printf("功能2,用户猜数结果:\n");
printf("编号 计算机产生数 猜的次数 猜的对错 \n");
for(i=0;i<5;i++)
printf("%3d %9d %10d %8d \n",person[i].num,person[i].magic,person[i].count,person[i].correct);
return 0;
}
01:46
一个字:我太难了。为了完成作业,熬了三个通宵,在家学习太难了,作业要求太变态了。好想开学。
举报/反馈