方法一: 数组法
#include
#include
struct Student{
long int num;
float score[3];//存储三门课的成绩
float aver;//三门课成绩的平均值
};
struct Node{
// struct Student stu[3];多余的
struct Node *next;
};
int main(){
struct Student stu[1000];//定义一个足够大的数组用来存放数据
struct Node *n,*p,*head=NULL;
int m;
printf("请输入学生总人数:");
scanf("%d",&m);
for(int i=0;inext=n;//让第二个结点链接到第一个结点的next中
p=n;//将n的地址传过去
}
}
int i,t=0;
for(i=0;istu[i].aver)
t=i+1;
printf("平均成绩最大的同学的信息为:\n");
printf("学号:%6ld\n",stu[t].num);
printf("三门课的成绩:%6.1f %6.1f %6.1f\n",stu[t].score[0],stu[t].score[1],stu[t].score[2]);
printf("平均成绩:%6.2f\n",stu[t].aver);
}
输出显示:
请输入学生总人数:5
请输入第1个学生的学号和三门课成绩:2019001 89 67 98
请输入第2个学生的学号和三门课成绩:2019002 67 78 59
请输入第3个学生的学号和三门课成绩:2019003 89 88 98
请输入第4个学生的学号和三门课成绩:2019004 67 76 86
请输入第5个学生的学号和三门课成绩:2019005 78 56 67
平均成绩最大的同学的信息为:
学号:2019003
三门课的成绩: 89.0 88.0 98.0
平均成绩: 91.67
方法二: 指针法
#include
#include
void average(struct Student *p1,int k,struct Node *n,struct Node *head,struct Node *p);
int max(struct Student *p,int k);
void pus(struct Student *p,int t);
struct Student{
long int num;
float score[3];//存储三门课的成绩
float aver;//三门课成绩的平均值
};
struct Node{
struct Node *next;
};
int main()
{
struct Student stu[1000];//定义一个足够大的数组用来存放数据
struct Student *p1=stu;
struct Node *n,*p,*head=NULL;
int m;
printf("请输入学生总人数:");
scanf("%d",&m);
average(p1,m,n,head,p);
pus(p1,max(p1,m));
}
void average(struct Student *p1,int k,struct Node *n,struct Node *head,struct Node *p)//定义一个求平均值的函数
{
for(int i=0;inext=n;//让第二个结点链接到第一个结点的next中
p=n;//将n的地址传过去
}
}
}
int max(struct Student *p,int k)//定义一个求最大值的函数
{
int i;int t=0;
for(i=0;i(*(p+i)).aver)
t=1+i;
return t;
}
void pus(struct Student *p,int t)//定义一个输出的函数
{
printf("平均成绩最大的同学的信息为:\n");
printf("学号:%6ld\n",(*(p+t)).num);
printf("三门课的成绩:%6.1f %6.1f %6.1f\n",(*(p+t)).score[0],(*(p+t)).score[1],(*(p+t)).score[2]);
printf("平均成绩:%6.2f\n",(*(p+t)).aver);
}
输出显示:
请输入学生总人数:3
请输入第1个学生的学号和三门课成绩:123 34 45 67
请输入第2个学生的学号和三门课成绩:233 45 67 97
请输入第3个学生的学号和三门课成绩:323 46 78 99
平均成绩最大的同学的信息为:
学号: 323
三门课的成绩: 46.0 78.0 99.0
平均成绩: 74.33
方法二(优化版)
因为向average函数传参的参数太多,容易混淆,所以进行改进
直接将定义在main函数中的变量定义在average函数中直接使用,无需传参,更加方便
#include
#include
void average(struct Student *p1,int k);
int max(struct Student *p,int k);
void pus(struct Student *p,int t);
struct Student{
long int num;
float score[3];//存储三门课的成绩
float aver;//三门课成绩的平均值
};
struct Node{
struct Node *next;
};
int main()
{
struct Student stu[1000];//定义一个足够大的数组用来存放数据
struct Student *p1=stu;
struct Node *n,*p,*head=NULL;
int m;
printf("请输入学生总人数:");
scanf("%d",&m);
average(p1,m);
pus(p1,max(p1,m));
}
void average(struct Student *p1,int k)//定义一个求平均值的函数
{
struct Node *n,*p,*head=NULL;
for(int i=0;inext=n;//让第二个结点链接到第一个结点的next中
p=n;//将n的地址传过去
}
}
}
int max(struct Student *p,int k)//定义一个求最大值的函数
{
int i;int t=0;
for(i=0;i(*(p+i)).aver)
t=1+i;
return t;
}
void pus(struct Student *p,int t)//定义一个输出的函数
{
printf("平均成绩最大的同学的信息为:\n");
printf("学号:%6ld\n",(*(p+t)).num);
printf("三门课的成绩:%6.1f %6.1f %6.1f\n",(*(p+t)).score[0],(*(p+t)).score[1],(*(p+t)).score[2]);
printf("平均成绩:%6.2f\n",(*(p+t)).aver);
}
输出显示:
请输入学生总人数:2
请输入第1个学生的学号和三门课成绩:2019000 68 98.3 89.4
请输入第2个学生的学号和三门课成绩:2019111 98 45.6 56.7
平均成绩最大的同学的信息为:
学号:2019000
三门课的成绩: 68.0 98.3 89.4
平均成绩: 85.23