#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 10 /*N值为所有学生数,可更改*/
#define M 5 /*M值为所有科目数*/
struct STUDENT
{ char num[6];
char name[10];
float score[M];
float sum;
float ave;
}*p;
void input(struct STUDENT *p,int i)
{
int j;
printf(" \n 请输入第%d个学生的数据(共%d个) \n ",i+1,N);
printf(" \n >>学号 : ");
scanf("%s",p->num);
printf(" \n >>姓名 : ");
scanf("%s",p->name);
for(j=0;j<M;j++)
{
printf(" \n >>Score %d : ",j+1);
scanf("%f",&p->score[j]);
}
printf(" \n *********************************************************** \n ");
}
void average(struct STUDENT *p)
{
int i;
float a=0;
for(i=0;i<M;i++)
a+=p->score[i];
p->sum=a;
p->ave=p->sum/i;
}
void print(struct STUDENT *p)
{
int j;
printf("%s\t%s\t",p->num,p->name);
for(j=0;j<M;j++)
printf("%.3f\t",p->score[j]);
printf("%.3f\t%.3f \n ",p->sum,p->ave);
printf(" \n ");
}
void maximum(struct STUDENT stu[N])
{
float max;
int i,j;
struct STUDENT s[N],*q,*r;
q=stu;
max=stu[1].ave;
for(;q<stu+N;q++)
{
if(q->ave>max)
{
max=q->ave;
r=q;
}
else r=q;
}
for(i=0,j=0;i<N;q++,i++)
{
if(stu[i].ave==max)
{
s[j]=stu[i];
j++;
}
}
printf(" \n 2.平均分最高的学生共%d个;其信息为 : \n ",j);
for(i=0;i<j;i++)
printf(" \n 学号 : %s , 姓名 : %s , 平均分 : %.3f \n ",s[i].num,s[i].name,s[i].ave);
printf("\n");
}
void ScoreAverage(struct STUDENT stu[N])
{
float sa[M],s;
int i,j;
for(i=0;i<M;i++)
{
s=0;
for(j=0;j<N;j++)
s+=stu[j].score[i];
sa[i]=s/N;
}
printf(" \n 3.每一科的平均分为 : \n \n ");
for(i=0;i<M;i++)
printf(" Score %d \t ",i+1);
printf(" \n \n ");
for(i=0;i<M;i++)
printf(" %.3f \t ",sa[i]);
printf(" \n \n ");
}
int main()
{
int i;
float s=0,a;
struct STUDENT stu[N],*p,*q;
p=stu;
printf("\n*************************欢迎使用学生成绩管理系统!************************\n");
for(i=0;p<stu+N;i++,p++)
{
input(p,i);
average(p);
s+=p->sum;
}
a=s/(M*N);
printf(" \n 1.所有学生的情况 : \n");
printf(" \n 学号\t姓名\t");
for(i=0;i<M;i++)
printf("Score%d\t",i+1);
printf("总分\t平均分 \n \n ");
for(q=stu;q<stu+N;q++)
print(q);
maximum(stu);
ScoreAverage(stu);
printf(" \n 4.总平均分为 : %.3f\n\n\n ",a);
system("pause");
return 0;
}