用结构体变量和结构体变量的指针作函数参数
练习:
有n个结构体变量,内含学生学号、姓名和3门课程的成绩。
要求:输出平均成绩最高的学生的信息(包含学号、姓名、3门课程成绩和平均成绩)
思路:
按照功能函数化的思路,分别用3个函数来实现不同的功能:
1、用input 函数来输入数据和求各个学生的平均成绩;
2、用max 函数来找平均成绩最高的学生;
用printf函数输出成绩最高学生的成绩
# include<stdio.h>
# define N 3
//定义结构体数组
struct Student {
int num;
char name[20];
double score[3]; //3门课的成绩
double aver; //求平均值
};
//定义input函数
void input(struct Student stu[ ])
{
int i;
printf("请输入各学生信息:学号、姓名、3门课程的成绩");
for (i = 0; i < N; i++)
{
//输入各学生的信息
scanf_s("%d %s %lf %lf %lf",&stu[i].num,&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.0;
}
}
//定义max函数
struct Student max(struct Student stu[])
{
int i, m = 0; // m 存放成绩最高的学生在数组中序号
for (i = 0; i < N; i++)
{
//找出平均成绩最高的学生在数组中的序号
if (stu[i].aver > stu[i].aver)
m = i;
return stu[m];
}
}
//定义printf函数
void printf(struct Student stu[])
{
printf("\n成绩最高的学生是:\n");
printf("\n学号:%d\n姓名:%s\n三门成绩:%5.lf,%5.lf,%5.lf\n 平均成绩:%6.2f\n",
stu->num,stu->name,stu->score[0],stu->score[1],stu->score[2],stu->aver
);
}
int main()
{
void input(struct Student stu[]);
struct Student max(struct Student stu[]);
void printf(struct Student stu);
struct Student stu[N], * p = stu; //定义结构体数组和指针
input(p);// 调用input函数
printf(max(p)); //调用printf函数,以max函数的返回值作为实参
return 0;
}