c语言程序设计--保龄球计分系统,绝对可用,完美测试

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include"stdio.h"

#include"stdlib.h"

int totscore();

void paixu(struct people st[],int n);/*排序函数*/

struct people

{ int num;

int score;

};/*定义结构体存储人和其对应的分数*/

int K=1;

void main()

{

int J;

printf("第%d局比赛成绩录入:\n",K);

printf("\n");

FILE *fp;/* FILE *fp 是声明,声明fp是指针,用来指向FILE类型的对象*/ int i,n;/*n是参加比赛人数*/

struct people st[80];

puts("------请输入总人数:");

scanf("%d",&n);

for(i=0;i

{

printf(" 请输入第%d人击倒的瓶数\n",i+1);

st[i].num=i+1;

st[i].score= totscore();/*引用结构体元素的形式a[i].b*/

}

for(i=0;i

{ printf("\n");

printf("第%d人击倒的瓶数是:%d\n",st[i].num,st[i].score);

printf("\n");

}

/*将存储后的数据排序*/

paixu(st,n);

puts("======================排序后========================");

printf("\n");

printf("第%d局的比赛结果排序情况:\n",K);

printf(" 排名\t 选手\t 得分\n");

printf("\n");

for(i=0;i

{ printf("第%d名\t 第%d人\t %d\n",i+1,st[i].num,st[i].score);

printf("\n");

}

/*排序后的结果存储到Result.txt */

if((fp=fopen("Result.txt","a+"))==NULL)

{

puts("====不能打开文件====");

exit(0);

}

/* int fprintf( FILE *stream, const char *format, ... );

fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件. fprintf()只能和printf()一样工作. fprintf()的返回值是输出的字符数,发生错误时返回一个负值. */

fprintf(fp,"以下是第%d局比赛结果的排名:",K);

fprintf(fp,"\n");

fprintf(fp," 排名\t 选手\t 得分\n");

for(i=0;i

{

fprintf(fp,"第%d名\t 第%d人\t %d\n",i+1,st[i].num,st[i].score);

fprintf(fp,"\n");

}

fclose(fp);

K++;

printf("是否继续录入下一局数据?1/0");

printf("\n");

scanf("%d",&J);

while((J!=1)&&(J!=0))

{

printf("输入错误,请重新输入:1/0 ?");

scanf("%d",&J);

}

printf("\n");

printf("\n");

if(J==1)

{

main();

}

else

{system("Result.txt");

system("pause"); /*使输出窗口暂停*/

}

}

/*排序子函数,实现以总分为标准,将结构体成员按分数降序排列*/

void paixu(struct people st[],int n)

{ int i,j;

struct people t;/*声明中间量t也是结构体*/

for(i=0;i

for(j=i+1;j

{

if(st[i].score

{ t=st[i];

st[i]=st[j];

st[j]=t;

}

}

}

/*求每局总分数的子函数*/

int totscore()

{

int a[19][5],i,j,t,m,k,x,q,w,sum=0,y=0,r=0,p=0;

/*i控制第几轮数目,j控制第几次数目,t为寄存第一次击倒瓶子数变量,m为第二次击倒瓶子数变量,k为第十轮第三次击倒瓶子数目变量,x为寄存k的变量,最后要t+m+x统计第十轮总数*/

for(i=1;i<=10;i++)

{

for(j=0;j<1;)/*用i表示第i轮,j表示第i轮的第(j+1)次*/

{

printf(" 请输入第%d轮第一次击倒的瓶数:\n",i);

puts("------注意输入击倒的瓶数不要高于10------");

scanf("%d",&a[i][j]);

/*上面是第i论的(j+1)次击球数目,根据第一次的击球数又分为下面三种情况决定第二次击球,主要讨论a[i][j]<=0两种情况*/

while(a[i][j]>10)

{

printf("error数值溢出,请重新输入第%d轮第一次击倒的瓶数:\n",i);

puts(" ------请输入击倒的瓶数不要大于10-----");

scanf("%d",& a[i][j]);

}

t=a[i][j];

/*只有数据正确才会脱离while语句,

赋值给变量t,放便于数据的变化,

而数组专门用来存放每轮每次的击倒球数目,所以具体分以下两种情况*/

/*情况一,第一次击球少于10个时*/

if(a[i][j]<10)

{

相关文档
最新文档