C程序设计(第四版) 谭浩强 例9.7 个人设计
例 9.7 有n个结构体变量,内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)。
代码块:
#include <stdio.h>
//定义结构体变量并初始化
struct student{
int num;
char name[10];
float score[3];
float aver;
} stu[3];
void input(struct student stu[]); //定义输入函数
struct student max(struct student stu[]); //定义最高成绩函数
void print(struct student stud); //定义输出函数
int main()
{
struct student *p=stu; //定义指针指向结构体变量首地址
input(p); //调用输入函数
print(max(p)); //调用输出函数
return 0;
}
//输入函数
void input(struct student stu[])
{
int i, j;
float sum;
for (i=0; i<3; i++){
printf("Please enter No.%d student num, name, score: ", i+1);
scanf("%d %s", &stu[i].num, stu[i].name);
for (j=0, sum=0.0; j<3; scanf("%f", &stu[i].score[j]), sum+=stu[i].score[j++]);
stu[i].aver=sum/3.0;
}
}
//最高成绩函数
struct student max(struct student stu[])
{
int i, j;
struct student temp;
for (i=0; i<3; i++)
for (j=i+1; j<3; stu[i].aver<stu[j].aver ? temp=stu[i], stu[i]=stu[j], stu[j]=temp, j++ : j++);
return stu[0];
}
//输出函数
void print(struct student stud)
{
int i;
printf("The higheset score student:\n");
printf("%d %s ", stud.num, stud.name);
for (i=0; i<3; printf("%.2f ", stud.score[i++]));
printf("Average=%.2f\n", stud.aver);
}