题目:有n个结构体变量,内含学生姓名、学号和三门课程的成绩。要求输出平均成绩最高的学生的全部信息。
实现的结果如下:
话不多说,直接代码解析!
第一步:定义和声明
//声明结构体变量类型 struct student { char name[20]; int num; float score[3]; float average; };
//定义输入函数input void input(struct student stu[]); //因为比较过后要返回值,所以我们定义struct student的函数 struct student max(struct student stu[]); //输出平均成绩最大的同学的信息,定义一个新的结构体变量stud来存放并输出 void print(struct student stud); //定义结构体数组,用于存放输入的数据 struct student stu[3];
第二步:输入函数
void input(struct student stu[]) { int i; printf("请录入信息:\n"); for(i=0;i<3;i++) { printf("请输入学生姓名、学号、三科成绩:"); scanf("%s%d%f%f%f",&stu[i].name,&stu[i].num,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]); //平均成绩需要计算,在输入时同时计算并记录平均成绩 stu[i].average=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0; } printf("\n"); }
第三步:比较函数
struct student max(struct student stu[]) { int i,m=0; for(i=0;i<3;i++) { //用平均成绩进行比较 if(stu[i].average>stu[m].average) { //记录这个同学的序号 m=i; } } //返回这个同学的stu全部信息 return stu[m]; }
第四步:输入函数
void print(struct student stud) { printf("平均成绩最高的学生信息为:\n"); //分开输出 printf("\t\t\t姓名:%s\n\t\t\t学号:%d\n\t\t\t成绩:%f %f %f\n\t\t\t平均成绩:%f\n",\ stud.name,stud.num,stud.score[0],stud.score[1],stud.score[2],stud.average); }
完整代码:
#include<stdio.h> struct student { char name[20]; int num; float score[3]; float average; }; int main() { void input(struct student stu[]); struct student max(struct student stu[]); void print(struct student stud); struct student stu[3]; input(stu); print(max(stu)); return 0; } void input(struct student stu[]) { int i; printf("请录入信息:\n"); for(i=0;i<3;i++) { printf("请输入学生姓名、学号、三科成绩:"); scanf("%s%d%f%f%f",&stu[i].name,&stu[i].num,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]); stu[i].average=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0; } printf("\n"); } struct student max(struct student stu[]) { int i,m=0; for(i=0;i<3;i++) { if(stu[i].average>stu[m].average) { m=i; } } return stu[m]; } void print(struct student stud) { printf("平均成绩最高的学生信息为:\n"); printf("\t\t\t姓名:%s\n\t\t\t学号:%d\n\t\t\t成绩:%f %f %f\n\t\t\t平均成绩:%f\n",\ stud.name,stud.num,stud.score[0],stud.score[1],stud.score[2],stud.average); }