**1.任务:**运用结构体、函数与指针,储存操作N个学生的信息(学号、姓名与成绩、平均分),并输出平均成绩最高的学生的信息。
2.功能函数:
- Input()函数:输入数据和求各个学生的平均成绩
- Max()函数:搜索平均成绩最高的学生
- Print()函数:输出平均成绩最高的学生的信息
3.运行结果:
4.源程序:
#include<stdio.h>
#define N 3//设定学生人数
#define K 3//设定学科数目
struct Student//定义结构体类型
{
int num;//学号
char name[20];//姓名
float score[K];//成绩
float aver;//平均分
};
struct Student stu[N];//定义结构体类型的数组
struct Student *p;//定义结构体类型指针
int main()
{
void Input();//函数声明
int Max();
void Print(int n);
int n;
Input();
n=Max();
Print(n);
return 0;
}
/**********输入函数,完成输入与平均值的计算**********/
void Input()
{
printf("请输入学生信息,学号、姓名、成绩:");
for(p=stu;p<stu+N;p++)//指针开始指向stu[0],然后是stu[1],……,stu[N]
{
scanf("%d%s%f%f%f",&(p->num),p->name,&(p->score[0]),&(p->score[1]),&(p->score[2]));//注意p->name本身就是地址
p->aver=((p->score[0])+(p->score[1])+(p->score[2]))/3;
}
}
/**********最大值函数**********/
int Max()
{
int i;
float max;
p=stu;
max=p->aver;//以stu[0].aver为比较的最初对象
for(i=0;p<stu+N;p++)
{
if((p->aver)>max)
{
max=p->aver;
i++;//计数
}
}
return i;
}
/**********输出函数**********/
void Print(int n)
{
p=stu+n;//定位最高的平均分
printf("成绩最高学生的信息为:\n");
printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->aver);
}