原题,完成校际运动会成绩管理功能,包括输入比赛项目event及参赛学校名字name,输入比赛成绩score,参赛选手名字person,项目名次rank,计算总分sum,其中,sum为score加上项目的加分。
各项目名次取法有如下几种:
项目一:取前5名:第1名得分7,第2名得分5,第3名得分3,第4名得分2,第5名得分1;其余名次不加分。
项目二:取前3名:第1名得分5,第2名得分3,第3名得分2;其余名次不加分。
输出第一所学校的score和sum。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN sizeof(struct School)
struct School
{int event;
char name[20];
int score;
char person[20];
int rank;
int sum;
struct School *next;
};
static int n;
struct School *creat(void)
{struct School *head;
struct School *p1,*p2,*a[100];
n=0;
p1=p2=(struct School *)malloc(LEN);
head=NULL;
while(p1->event!=0)
{n=n+1;
if(n==1)a[0]=head=p1;
else p2->next=p1;
p2=p1;
p1=(struct School *)malloc(LEN);
printf("the event is:(put 0 end the putting of school):");
scanf("%d",&p1->event);
printf("school name:");
getchar();
gets(p1->name);
printf("school score:");
scanf("%d",&p1->score);
printf("person name:");
getchar();
gets(p1->person);
printf("school rank:");
scanf("%d",&p1->rank);
switch(p1->event)
{case 0:p1->sum=p1->score;break;
case 1:
{switch(p1->rank)
{case 1:p1->sum=p1->score+7;break;
case 2:p1->sum=p1->score+5;break;
case 3:p1->sum=p1->score+3;break;
case 4:p1->sum=p1->score+2;break;
case 5:p1->sum=p1->score+1;break;
default:p1->sum=p1->score;}}break;
case 2:
{switch(p1->rank)
{case 1:p1->sum=p1->score+5;break;
case 2:p1->sum=p1->score+3;break;
case 3:p1->sum=p1->score+2;break;
default:p1->sum=p1->score;}}break;
default:p1->sum=p1->score;
}
}
p2->next=NULL;
return(a[0]);
}
int main()
{struct School *pt;
pt=creat();
printf("\nscore:%d\nsum:%d\n",pt->score,pt->sum);
return 0;
}
输入的score是123,event 为1,rank为1.输出的score总是一个很大的数据15564562,输出的sum 也很大,1123
5578.求教为什么?
BlueCitizen
BlueCitizen
相关分类