动态链表用数组法与指针法求——有n个结构体变量,内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)。

Maeve ·
更新时间:2024-11-14
· 981 次阅读

方法一: 数组法 #include #include struct Student{ long int num; float score[3];//存储三门课的成绩 float aver;//三门课成绩的平均值 }; struct Node{ // struct Student stu[3];多余的 struct Node *next; }; int main(){ struct Student stu[1000];//定义一个足够大的数组用来存放数据 struct Node *n,*p,*head=NULL; int m; printf("请输入学生总人数:"); scanf("%d",&m); for(int i=0;inext=n;//让第二个结点链接到第一个结点的next中 p=n;//将n的地址传过去 } } int i,t=0; for(i=0;istu[i].aver) t=i+1; printf("平均成绩最大的同学的信息为:\n"); printf("学号:%6ld\n",stu[t].num); printf("三门课的成绩:%6.1f %6.1f %6.1f\n",stu[t].score[0],stu[t].score[1],stu[t].score[2]); printf("平均成绩:%6.2f\n",stu[t].aver); } 输出显示: 请输入学生总人数:5 请输入第1个学生的学号和三门课成绩:2019001 89 67 98 请输入第2个学生的学号和三门课成绩:2019002 67 78 59 请输入第3个学生的学号和三门课成绩:2019003 89 88 98 请输入第4个学生的学号和三门课成绩:2019004 67 76 86 请输入第5个学生的学号和三门课成绩:2019005 78 56 67 平均成绩最大的同学的信息为: 学号:2019003 三门课的成绩: 89.0 88.0 98.0 平均成绩: 91.67 方法二: 指针法 #include #include void average(struct Student *p1,int k,struct Node *n,struct Node *head,struct Node *p); int max(struct Student *p,int k); void pus(struct Student *p,int t); struct Student{ long int num; float score[3];//存储三门课的成绩 float aver;//三门课成绩的平均值 }; struct Node{ struct Node *next; }; int main() { struct Student stu[1000];//定义一个足够大的数组用来存放数据 struct Student *p1=stu; struct Node *n,*p,*head=NULL; int m; printf("请输入学生总人数:"); scanf("%d",&m); average(p1,m,n,head,p); pus(p1,max(p1,m)); } void average(struct Student *p1,int k,struct Node *n,struct Node *head,struct Node *p)//定义一个求平均值的函数 { for(int i=0;inext=n;//让第二个结点链接到第一个结点的next中 p=n;//将n的地址传过去 } } } int max(struct Student *p,int k)//定义一个求最大值的函数 { int i;int t=0; for(i=0;i(*(p+i)).aver) t=1+i; return t; } void pus(struct Student *p,int t)//定义一个输出的函数 { printf("平均成绩最大的同学的信息为:\n"); printf("学号:%6ld\n",(*(p+t)).num); printf("三门课的成绩:%6.1f %6.1f %6.1f\n",(*(p+t)).score[0],(*(p+t)).score[1],(*(p+t)).score[2]); printf("平均成绩:%6.2f\n",(*(p+t)).aver); } 输出显示: 请输入学生总人数:3 请输入第1个学生的学号和三门课成绩:123 34 45 67 请输入第2个学生的学号和三门课成绩:233 45 67 97 请输入第3个学生的学号和三门课成绩:323 46 78 99 平均成绩最大的同学的信息为: 学号: 323 三门课的成绩: 46.0 78.0 99.0 平均成绩: 74.33 方法二(优化版) 因为向average函数传参的参数太多,容易混淆,所以进行改进 直接将定义在main函数中的变量定义在average函数中直接使用,无需传参,更加方便 #include #include void average(struct Student *p1,int k); int max(struct Student *p,int k); void pus(struct Student *p,int t); struct Student{ long int num; float score[3];//存储三门课的成绩 float aver;//三门课成绩的平均值 }; struct Node{ struct Node *next; }; int main() { struct Student stu[1000];//定义一个足够大的数组用来存放数据 struct Student *p1=stu; struct Node *n,*p,*head=NULL; int m; printf("请输入学生总人数:"); scanf("%d",&m); average(p1,m); pus(p1,max(p1,m)); } void average(struct Student *p1,int k)//定义一个求平均值的函数 { struct Node *n,*p,*head=NULL; for(int i=0;inext=n;//让第二个结点链接到第一个结点的next中 p=n;//将n的地址传过去 } } } int max(struct Student *p,int k)//定义一个求最大值的函数 { int i;int t=0; for(i=0;i(*(p+i)).aver) t=1+i; return t; } void pus(struct Student *p,int t)//定义一个输出的函数 { printf("平均成绩最大的同学的信息为:\n"); printf("学号:%6ld\n",(*(p+t)).num); printf("三门课的成绩:%6.1f %6.1f %6.1f\n",(*(p+t)).score[0],(*(p+t)).score[1],(*(p+t)).score[2]); printf("平均成绩:%6.2f\n",(*(p+t)).aver); } 输出显示: 请输入学生总人数:2 请输入第1个学生的学号和三门课成绩:2019000 68 98.3 89.4 请输入第2个学生的学号和三门课成绩:2019111 98 45.6 56.7 平均成绩最大的同学的信息为: 学号:2019000 三门课的成绩: 68.0 98.3 89.4 平均成绩: 85.23
作者:海底捞肥牛



姓名 输出 结构体 课程 链表 指针 动态 数组 变量

需要 登录 后方可回复, 如果你还没有账号请 注册新账号