例 9.7 有n个结构体变量,内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)。

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);
}

猜你喜欢

转载自blog.csdn.net/navicheung/article/details/79650938