6-7 学生成绩的统计
有N名学生,每个学生的数据包括学号、姓名、数学成绩、语文成绩,从键盘输入N名学生的数据,并计算出每个学生的平均成绩,最后显示最高平均分的学生的信息,包括学号,姓名,两门课的成绩,平均分数(保留小数点后一位)。需要完成两个函数;
函数接口定义:
void InputData(STU *p,int num);
STU *FindMaxIndex(STU *p,int num);
裁判测试程序样例:
在这里给出函数被调用进行测试的例子。例如:
#include <stdio.h>
#define N 5
typedef struct
{
int id;
char name[20];
int math;
int chinese;
double aver;
}STU;
void InputData(STU *p,int num);
STU *FindMaxIndex(STU *p,int num);
int main(void)
{
STU classone[N];
STU *pmax;
InputData(classone,N);
pmax=FindMaxIndex(classone,N);
printf("maxinfo:%d %s %d %d %.1f\n",pmax->id,pmax->name,pmax->math,pmax->chinese,pmax->aver);
return 0;
}
/* 请在这里填写答案 */
输入样例:
2 张 78 34
1 李 67 89
4 王 90 67
3 刘 85 95
5 赵 56 89
输出样例:
maxinfo:3 刘 85 95 90.0
答案代码:
void InputData(STU *p,int num)
{
int i;
for (i=0;i<num;i++)
{
scanf ("%d %s %d %d",&p[i].id,p[i].name,&p[i].math,&p[i].chinese);
p[i].aver=(p[i].math+p[i].chinese)*1.0/2; //计算平均分
}
}
STU *FindMaxIndex(STU *p,int num) //注意返回类型为指针
{
int i;
STU *max=&p[0]; //定义指针便于return,我不知道为什么,如果直接定义结构体最后返回其地址的话是错的
for (i=0;i<num;i++)
{
if (p[i].aver>max->aver) max=&p[i]; //max为指针,所以这里为'->'符号
//也可以这样写(*max).aver,但注意要加上这个括号
}
return max;
}
另外有没有大佬可以帮忙解释一下, 第二个函数中,为什么,如果直接定义结构体最后返回其地址的话是错
第二个函数错误代码示范:
//注意,这是错误示范//
STU *FindMaxIndex(STU *p,int num)
{
int i;
STU max=p[0];
for (i=0;i<num;i++)
{
if (p[i].aver>max.aver) max=p[i];
}
return &max; //返回地址
}