问题描述
输入3个学生包含学号,姓名和三门课的成绩,中间以空格分开,然后输出最大平均分的那个学生的信息
代码
#include<stdio.h>
#include<string.h>
# define N 3
typedef struct Student{
long id;
char name[20];
float score[3];
float aver;
}Student;
//Student stu_1={10101,"张三",67,93,87.5};
//Student stu_2={10102,"李四",86,82,71};
//Student stu_3={10103,"王五",79,62,97};
void input(Student stu[]);//函数的声明
Student max(Student stu[]);
void print(Student stu);
int main()
{
int i,j;
Student stu[N],*p;
p=stu;//把首地址给p指针
input(p); //对input
print(max(p));//把p指针指向的传过去,其实stu[N]也可以
return 0;
}
void input(Student stu[])//先传入main里面创建的空的
{
int i;
for(i=0;i<N;i++){
printf("请输入学生的信息:学号、姓名、三门课的信息:");
scanf("%d %s %f %f %f",&stu[i].id,&stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
stu[i].aver= (stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;
}
}
Student max(Student stu[]){//不是任何类型,返回的是一个Student类
int i,m=0;
int max=0;
for(i=1;i<N;i++){
if(stu[i].aver>max){
max=stu[i].aver;
m=i;
}
}
return stu[m]; //返回对象
}
void print(Student stu){//此时的p指针只是指向那一个对象了
printf("学生学号:%d姓名:%s三门课成绩:%f %f %f\n",stu.id,stu.name,stu.score[0],stu.score[1],stu.score[2]);
printf("他最高的平均成绩是:%f\n",stu.aver);
}