函数名自己改下,这是我以前写的。你就自己参考一下就算了
#include<stdio.h>
#include<stdlib.h>
#define NUM1 3 // 学生人数
#define NUM2 3 //统计科目
struct student //定义了个struct student
结构体{long num; //
学号 char name[5]; //姓名
float score[NUM2]; //统计科目的分数
float stu_aver; //一个(某个)学生的平均成绩
};
void input(struct student *pstu) //
自定义输入函数input
{int i;
printf("请输入相关学生的信息:\n");
printf("学号 姓名 语文 数学 外语\n");
for(i=0;i<NUM1;i++,pstu++)
{ scanf("%ld%s%f%f%f",&pstu->num,pstu->name,&pstu->score[0],&pstu->score[1],&pstu->score[2]);
printf("\n");
}
}
void output(struct student *pstu,float *psub, int x) //自定义输出函数
{int i; struct student *p=pstu;
printf("每个学生的平均分如下:\n");
for(i=0;i<NUM1;i++,pstu++)
printf("%5s%10.2f\n",pstu->name,pstu->stu_aver);
pstu=p; //将pstu置原,若不置原,会影响后面的输出,值得注意
printf("其中平均分最大的是:%s %.2f \n", (pstu+x)->name,(pstu+x)->stu_aver); //x表示:序号为x的学生的
平均值最大
printf("该班的各科平均成绩依次如下:\n");
for(i=0;i<NUM2;i++,psub++)
printf("%.2f\n",*psub);
return;
}
void stu_aver(struct student *pstu) //自定义“学生平均成绩”函数
{ int i;
for( i=0;i<NUM1;i++,pstu++)
pstu->stu_aver=(pstu->score[0]+pstu->score[1]+pstu->score[2])/NUM2;
}
void sub_avermain(struct student *pstu,float *psub) //自定义“科目平均成绩”函数
{ int i;
for( i=0;i<NUM2;i++,psub++)
*psub=(pstu->score[i]+(pstu+1)->score[i]+(pstu+2)->score[i])/NUM1;
}
int max_stu_aver(struct student *pstu) //自定义“最大学生平均成绩”函数
{int i,k=0; //注意,k要预先赋初始值为0.
float max;
max=pstu->stu_aver;
for(i=0;i<NUM1;i++,pstu++)
if(pstu->stu_aver>max) //注意,
if语句有可能不执行,所以,k要预先赋初始值0
{max=pstu->stu_aver;k=i;}
return(k);
}
int main()
{
int m;
float sub_aver[NUM2];
float *psub;
struct student stu[NUM1],*pstu;
pstu=stu;
psub=&sub_aver[0];
input(pstu); //注意下面的pstu每调用完,要置原
pstu=stu;
stu_aver(pstu);
pstu=stu;
sub_avermain(pstu,psub);
pstu=stu;psub=&sub_aver[0];
m=max_stu_aver(pstu);
pstu=stu;
output(pstu,psub,m);
return 0;
}