修改如下,供参考:
#include <stdio.h>
#include <stdlib.h>
/***********Begin***********/
struct birthday{
int year;
int month;
int day;
};
struct STUDENT{
long num;
char name[11];
char sex[5];
struct birthday bir;
float score[4],total,average,rank;
};
/***********End*************/
void Input(struct STUDENT *stud, int n);
void Print(struct STUDENT *stud, int n);
void TotalAndAverage(struct STUDENT *stud, int n);
void RankByTotal(struct STUDENT *stud, int n);
int main()
{
int n;
/***********Begin***********/
printf("Input n(n<=30):");
scanf("%d",&n);
struct STUDENT *stud=(struct STUDENT *)malloc(n*sizeof(struct STUDENT));
Input(stud, n);
TotalAndAverage(stud, n);
RankByTotal(stud, n);
Print(stud, n);
/***********End*************/
return 0;
}
void Input(struct STUDENT *stud, int n)
{
/***********Begin***********/
for(int i=0;i<n;i++){
scanf("%ld %s %s %d %d %d ", &stud[i].num, stud[i].name, stud[i].sex,
&stud[i].bir.year,&stud[i].bir.month,&stud[i].bir.day);
for(int j=0;j<4;j++)
scanf("%f", &stud[i].score[j]);
}
/***********End*************/
}
void Print(struct STUDENT *stud, int n)
{
printf("%8s%12s%10s%11s%10s%10s%10s%10s%10s%10s%5s\n",
"NO.","Name","Sex","Birthday","Computer",
"English","Math","Music","Total","Average","Rank");
for(int i=0;i<n;i++)
{
printf("%8ld%12s%10s%5d%3d%3d",stud[i].num,stud[i].name,stud[i].sex,
stud[i].bir.year,stud[i].bir.month,stud[i].bir.day);
for(int j=0;j<4;j++)
printf("%10.0f",stud[i].score[j]);
printf("%10.0f%10.0f%5.0f\n",stud[i].total,stud[i].average,stud[i].rank);
}
}
void TotalAndAverage(struct STUDENT *stud, int n)
{
/***********Begin***********/
float x=0;
for(int i=0;i<n;i++){
x=0;
for(int j=0;j<4;j++){
x=(*stud).score[j]+x;
}
(*stud).total=x;
x=x/4.0;
(*stud).average=x;
stud++;
}
/***********End*************/
}
void RankByTotal(struct STUDENT *stud, int n)
{
/***********Begin***********/
int i,j,k;
int *tmp=(int *)malloc(sizeof(int)*n);
for(i = 0;i < n; i++) tmp[i] = 0;
for (i = 0; i < n - 1; i++)
for (j = i + 1; j < n; j++)
if (stud[i].total == stud[j].total)
tmp[i]++;
for (i = 0;i < n; i++){
for (j = 0, k = 1; j < n; j++)
if (tmp[j] == 0 && stud[i].total < stud[j].total) k++;
stud[i].rank = k;
}
free(tmp);
/***********End*************/
}