c语言程序设计--保龄球计分系统,绝对可用,完美测试
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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) {