好文档 - 专业文书写作范文服务资料分享网站

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

天下 分享 时间: 加入收藏 我要投稿 点赞

#include\#include\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\ printf(\

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

puts(\请输入总人数:\scanf(\

for(i=0;i

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

for(i=0;i

printf(\第%d人击倒的瓶数是:%d\\n\ printf(\ }

/*将存储后的数据排序*/ paixu(st,n); puts(\排序后========================\ printf(\ printf(\第%d局的比赛结果排序情况:\\n\ printf(\排名\\t 选手\\t 得分\\n\ printf(\ for(i=0;i

{ printf(\第%d名\\t 第%d人\\t %d\\n\ printf(\ }

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

if((fp=fopen(\ {

puts(\不能打开文件====\ exit(0); }

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

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

fprintf(fp,\以下是第%d局比赛结果的排名:\ fprintf(fp,\

fprintf(fp,\排名\\t 选手\\t 得分\\n\ for(i=0;i

fclose(fp); K++;

printf(\是否继续录入下一局数据?1/0\printf(\scanf(\

while((J!=1)&&(J!=0)) { printf(\输入错误,请重新输入:1/0 ?\ scanf(\}

printf(\printf(\if(J==1) {

main(); } else

{system(\

system(\使输出窗口暂停*/ } }

/*排序子函数,实现以总分为标准,将结构体成员按分数降序排列*/ void paixu(struct people st[],int n)

{ int i,j;

struct people t;/*声明中间量t也是结构体*/ for(i=0;i

/*求每局总分数的子函数*/ 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\ puts(\注意输入击倒的瓶数不要高于10------\ scanf(\

/*上面是第i论的(j+1)次击球数目,根据第一次的击球数又分为下面三种情况决定第二次击球,主要讨论a[i][j]<=0两种情况 */ while(a[i][j]>10) { printf(\数值溢出,请重新输入第%d轮第一次击倒的瓶数:\\n\ puts(\请输入击倒的瓶数不要大于10-----\ scanf(\ } t=a[i][j];

/*只有数据正确才会脱离while语句, 赋值给变量t,放便于数据的变化,

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

/*情况一,第一次击球少于10个时*/ if(a[i][j]<10) {

printf(\ 请输入第%d轮第二次击倒的瓶数:\\n\ printf(\注意输入击倒的瓶数不要高于%d------\\n\ j++;

/*此时下面这个a[i][j]已经是第i轮的第二次击球了, 并且又分为第十轮以下第十轮以上的情况*/

scanf(\ if(a[i][j]<=10-t) { m=a[i][j]; } else { while(a[i][j]>10-t) { printf(\数值溢出,请输入第%d轮第二次击倒的瓶数:\\n\ printf(\注意输入击倒的瓶数不要高于%d------\\n\ scanf(\ }/*如果输入的一直大于10-t就一直显示错误*/ m=a[i][j]; }

/*由于第10轮又有特殊情况,所以下面又加以区分:*/

if((m<=10-t)&&(i<10))/*在第十轮以下时,直接计算两次总和输出*/ { printf(\第%d轮击倒的瓶数是%d\\n\ printf(\ x=0; /*防止最后结果是随机数以下一样*/ } if((m<10-t)&&(i==10))

/*第十轮的第二次击球如果少于10-t个,

将失去第三次击球机会所以也是直接输出结果*/ { printf(\第%d轮击倒的瓶数是%d\\n\ printf(\ x=0; } if((m==10-t)&&(i==10)) /*第十轮第二次正好击倒10-t个瓶子, 则第十轮第一第二次总和为10瓶子,

所以获得第三次击球奖励,之后再计算三次总和*/

{ puts(\ 请再次输入一次击倒的瓶数\ puts(\输入击倒的瓶数不要大于10------\ scanf(\ if(k<=10) x=k;

/*引入K便于最后总分的计算, 因为只是希望数组a[i][j]存储两次的击球数目, 否则不利于总分的计算*/ else { while(k>10) { puts(\数据溢出,请再次输入一次击倒的瓶数:\ printf(\输入击倒的瓶数不要大于10------\ scanf(\ } x=k; } printf(\第%d轮击倒的瓶数是%d\\n\ printf(\ } }/*至此情况1完毕*/ /* 情形2,第一次击球就已经够10个时 */ if(t==10) /*t表示第一次的击球数目,在前面已经有写,这里注释提醒*/ { if(i==10)/*第10论的第一次击球够10个时*/ { puts(\ 输入额外的第一次击倒的瓶数:\ puts(\注意输入击倒的瓶数不要高于10 ------\ scanf(\ while(w>10) { puts(\数据溢出,请重新输入第一次额外击倒的瓶数:\ puts(\请输入击倒的瓶数不要大于10-----\ scanf(\ } if(w<=10) { y=w; if(y==10) { puts(\ 输入第二次额外击倒的瓶数!\

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

#include\#include\inttotscore();voidpaixu(structpeoplest[],intn);/*排序函数*/structpeople{intnum;intscore;};/*定义结构体存储人和其对应的分数*/intK=1;voidmain(){intJ;prin
推荐度:
点击下载文档文档为doc格式
706b1392we9pg7y7h9v4
领取福利

微信扫码领取福利

微信扫码分享