#include
#include
#include
#include
#define n 5 /*设定,可更改*/
#define m 3 /*设定,可更改*/
#define w 2 /*设定,可更改*/
struct achievement /* 定义表示成绩的结构体 */
{int schoolnumber;/* 学校编号 */
char name[20]; /* 姓名 */
int mark; /* 分数 */
int result;};
struct pro /* 表示项目的结构体 */
{int tag;/* 项目编号 */
struct achievement ach[m+w];
int number;
};
struct Node
{struct pro date;
struct Node *next;
};
main()
{
int i,j,t;
int x[n]={0};int y[n]={0}; /* x[n]和y[n]分别表示男子和女子团体总分 */
struct Node *head;
struct Node *p;
struct Node *q;
if((head=(struct Node*)malloc(sizeof(struct Node)))==NULL) exit(1);
head->next=NULL; /* 初始化单链表 */
p=head;
for(i=0;i
j=i+1;
printf("请输入第%d个项目的信息\n",j);
p->date.number=j;
printf("所取的名次数为:");
scanf("%d",&p->date.tag);
while(p->date.tag!=3&&p->date.tag!=5)
{ printf("输入有误,请重新输入!");
getchar(); /*加入此函数避免输入错误时程序进入无限循环*/
getchar();
printf("所取的名次数为:");
scanf("%d",&p->date.tag);
}
t=1;
while(t<=p->date.tag)
{
printf("第%d名的名字:",t);
scanf("%s",p->date.ach[t-1].name);
printf("第%d名的学校:",t);
scanf("%d",&p->date.ach[t-1].schoolnumber);
printf("第%d名的分数:",t);
scanf("%d",&p->date.ach[t-1].mark);
p->date.ach[t-1].result=t;
t++;
}
if(j!=m+w)/* 注意这里 */
{q=(struct Node*)malloc(sizeof(struct Node)); /* 生成新结点 */
p->next=q;
p=q;
p->next=NULL;
}
}
for(i=0;i
j=i+1;
printf("\n学校%d成绩单:\n",j);
p=head;
while(p!=NULL)
{
t=1;
while(t<=p->date.tag)
{
if(p->date.ach[t-1].schoolnumber==j)
{
printf("获奖项目:%d ",p->date.number);
printf("名次:%d ",p->date.ach[t-1].result);
printf("获奖人姓名:%s ",p->date.ach[t-1].name);
printf("所得分数:%d \n",p->date.ach[t-1].mark);
if(p->date.number<=m)
x[i]=x[i]+p->date.ach[t-1].mark;
else
y[i]=y[i]+p->date.ach[t-1].mark;
}